2013-10-09 1 views
28

내 응용 프로그램의 새 버전을 만들고 있는데, 사용되지 않는 메시지를 대체하려고 시도하고 있지만이 메시지를 처리 ​​할 수 ​​없습니다.drawInRect : withAttributes vs drawInRect : withFont : lineBreakMode : alignment

drawInRect:withAttributes이 작동하지 않는 이유를 알 수 없습니다. drawInRect:withFont:lineBreakMode:alignment 메시지를 보내면 코드가 제대로 표시되지만 drawInRect:withAttributes을 보내면 코드가 작동하지 않습니다.

나는 똑같은 rect와 font를 사용하고 있으며, 나는 같은 텍스트 스타일이라고 믿는다. 상수는 이미지 바로 아래에 rect를 위치 시키지만 두 호출에 동일한 rect를 사용하므로 사각형이 정확한지 확신합니다.

은 변수를 사용

 CGRect textRect = CGRectMake(fCol*kRVCiPadAlbumColumnWidth, 
            kRVCiPadAlbumColumnWidth-kRVCiPadTextLabelYOffset, 
            kRVCiPadAlbumColumnWidth, 
            kRVCiPadTextLabelHeight); 
     NSMutableParagraphStyle *textStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy]; 
     textStyle.lineBreakMode = NSLineBreakByWordWrapping; 
     textStyle.alignment = NSTextAlignmentCenter; 
     UIFont *textFont = [UIFont systemFontOfSize:16]; 

이 (아무것도 화면에 묘화되지 않음)이 작동하지 않는 행

 [bs.name drawInRect:textRect 
      withAttributes:@{NSFontAttributeName:textFont, 
           NSParagraphStyleAttributeName:textStyle}]; 

상기 (밑도는 bs.name가있는 NSString 객체이다)

이것은 위와 같은 변수를 사용하여 작동합니다 (문자열이 화면에서 올바르게 그려 짐).

 [bs.name drawInRect:textRect 
        withFont:textFont 
       lineBreakMode:NSLineBreakByWordWrapping 
        alignment:NSTextAlignmentCenter]; 

도움이 될 것입니다. 감사.

+0

'drawInRect : withAttributes :'가 작동하지 않는다고 말하는 것은 무엇을 의미합니까? –

+0

아주 좋은 질문입니다. 미안하지만 나는 정교하지 않았다. bs.name에 포함 된 문자열은 drawInRect : withFont : lineBreakMode : alignment 메시지를 사용하여 화면에 올바르게 그려지지만 drawInRect : withAttributes 메시지를 사용할 때는 나타나지 않습니다 (아무 것도 그려지지 않음). –

답변

28

난 당신이 내가이 두 가지 방법의 출력 사이의 차이를 볼 수 없습니다

- (void)drawRect:(CGRect)frame 
{ 
    NSMutableParagraphStyle *textStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy]; 
    textStyle.lineBreakMode = NSLineBreakByWordWrapping; 
    textStyle.alignment = NSTextAlignmentCenter; 
    UIFont *textFont = [UIFont systemFontOfSize:16]; 

    NSString *text = @"Lorem ipsum"; 

    // iOS 7 way 
    [text drawInRect:frame withAttributes:@{NSFontAttributeName:textFont, NSParagraphStyleAttributeName:textStyle}]; 

    // pre iOS 7 way 
    CGFloat margin = 16; 
    CGRect bottomFrame = CGRectMake(0, margin, frame.size.width, frame.size.height - margin); 
    [text drawInRect:bottomFrame withFont:textFont lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter]; 
} 

를 제공에만 코드를 포함 drawRect:UIView을했습니다. 문제는 코드의 다른 부분일까요?

+0

이 답변을 제공해 주신 것에 감사드립니다. 내 코드는 drawRect : UIView에서 실행됩니다. 나는 그것이 어딘가에 있어야한다는 데 동의하지만, 만약 내가 하나 또는 다른 하나를 논평한다면, 다른 하나는 작동하지 않는다. 어쩌면 사각형을 다시 계산해야 할 이유가 무엇이든, iOS 7과 다를 수 있습니다 (정보의 경우 iOS 7 방법은 drawInRect : withAttributes 임). 직사각형을 좀 더 뒤죽박죽에 놓을 것입니다. 다시 한번 감사드립니다. –

+0

두 메소드에 전달 된 'CGRect'가 동일한 지 확인하십시오. 또한 1) 텍스트 색상을 변경하고, 2) 직사각형에 배경을 그려 원하는 위치에 배치 할 수 있습니다. 이 단계는 다소 단순하지만 어쩌면 문제가있는 곳을 찾는 데 도움이됩니다. –

+0

정확히 같은 코드를 정확히 같은 방법으로 사용하고 있습니다 (두 가지가 아닙니다). drawRect : (old)를 drawRect : (new)로 바꾼다면 똑같은 사각형을 사용하여 코드에서 정확히 같은 지점에 하나를 사용합니다. 나는 아직도 곤란하다. 내가 무엇이라도 발견하면, 나는 게시 할 것이다. –

36

텍스트의 색을 설정하려면 속성에 NSForegroundColorAttributeName을 추가 매개 변수로 전달해야합니다.

NSDictionary *dictionary = @{ NSFontAttributeName: self.font, 
           NSParagraphStyleAttributeName: paragraphStyle, 
           NSForegroundColorAttributeName: self.textColor};