Archive for the ‘CALayer’ Category
(解決?) UIView 簡易アニメーション
月曜日, 10月 26th, 2009いや〜、長い事かかりましたがようやく解決しました。
ぴょこっと出す吹き出しという事ですが、
結論から言うと、CALayerを使いました。
というのも、
・layerの方が軽いというつぶやきを誰かがしてた
・CAKeyframeAnimationを使いたかった
・core animationを勉強したのに使わないのは悔しい
という3点から (苦笑)
core animationはすごく直感的でわかりやすかったのですが、
CALayerを使う上で苦労したのは再描画です。
まず、layerをメイン画面のview.layerにaddSublayerします。
ぴょこんと飛び出すわけですから、初期状態ではサイズ(0, 0)にします。
そのレイヤーに関してaddAnimationするんですが、
デフォルトではsetNeedsDisplayされるのはおそらく
addSublayerされた時のみです。
そのため、描画は変わらず(今回は吹き出し模様が変化しない)、
外枠のみ拡大されていくわけです。
ちなみに背景を白くしてるとわかりやすいですよ。
大変だったのはずばりここですね。
今さっきなんとか解決したんですが、
ポイントは以下の2点です。
・NSTimerを使って逐一layerにsetNeedsDisplayを送る
・同じタイミングでlayer.frame.sizeも更新する
上の2点を改善して初めて解決しました。
つまり、「アニメーション上は形状が変形していても
実際のlayer.frame.sizeは変化していない」という事です。
具体的なコードは省略しますが、ココを参考にしたので紹介します。
http://blog.omnigroup.com/2008/11/14/animating-calayer-content/
サンプルコードもあるのでためになるかと。
あとは吹き出しに文字表示です。
CALayerのCGContextに表示しているので、
CGContextSetTextPositionとかを使えばいいんだろうか。
あと、字体に制限があるという噂が。
どうしましょうかね〜