Cocoaセミナー グラフィックス編

アップルジャパン本社で行われたCococaセミナーグラフィックス編に参加してきた。Cocoaのこういったセミナーとか勉強会は少ないのでありがたい。もっと、回数があればもっとありがたいのは確かだが。ということで、備忘録として簡単にまとめておく。セミナー内容ってNDAだったっけ?

Cocoaでの画面描画

  • 低レベル
    • NSViewを継承する
    • drawRect:ですべての画面描画を行う必要がある
    • 再描画が必要なときにはsetNeedsDisplay:を呼ぶ
    • NSImageとかNSBezierPathを使って描画する
    • マウスイベントを取得するときには、mouseDown:などを実装する
    • NSViewは左下原点 (PostScript由来?)
    • 左下原点はUIとの整合性が悪い
    • isFlippedを実装してYESを返すと左上原点になる。
    • NSImage#setFlippedをYESに設定すると左上原点のデータになる
  • 高レベル
    • Image Kitを使うと楽ができる
    • バグなのか仕様なのかわからない動作がある
    • 動作が高速
    • 回転を行うとCore Animationでアニメーションがつく
    • 画像に関する大半のことができるらしい
    • IKImageBrowserViewは意外にメモリーを食う
    • IKImageBrowserViewはIKImageBrowserItemプロトコルに適合したデータが必要
    • IKimageBrowserViewはデータソースとしてIKImageBrowserDataSourceが必要

IKImageViewをInterface Builderで直接使ったときにはIKImageView#setAutoresizesの動作が怪しい。というか、IKImageViewの動作がまだ怪しいらしい。そして、IKImageBrowserViewで作った画像ブラウザはスクロールしていろいろなサムネールを内部で作らせるとすごい勢いでメモリを食う。Leopardに標準でついているデスクトップピクチャって解像度がすごい高いというのもあるが、起動直後で100MB以上、スクロールすると800MBとか食った。空きメモリは資源の無駄遣いということで悪という考えらしい。ついでに、可変サムネールとかを考えるとメモリ上に展開するという方向になっていくらしい。