【11】角丸矩形を描く(塗りつぶす)
角丸はNSBezierPathの appendBezierPathWithArcFromPoint:toPoint:radius: を使い
ます。
次のように appendBezierPathWithRoundedRectangle:withRadius: をNSBezierPathのカテゴリ(RoundedRect)として実装すると、塗りつぶす場合にはfill、枠を
描く場合はstrokeを使い描くことができます。
▼注意:10.5からはこのカテゴリを追加しなくても appendBezierPathWithRoundedRect:xRadius:yRadius: が使えます。(2007.01.12追記)
▼注意:aRectの辺の長さとradiusの整合性のチェックをしていません。radius の値は短辺の1/2以下にしてください。
@interface NSBezierPath(RoundedRect)
- (void)appendBezierPathWithRoundedRectangle:(NSRect)aRect
withRadius:(float)radius;
@end
@implementation NSBezierPath(RoundedRect)
- (void)appendBezierPathWithRoundedRectangle:(NSRect)aRect
withRadius:(float)radius
{
NSPoint topMid = NSMakePoint(NSMidX(aRect), NSMaxY(aRect));
NSPoint topLeft = NSMakePoint(NSMinX(aRect), NSMaxY(aRect));
NSPoint topRight = NSMakePoint(NSMaxX(aRect), NSMaxY(aRect));
NSPoint bottomRight = NSMakePoint(NSMaxX(aRect), NSMinY(aRect));
[self moveToPoint:topMid];
[self appendBezierPathWithArcFromPoint:topLeft toPoint:aRect.originradius:radius];
[self appendBezierPathWithArcFromPoint:aRect.origin
toPoint:bottomRightradius:radius];
[self appendBezierPathWithArcFromPoint:bottomRight
toPoint:topRightradius:radius];
[self appendBezierPathWithArcFromPoint:topRight toPoint:topLeft radius:radius];
[self closePath];
}
@end
参考文献「Cocoa Programming」 p432より転記
使用例:
NSBezierPath *bp;
bp = [NSBezierPath bezierPath];
[bp appendBezierPathWithRoundedRectangle:frame withRadius:10.0];
// 50%透明のグレイで塗りつぶす
[[NSColor colorWithDeviceRed:0.5 green:0.5 blue:0.5 alpha:0.5] set];
[bp fill];
【14】NSDateを書式指定して表示する
descriptionWithCalendarFormat:timeZone:locale: メソッドを使います。(指定した書式の文字列オブジェクトが得られます)
pathでフルパスを指定したファイルの修正日を書式指定する例:
NSDictionary *attr;
attr = [[NSFileManager defaultManager] fileAttributesAtPath:path traverseLink:NO];
NSString *mdateStr = [[attr objectForKey:NSFileModificationDate] descriptionWithCalendarFormat:@"%Y/%m/%d" timeZone:nil locale:[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]]
書式は Converting Dates to Strings の The Calendar Format に一覧表があります。
上記の例は
%Y 年 西暦4桁(1990など)
%m 月 数値の月(01〜12)
%d 日 数値の日(01〜31)
区切り文字にスラッシュを指定しているので 2008/01/04 などの文字列になります。
【15】色・書体・サイズを指定した文字表示
表示属性を辞書に登録しそれを利用して表示します。
通常のNSStringも drawInRect:withAttributes: や drawAtPoint:withAttributes: メソッドで指定した属性で表示できます。
strをdrawInRect:withAttributes:で表示する例:
ここでは m_infoStrAttributes はインスタンス変数です。書体やサイズ色は一度設定しその属性を何度も使います。
m_infoStrAttributes = [[NSMutableDictionary dictionary] retain];
[m_infoStrAttributes setObject:[NSFont userFontOfSize:InfoStrSize] forKey:NSFontAttributeName];
[m_infoStrAttributes setObject:[NSColor blackColor] forKey:NSForegroundColorAttributeName]; fileAttributesAtPath:path traverseLink:NO];
// 別のメソッドでstrを指定書式で表示します
[str drawInRect:frame withAttributes:m_infoStrAttributes];
【16】表示方法(揃え)を指定した文字表示
「中央揃え」などの表示方法は NSParagraphStyleAttributeName で表示属性に登録し drawInRect:withAttributes: メソッドを使って表示します。表示する矩形の幅に対して中央に表示します。
strをdrawInRect:withAttributes:で表示する例:
ここでは m_ m_fileNameAttributes はインスタンス変数です。パラグラフスタイルも一度設定しその属性を何度も使います。
#define FileNameSize (13.0)
m_fileNameAttributes = [[NSMutableDictionary dictionary] retain];
// 書体とサイズをアトリビュートに追加する
[m_fileNameAttributes setObject:[NSFont userFontOfSize:FileNameSize]
forKey:NSFontAttributeName];
// 文字色をアトリビュートに追加する
[m_fileNameAttributes setObject:[NSColor darkGrayColor]
forKey:NSForegroundColorAttributeName];
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle]
mutableCopy];
// 「中央揃え」のスタイルをアトリビュートに追加する
[style setAlignment:NSCenterTextAlignment];
[m_fileNameAttributes setObject:style forKey:NSParagraphStyleAttributeName];
[style release];
// 別のメソッドでstrを指定書式で表示します
NSRect frame;
// 実際にはframe に表示位置と高さ幅を設定してください
[str drawInRect:frame withAttributes:m_fileNameAttributes];
こちらも参照してください。
setAlignment:
NSTextAlignment