2012年2月29日水曜日

UIKitの隠れた仕様

UIFontの情報を得ようと次のようなプログラムを書いた。

NSLog(@"smallSystemFontSize=%f" ,[UIFont smallSystemFontSize]);
NSLog(@"systemFontSize=%f"  ,[UIFont systemFontSize]);
NSLog(@"buttonFontSize=%f"  ,[UIFont buttonFontSize]);
NSLog(@"labelFontSize =%f"  ,[UIFont labelFontSize]);
// この処理をmain()に置くと、なぜか↓がエラーを発生する
//  UIFont *font = [UIFont systemFontOfSize:96];
UIFont *font = [UIFont fontWithName:@"Times New Roman" size:96];
NSLog(@"capHeight =%f",font.capHeight);
NSLog(@"ascender  =%f",font.ascender);
NSLog(@"descender =%f",font.descender);
NSLog(@"lineHeight=%f",font.lineHeight);
NSLog(@"pointSize =%f",font.pointSize);
NSLog(@"xHeight   =%f",font.xHeight);

が、これが実行時にエラーを出す。
調べると、main()の中に書いているとfontWithNameまたはsystemFontOfSizeでエラーを発生する。
UIApplicationMain()以降に呼び出されるメソッド内、たとえばapplication:didFinishLaunchingWithOptions:の中だと問題ない。

main()中ではインスタンスを作ることそのものがだめなのかと思いきや、NS*では問題ない。
UIKitのインスタンスメソッドはだめなのかも知れない。

まあ、通常main()内に記述することはないはずだが、念のため。







0 件のコメント:

コメントを投稿