core animation と view
DESCRIPTION
第49回Cocoa勉強会関西の発表資料です。TRANSCRIPT
Core Animation と ViewかねうちてつやCocoa勉強会関西
2013.03.30
自己紹介かねうちてつや
@kaniza / id:kaniza など
フェンリルで働いてます
Web ブラウザ Sleipnir for Mac / iPhone / iPad など
今日のネタUIView
NSView
Core Animation
CALayer
NSView / UIViewOS X / iOS GUI の基本構成要素
ボタン、テキスト、スライダなど
OS X AppKit では NSView (2001年~)
iOS UIKit では UIView (2008年~)
Core Animation
初登場は OS X Leopard のプレビュー (2006年)
市場投入は初代 iPhone (2007年)
iPhone の 数ヶ月後に Leopard リリース
iPhone の開発過程で生まれたらしい
Core AnimationとUIViewUIView の描画は CALayer で実現
当初からアニメーションに適した設計
Core AnimationとNSViewOS X Leopard で Core Animation に対応
オプションで CALayer ベースの描画モデルに
[view setWantsLayer:YES] で Layer-Backed View に変身
デモ
Layer-Backed View - OS X
Layer-Backed View - OS XNSView を CALayer で描画
Layer-Backed View - OS XNSView を CALayer で描画
NSView でなめらかアニメーション
Layer-Backed View - OS XNSView を CALayer で描画
NSView でなめらかアニメーション
Subview もすべて CALayer ベースに
Layer-Backed View - OS XNSView を CALayer で描画
NSView でなめらかアニメーション
Subview もすべて CALayer ベースに
CALayer は AppKit が管理
Layer-Backed View - OS XNSView を CALayer で描画
NSView でなめらかアニメーション
Subview もすべて CALayer ベースに
CALayer は AppKit が管理
!= Layer-Hosted View
CoocaSlides
CALayer と View
CALayer と View
構造は類似
階層的に描画内容を持つ
描画だけなら CALayer だけでも可
View はイベント処理に対応
描画モデルとアニメーション
なぜ Layer-Backed View だとなめらか?
drawRect と contents
従来の描画モデルウィンドウをロジック(drawRect:)で塗り潰す
再描画領域に関連する View で drawRect:
移動したらその都度 drawRect:
そもそもアニメーション向きじゃない
Traditional View
Traditional View
Traditional View
Traditional View
drawRect:
drawRect:
Layer-Backed View (CALayer)の描画モデル
絵を重ね合わせる
描画内容をキャッシュ
アニメーション時に drawRect しない
移動や合成はGPUの得意分野
Layer-Backed View
Layer-Backed View
Layer-Backed View
CoocaSlides
いいことばかりじゃない
メモリ消費量の面では不利
発展途上で変化が激しい
Mountain Lion で大きく完成度が上がった
Lion 以前でテキストレンダリングが汚い
デモ
とはいえ
未来は Layer-Backed View だ
参考Sleipnir for Mac の実装技術: Layer-Backed View
http://blog.fenrir-inc.com/jp/2013/02/sleipnir-mac-implementation.html
Core Animation Programming Guide
NSView Class Reference
Application Kit Release Notes
まとめNSView も UIView のように CALayer ベースに移行しつつある
従来の NSView と CALayer の描画モデルの違い
NSView フル活用の Sleipnir for Mac よろしく!
http://www.fenrir-inc.com/jp/mac/sleipnir/