2014-06-11 2 views
1

다음과 같은 속성이있는 문자열을 만들 수 있습니다.NSView를 사용하여 NSAttributedString을 센터에 표시

- (NSMutableAttributedString *)makeText:(NSString *)txt : (NSString *)fontname : (CGFloat)tsize :(NSColor *)textColor :(NSColor *)shadowColor :(NSSize)offset { 
    NSShadow *shadow = [[NSShadow alloc] init]; 
    shadow.shadowColor = shadowColor; 
    shadow.shadowOffset = offset; 

    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
    paragraphStyle.lineSpacing = 10.0f; 
    paragraphStyle.alignment = NSCenterTextAlignment; 

    NSMutableAttributedString *atext = [[NSMutableAttributedString alloc] initWithString:txt]; 
    NSRange range = NSMakeRange(0,txt.length); 

    // alignment 
    [atext addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0,[atext length])]; 

    ... 
    ... 
    return atext; 
} 

이 특성 문자열을 NSTextField로 설정하면 결과 특성 문자열이 올바르게 정렬됩니다. NSView의 서브 클래스로 보내면 문자열은 왼쪽 정렬됩니다. 이 정렬 된 문자열을 올바른 정렬로 표시 할 수있는 방법이 있습니까?

// .h 
@interface imageView1 : NSView { 
    NSAttributedString *aStr; 
} 

// .m 
- (void)drawRect:(NSRect)dirtyRect { 
    [aStr drawAtPoint:NSMakePoint((self.frame.size.width-aStr.size.width)/2.0f,(self.frame.size.height-aStr.size.height)/2.0f)]; 
} 

감사합니다. OS 버전은 10.8입니다.

+0

죄송합니다. 내 IOS 기반 답변 (현재 삭제됨)에 대해 죄송합니다. - iOS에서도 TextKit을 사용하여 그릴 수 있습니다. 나는 당신이 비슷한 것을 할 수 있다고 확신합니다. 이 예제를 보라. (iOS지만 OS X에서는 거의 동일하다.) 옵션 2 : https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch10p510attributedStringDrawing2/ch23p773attributedStringDrawing/StringDrawer. m – matt

+0

알 겠어. 고마워, 매트. –

+0

또한'drawWithRect : options :'에있는 문서를 보아라. 이것은 더 간단하다. (틀린 대답과 같다.) – matt

답변

1

한 지점에 그릴 경우 가운데 놓기와 관련하여 경계가 없습니다. rect를 지정해야합니다. docs (drawWithRect:options:)을 참조하십시오. 그곳에있는 훈계가 인 것을에 명시하면 그 옵션은 NSStringDrawingUsesLineFragmentOrigin이어야합니다.

+0

예. 고마워. –

관련 문제