【iOS】Objetive-CのClassにあるカテゴリ機能を使ってUIViewアニメーションを外出ししてみた

Apple

 どうも、僕の作り方では、UIViewControler が長くなる傾向がある。引きづられるように、各クラスのソースも長くなる。そうすると、メンテナンスがやりにくい。困ったものだ。ちょっと、変更がかかっただけでもソースを見つけるのに時間がかかる。

 もちろん、ソースの配置は階層構造をとっているから、目的のファイルにはすぐにたどり着ける。問題は、あくまでも、ソースファイルの中のコードの長さ。いや、長さというより、メソッドの多さ。

 イベントドリブンとして記述できるが Objective-c の素敵なところなんだけど、整理ができてないとあちこちのメソッドにジャンプするので時々に追いかけにくい。もちろん、メソッドの名前にはそれなりに気をつかっているつもりだが。

 そんなこともあり、Objetive-Cの機能として提供されているClassのカテゴリを使って、アニメーションを別ファイルに書き出し、まずはBlocks処理を多用するアニメーション部分のソースコードをスッキリさせるようにした。

 わりと簡単。しかも便利。

 BallViewというUIViewクラスをアニメーションさせる例で説明します。

 やりたいことは、ボールを中央から右に動かして中央に戻すを2回繰り返す。

 mainViewにBallViewを追加してアニメーションさせることが目標。
 mainViewはStoryBoardで IBOutlet をしているものとする。この辺りがわからない方には説明不足な部分も出るかもしれませんがご了承下さい。

 まずは、クラスカテゴリファイルの作り方から
 右クリックをして「New File」

20130810_01

 Choose a template for your new file:が表示される
 「Objective-C category」を選択して「Next」ボタンをクリック

20130810_02

 Choose options for your new file:が表示される
 1. Category に 任意の名前を入れる。
 2. Category on からカテゴリを作成したいクラスを選ぶんで「Next」ボタン
 Categoryの名前にクラス名をつけるべきか悩むと思いますが、うまく処理されますのでつけなくて大丈夫です。(後述)

20130810_03

20130810_04

 Project Navigator に
 「BallView+boundRightAnimation.h」「BallView+boundRightAnimation」が追加されました。
 ファイル名はクラス名+Categoryになっています。

20130810_05

 まず、ヘッダファイルをみてみましょう。

 クラスカテゴリは 「@interface クラス名 (カテゴリ名)」 で表記します。これで、BallViewに属することになります。継承ではないのでインスタンス変数をカテゴリ内で宣言できません。宣言する場合はクラスに記述しましょう。この場合は「BallView.h」に記述します。

 クラスカテゴリは、クラス拡張としても使えます。UIViewにメソッドを追加することも可能です。

 それでは、アニメーションさせる記述を書いていきましょう。「BallView+boundRightAnimation.h」に外部からアクセスできるメソッドを宣言します。

 次に「BallView+boundRightAnimation.m」にアニメーションのプログラムを記述します。

 UIView animateWithDuration を二回実行していいるだけです。8回ぐらい実行するようにしても大丈夫です。

 あとは、「ViewController」でコントロールします。

 まず、「ViewController.h」に #import を追加します。

 「ViewController.m」から「startBoundRightAnimetion」を呼び出すようにしたら完成です。
 今回は、ViewDidLoad内で直接呼び出します。

 あとは、実行して確認すれば終わり。

 サンプルコード (Public Domain)

 これで、UIViewControllerはコントロールに専念し、BallView内のコードもスッキリ。アニメーションは増えるた度にカテゴリでつかしてらくらく管理です。

おわり

コメント

タイトルとURLをコピーしました