HMDT - Logic and Intuition -

about HMDT

Cocoa Programming Tips 1001

Foundation

NSMutableAttributedString

Foundation - NSMutableAttributedString

文字に属性を設定する

Keywords: addAtribute

NSMutableAttributedString を使うと、文字に属性を設定できるんだ。こいつの addAtribute:value:range ってメソッドを使う。

Foundation/NSMutableAttributedString.h

- (void)addAttribute:(NSString *)name 
        value:(id)value 
        range:(NSRange)aRange;

ここで設定する属性は、Application Kit の方の NSAttributedString Class ClusterAdditions ってドキュメントに記載がある。こんな感じの属性があるんだ。

NSFontAttributeName
フォント属性
NSForegroundColorAttributeName
文字の色
NSBackgroundColorAttributeName
文字の背景色
NSUnderlineStyleAttributeName
下線
NSSuperscriptAttributeName
上付き
NSBaselineOffsetAttributeName
ベースラインからのオフセット(正負 OK)
NSKernAttributeName
カーニング(正負 OK)
NSLigatureAttributeName
リガチャをするか否か
NSParagraphStyleAttributeName
パラグラフスタイル
NSAttachmentAttributeName
テキストアタッチメント(よくわかんない)

じゃ、使ってみよう。一気にいろいろ使ってみるよ。

AttributedStringDrawingView.m

- (void)drawRect:(NSRect)frameRect
{
    NSMutableAttributedString*	str = 
        [[NSMutableAttributedString alloc]
            initWithString:@"How's about your Mac? It's fine!"];
    NSPoint		point = { 10, 10 };
    
    // Set font attribute
    
    [str addAttribute:NSFontAttributeName
        value:[NSFont fontWithName:@"Chicago" size:36.0] 
        range:NSMakeRange(0,5)];
    [str addAttribute:NSFontAttributeName 
        value:[NSFont fontWithName:@"Helvetica" size:24.0] 
        range:NSMakeRange(6,5)];
    [str addAttribute:NSFontAttributeName 
        value:[NSFont fontWithName:@"Sand" size:12.0] 
        range:NSMakeRange(12,4)];
    [str addAttribute:NSFontAttributeName 
        value:[NSFont fontWithName:@"Monaco" size:48.0] 
        range:NSMakeRange(17,4)];
    [str addAttribute:NSFontAttributeName 
        value:[NSFont fontWithName:@"Apple Chancery" size:36.0] 
        range:NSMakeRange(22,4)];
    [str addAttribute:NSFontAttributeName 
        value:[NSFont fontWithName:@"Times" size:48.0] 
        range:NSMakeRange(27,4)];
    
    // Set underline style attribute
    
    [str addAttribute:NSUnderlineStyleAttributeName 
        value:[NSNumber numberWithFloat:1.0] 
        range:NSMakeRange(0,2)];
    [str addAttribute:NSUnderlineStyleAttributeName 
        value:[NSNumber numberWithFloat:2.0] 
        range:NSMakeRange(2,3)];
    
    // Set foreground color attribute
    
    [str addAttribute:NSForegroundColorAttributeName 
        value:[NSColor redColor] 
        range:NSMakeRange(6,5)];
    [str addAttribute:NSForegroundColorAttributeName 
        value:[NSColor colorWithCalibratedWhite:0.0 alpha:0.3] 
        range:NSMakeRange(17,4)];
    
    // Set background color attribute
    
    [str addAttribute:NSBackgroundColorAttributeName 
        value:[NSColor blueColor] 
        range:NSMakeRange(22,4)];
    
    // Set ligature attribute
    
    [str addAttribute:NSLigatureAttributeName 
        value:[NSNumber numberWithInt:1] 
        range:NSMakeRange(27,4)];
    
    // Set kern attribute
    
    [str addAttribute:NSKernAttributeName 
        value:[NSNumber numberWithFloat:10.0] 
        range:NSMakeRange(22,4)];
    
    // Set superscript attribute
    
    [str addAttribute:NSSuperscriptAttributeName 
        value:[NSNumber numberWithInt:1] 
        range:NSMakeRange(17,4)];
    
    // Set baseline attribute
    
    [str addAttribute:NSBaselineOffsetAttributeName 
        value:[NSNumber numberWithFloat:-10.0] 
        range:NSMakeRange(12,4)];
    
    [str drawAtPoint:point];
}

こうやっていろんな属性を設定できるわけだ。最後の drawAtPoint: で画面に字を描いてる。

back to top content

Copyright © 2002-2006 HMDT. All rights reserved.