先日公開されたFacebookのpop、アニメーションライブラリですよとリリース前から言われてたものの、popについて語られるときは大抵「Paperアプリのテクノロジーをオープンソース化」という枕詞がつくので、Paper風UIコンポーネント(ジェスチャーでヌルヌル操作できる)もライブラリに含まれてたらいいなとか、せめてサンプルが Paper 風だといいなとかうっすら期待してたのですが、まったくそんなことなく、やっぱり純粋なるアニメーションライブラリでした。サンプルプロジェクトすらつかない硬派っぷり。。
じゃあ今まで実現が難しかったような何か(ド派手なアニメーションとか?)ができるようになってるのか、というとそういうわけでもなくて、
In addition to basic static animations, it supports spring and decay dynamic animations, making it useful for building realistic, physics-based interactions.
ベーシックなアニメーション以外には、 spring (バネ風にボヨヨーンとなる)と、 decay (スーッと速度が減衰する) アニメーションをサポートしている、ってことで、正直地味です。
バネっぽいアニメーションに関しては iOS 7 で標準サポートされた し、イージングについてはCore Animation で自由に数式や関数の曲線を指定できるので、このあたりはどうとでもできるし、そのあたりを いい感じにラップしてくれてる OSS もいくつかあります。
そんなわけで pop の神髄はそこ自体ではないはず、この記事 にあるような、パフォーマンスへの配慮 とかカスタマイズ性 にあるはず、で、それって具体的にどういう実装になってるんだろう、とソースを見てみることにしました。
popクラス群の依存関係
`POPVector` とか `TransformationMatrix` とかどうアニメーションに活かされてるのかパッとわからなかったので、 objc_dep でクラスの依存関係を出力 してみました。
・・・相当入り組んでますが、局所的にみればこのクラスはこれとあれに参照されてるのか、とかいろいろわかります。
(つづく・・・)