Calendar
   1234
567891011
12131415161718
19202122232425
2627282930  
<< September 2010 >>
Recent Comments
Recent Trackback
Categories
Archives
Recommend
Recommend
たのしいCocoaプログラミング[Leopard対応版]
たのしいCocoaプログラミング[Leopard対応版]
木下 誠
iPhone開発に役立つぞ!
Recommend
詳解 Objective-C 2.0
詳解 Objective-C 2.0
荻原 剛志
世界一詳しいObjective-Cの本
Links
Member's Blog
Others
Profile
<< コミケ72に参加します | main | 勉強会のMovie >>
Leopard NSMenuで変わった点
 
今週の日曜日にCocoa勉強会があって、久しぶりに発表した。
(というか、このブログも久しぶり)

発表した内容は、私の得意ジャンルのメニュー関係。
Leopardで新しくなったNSMenuとNSMenuItemの差分の解説を行った。

メニュー自体は、はっきり言ってOSX10.0の頃からほとんどといっていいほど変わってない部分ではある。なぜなら、いまだにほとんどの部分をCarbonが補っていて、Cocoaからいじれる部分があまりなかったという所にある。

わかりやすく言えば、ラベルメニューやボリュームメニューのようなコントローラーを装備しているメニューをCocoaで作る事は出来なかったのだ!

しかし、Leopardではそれが解禁になった。といってもベースはCarbonなんだけど、NSMenuItemにNSViewを張る事が可能になったのだ。

具体的には以下のAPIになる…



NSMenuItem

- (void)setView:(NSView *)view;
- (NSView *)view;




これで、自分の作ったカスタムViewをメニューアイテムに貼るだけで、簡単にコントローラー付きのメニューが作れてしまう。Carbon時代でも、コントローラ付きメニューを作るには膨大なソースを書かなくてはいけなかったんだけど、これでほぼInterfaceBuilberだけで出来てしまうという簡単さになったわけだ。

これは、ある意味革命である。(^_^;

さて、NSViewが使えるとなると、NSViewのwindow API を利用する事で、メニュー自体の操作まで可能になる。これは、いろいろな使い道が出来そうだ…

というわけで、勉強会で発表した応用編のメニューを2つ紹介。

まず最初は、メニュー内のViewに画僧を配置させ、さらにアニメーションまでさせてしまおう、というサンプル。実際ちょっと同期に癖があるが、その辺をうまくすればこのように、アニメするメニューまで作れてしまう(^_^;



次に、取り外し可能メニュー。
これは、メニューウインドウのマウスイベントをハックして、そのまま取り外してしまおうという試み。

古い方なら覚えているかも知れないが、OS9時代のメニューでは、実際このような取り外しメニューが可能だった(ハイパーカードのパレットメニューのような…)。
じゃ、それを実際やってみようと、いろいろやってみた所出来た(笑)

ドラッグした先で、パネルウインドウを表示させているだけだけど、まさに取り外したような感じに見える。



と、Leopardではメニューに関しては、Viewは貼れるという事で、Cocoaプログラマーにとってはかなり自由度の増したAPIになったと思うので、今後の応用に期待したい〜
 
| プログラム | 00:36 | comments(0) | - |