わふうの人が書いてます。

iOSアプリケーション開発、BLEのファームウェアとハードウェア試作のフリーランスエンジニア。

CoreAnimationの概要理解と解説

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

白板

ドキュメント

Blocksの概要

UIViewのアニメーションをするなら、Blocksを使うほうが圧倒的に便利。Delegateとの違いは:

  • アニメーションの処理を、その場 でかける
    • この部分はbeginAnimation/commitAnimationで囲むだけのdelegate利用と同じ
  • アニメーション終了時の処理を、その場でかける
    • ここが大きい。イベント処理の連結にBlocksは便利。
    • 次のアニメーションにつなげるなど。
    • delegateは、処理完了が1つのメソッドに集中する。そのため、コンテキストを渡して、どの文脈のアニメーションかをメソッド内部で判別しなければ、ならない。とても手間&コードの場所が別れるため、コードがとても読みにくい。
  • 変数を渡せる
    • Blocksは、変数を渡せる。デフォルトで読み込みのみ。書き戻したい時は__blocks修飾子をつける。
      • 変数は、値型(intやdoubleなど)と参照型(インスタンスなど)がある。
      • 値型を書き戻す用途は、多分ない(変更タイミングがわかんない書き戻しはしないだろう)
      • 参照型(インスタンス)は、そのメモリポインタからのメソッド呼び出しは自由だから、書き戻しを意識することなく、普通に使えばいい。

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(描画)

CoreImage

WWDCの動画を見るのが、てっとりばやい。CoreImageは、動画のフィルタ効果にも使える汎用の画像処理フィルタの仕組み。
CoreImageを使うなら、QuartzComposerを使うのもいいかも。CoreImageのフィルタを適用した時のプレビュツール。

4.5.2のXcodeでは、デフォルトでははいっていなくて、別にインストールする。

の一番下のを選ぶとブラウザが開く。
Graphics Tools for Xcode(いくつかあるので最新版を選んで)ダウンロードして展開すると、QuartzComposerがある。いっしょにOpenGLの最適化ツールもあるので、グラフィックな開発をするなら落としておくのがいいかも。

CoreAnimationをマスターしたい方には

Githubにあるサンプル・コード:

  • Core-Animation-Demos 基本のアニメーションが押さえてあるので、これ1つでOKだと思う。