Entries

iOS用のアニメーションエンジンを作ろうと思う その1

iOSのSDKが提供するアニメーションSDKは正直いってショボイ。

UIAnimationは機能が貧弱すぎるし、CoreAnimationは強力なものの手続きが煩雑で使えたものじゃない。JSやAndroidと比べれば悪くはないのだけれども、僕はもともとFlash業界で育ってきた人間だったので、Flashの柔軟な表現力が基準になってしまう。
しょうがないので結局、自分で作ることにした。

GitのリポジトリはGLDTween、ライセンスはMITを予定。

そもそも、なぜiOSのアニメーション系のSDKがショボイのか?というと、これはUIKitの設計のせいだ。
UIKitではViewの座標系が、CGPoint、CGSize、CGFrame、CGAffineTransformなど様々な構造体に分散して保持されている。構造体はNSObjectではないので、配列や辞書に突っ込むことができず、参照ではなくコピーであり、そしてオブジェクト型が継承構造になっていないため同一視できない。

この為、例えばViewのx座標をアニメーションさせるとしよう。このとviewとxの値だけをアニメーションエンジンに渡してもアニメーションさせることができない。viewを渡し、xを渡し、さらにxがCGPointの一部であり、view.frame.origin.x のキーパスを辿って変更する必要がある・・・という情報まで渡さなければならない。このため、あらゆるアニメーション手続きを同一視したアニメーションエンジンを書くのがしごく難しいのである。

こういった問題を解決するため、Flashの伝説的なアニメーションエンジンTweenerをベースに、あらゆるプロパティを同一視してアニメーションを実行管理できるアニメーションエンジンを作ろうと思う。

だいたい下記のようなことができるようにする。ボチボチと進行をここでまとめていく。

  • だいたいアニメを1行でかける
  • アニメーション中にアニメーションを変更しても衝突しない
  • アニメーションカーブが豊富
  • なんでもアニメーションできる
  • プラグインにより拡張可能