初めは固定のポイントで文字を表示させていたのだけれど、OSXのコマンドキー+tabで表示出来る起動アプリの切り替え画面の様に、アイコンの下に名前を表示させたいな!と思ったのが迷宮の入り口...
出口まで、2時間かかった。
要するに、
←これを、こうしたかったのだ→
アイコンのpoint.x下から表示させるのが手っ取り早いが、それだと短いアプリ名なら良いが、長いアプリ名を枠の右側に表示させていると、枠からはみ出してしまう。
短いアプリ名などはセンタリングして、枠からはみ出してしまいそうな文字はアイコンの右端が文字列の最後にしようと思いやっていたが、これに2時間かかったんだよ!(`Д´)
出来ない時は空回りするのが人間なのです。
初め、lengthから割だそうとやってたが、文字によってピクセル数が変わってくるので無意味。色々計算してごり押ししようとやってたが、表示がバラバラになるしだめ。
Googleで検索しても情報は得られず、しょんぼりなって、APIリファレンスを見ているとNSAttributedStringのサイズを調べれば良いと発見。意外と簡単に出来て腹がたったが、初めから見ときゃ良いんだよ!ヽ(`Д´)ノ
他に同じ様な人は居ないと思うが、ブログに書くネタも少ないので覚え書き。
NSAttributedString *appNameStr;
NSString *appName = [appsArray objectAtIndex:selectedItemIndex];
appNameStr = [[NSAttributedString alloc]
initWithString: [[appName lastPathComponent]
stringByDeletingPathExtension] attributes:appNameText];
NSSize strSize = [appNameStr size];
[appNameStr drawAtPoint:NSMakePoint((selectedItemPoint.x +
ICONS_SIZE_SPACE/2) - strSize.width/2,selectedItemPoint.y)];
[appNameStr release];
appNameはNSMutableArrayで保持しているselectedItemIndex番目の項目のフルバスが入る。
appNameTextは予め作っておいたフォントやサイズの情報を渡す。
出来上がったら後はNSSizeでappNameStrのサイズを調べたらOK。
strSize.widthで幅が得られます。
ICONS_SIZE_SPACEは、プリプロセッサです。指定している数字がコンパイル時に置き換わります。
長い文字でもこのように表示することが出来るように(・∀・)ニヤ

右端を出すには、
selectedItemPoint.x + ICONS_SIZE_SPACE
左端もセンタリングではみ出そうな時は、
[appNameStr drawAtPoint: selectedItemPoint];
で選択しているアイコンの左下のNSPointを指定するだけなので簡単。
仕上げて1週間以内にはリリース出来そうです。

for OS X










for iPhone







