だいたい47度

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

MPFlipViewControllerの使い方

ゲームばっかり作っていて、UIKitを使ったアプリを作っていないことに思い至ったので学習中です。基本は下記をざっと読んで理解。遷移周りをもう少し詳しく書いてあるとよかったですが、読みやすいしイメージはつきました。

iPhoneプログラミングUIKit詳解リファレンスiPhoneプログラミングUIKit詳解リファレンス
(2010/01/12)
所 友太
iPhone/iPad/iPod touch プログラミングバイブル iOS 6/Xcode 4対応 (smart phone programming bible)iPhone/iPad/iPod touch プログラミングバイブル iOS 6/Xcode 4対応 (smart phone programming bible)
(2012/10/22)
布留川英一

んで本題。

その中でFlipBoardみたいな動きをするライブラリMPFlipViewControllerを使って遊ぼうとしたのですが、使い方がよくわからなかったので概略をメモります。

動作イメージと導入
コードと動作イメージはgithub。Modified BSD Licenseです。
cocoapodsを使う場合は

pod `MPFlipViewController`, `= 0.0.2`


概略
親UIViewControllerの下で子UIViewControllerを動かす形になります。上述の動作イメージで言うと、遷移する部分(MATRIXの写真と説明文のあたり)が子UIViewControllerにあたります。

親UIViewControllerは、MPFlipViewControllerDelegateとMPFlipViewControllerDataSourceの2つのプロトコルを導入します(もちろん他クラスに導入しても良いですが)。単純に使うなら、プロトコルで定義されている関数はほぼsampleのままでよいです。一点、flipViewController: viewControllerBeforeViewControllerとflipViewController: viewControllerAfterViewControllerの、nilを返す条件のみ修正する必要があります。ここは、ページめくりができない条件(一番前にきている・一番後ろにきている)においてnilを返すようにしてあげればOKです。

子の方は普通のUIViewControllerです。これがFlipされるたびに作成され、描画されます。サンプルではcontentViewWithIndexメソッドで子UIViewControllerを作成しています。

よって、flipしたときのnil条件とcontentViewWithIndexメソッドを変えてあげれば、単純に自分のアプリに導入出来ます。たとえば、InterfaceBuilderで作ったTestViewControllerを無限にflipできるようにする場合は、以下の様なコードになります。

#pragma mark - MPFlipViewControllerDataSource protocol
- (UIViewController *)flipViewController:(MPFlipViewController *)flipViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
 int index = self.previousIndex;
 index--;
 self.tentativeIndex = index;
 return [self contentViewWithIndex:index];
}

- (UIViewController *)flipViewController:(MPFlipViewController *)flipViewController viewControllerAfterViewController:(UIViewController *)viewController
{
 int index = self.previousIndex;
 index++;
 self.tentativeIndex = index;
 return [self contentViewWithIndex:index];
}

- (UIViewController *)contentViewWithIndex:(int)index
{
 TestViewController *page = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];
 [self addChildViewController:page];
 [page didMoveToParentViewController:self];
 page.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
 return page;
}


ページ数を事前に指定しないでいいのもいいですね。DB連携などもしやすそう。

ちなみに下記の本でも紹介されています。この本はライブラリがいっぱい見れて便利。

iOSオープンソースライブラリ徹底活用iOSオープンソースライブラリ徹底活用
(2012/12)
菊田 剛

商品詳細を見る
関連記事
スポンサーサイト

PageTop

コメント


管理者にだけ表示を許可する
 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。