CoreAnimationの概要理解と解説
- Blocks
- 概要の理解、さらりと。CoreAnimationで必要になれば、また戻って。
- UIViewクラスのアニメーション
- 基本のアニメーションを押さえます。
- ViewControllerの紹介
- アニメーション効果をふんだんに使っているCollectionViewControllerを紹介します。
- CoreAnimation
- 文書ベース、WWDCのデモ動画で動いてるところを見ながら理解
- タイミングとパターンの指定方法。作りこみに必要っぽいのでそこを重点的に。
白板

ドキュメント
Blocksの概要
- Blocks プログラミングトピックス
- 達人出版会 エキスパートObjective-Cプログラミング - iOS/ OS Xのメモリ管理とマルチスレッド より詳しく知りたい方には、これがおすすめ。iOS5プログラミングブックにも、同じ著者の方の、Blocksの説明があります。そちらを参照してもよいです。
UIViewのアニメーションをするなら、Blocksを使うほうが圧倒的に便利。Delegateとの違いは:
- アニメーションの処理を、その場 でかける
- この部分はbeginAnimation/commitAnimationで囲むだけのdelegate利用と同じ
- アニメーション終了時の処理を、その場でかける
- ここが大きい。イベント処理の連結にBlocksは便利。
- 次のアニメーションにつなげるなど。
- delegateは、処理完了が1つのメソッドに集中する。そのため、コンテキストを渡して、どの文脈のアニメーションかをメソッド内部で判別しなければ、ならない。とても手間&コードの場所が別れるため、コードがとても読みにくい。
- 変数を渡せる
- Blocksは、変数を渡せる。デフォルトで読み込みのみ。書き戻したい時は__blocks修飾子をつける。
- 変数は、値型(intやdoubleなど)と参照型(インスタンスなど)がある。
- 値型を書き戻す用途は、多分ない(変更タイミングがわかんない書き戻しはしないだろう)
- 参照型(インスタンス)は、そのメモリポインタからのメソッド呼び出しは自由だから、書き戻しを意識することなく、普通に使えばいい。
- Blocksは、変数を渡せる。デフォルトで読み込みのみ。書き戻したい時は__blocks修飾子をつける。
UIViewのアニメーション
- iOS View プログラミングガイド(PDF)
- UIViewを使ったアニメーションの基本が解説されています。
WWDC 2010 Session 123 Building Animation Driven Interface
アニメーションを書く場所。View内部のアニメーションなら、View自体に書いたほうが、すっきりする。複数のViewを動かしたいなら、ViewControlleに書く方がいい。
やり方は、[viewController layoutIfNeeded]で-(void)layoutSubViews {} ?(やったことないから、わかんない)
ViewController
今では、ViewControllerで、必要な表現は間に合うようになっています。UIViewでは実現ができないアニメーションが必要になる場面は、ほとんどありません。ViewControllerは、次の2つのドキュメントを参照します:
UIViewCollectionController
iOS6から、iBooksのような、グリッドのレイアウト・コントローラが導入されました。その解説スライドは:
- WWDC 2012 Session 205 Introducing CollectionViews
- WWDC 2012 Session 219 Advanced Collection Views and Building Custom Layouts
です。Session205は、グリッドレイアウトの使い方を解説しています。APIはUITableViewと同じ、DataSourceを提供して、Cellは再利用されます。Cellは同じ幅である必要はありません。レイアウトを柔軟に配置をしてくれます。 TableViewででもですが、iOS6から、セル名をクラス名にしておけば、reusablel cellは、内部でインスタンスが作られるので、nil判定をする必要はなくなります。
Session219は、更に進んだCollection Viewの使い方です。レイアウトの制御コードを与えることで、グリッド以外の、写真やCDアルバムの表示に使われるフリップや、アイテムを円形に並べるなど、アイテムの任意のレイアウトが実現できます。
このCollection Viewと同等の表示を自分で実装するのは、大変です。それは、これがレイアウトに加えて、その表示のアニメーション、必要な数だけCellをつくり、またCellを再利用するという、付属の制御部分がかなりの量があり、UIViewでアニメーションで作れる、といった類のものではないからです。
コレクションの表示の時に、活用してください。
CoreGraphics(描画)
-
WWDC 2011 Session 129 Practical Drawing for iOS Developers
-
Apple 日本語ドキュメント Quartz 2D プログラミングガイド(PDF)
-
[SVGKit: SVGをCoreAnimationに変換するライブラリ] (https://github.com/SVGKit/SVGKit)
CoreImage
WWDCの動画を見るのが、てっとりばやい。CoreImageは、動画のフィルタ効果にも使える汎用の画像処理フィルタの仕組み。 CoreImageを使うなら、QuartzComposerを使うのもいいかも。CoreImageのフィルタを適用した時のプレビュツール。
4.5.2のXcodeでは、デフォルトでははいっていなくて、別にインストールする。

の一番下のを選ぶとブラウザが開く。 Graphics Tools for Xcode(いくつかあるので最新版を選んで)ダウンロードして展開すると、QuartzComposerがある。いっしょにOpenGLの最適化ツールもあるので、グラフィックな開発をするなら落としておくのがいいかも。
CoreAnimationをマスターしたい方には
Githubにあるサンプル・コード:
- Core-Animation-Demos 基本のアニメーションが押さえてあるので、これ1つでOKだと思う。