アプリでUINavigationControllerを使わずに画面をアニメーションさせて遷移させる方法を調べたのでメモメモ。
右から左へスライドインする処理
■元画面(FirstView: UIVIewControllerを継承)
// 遷移先UIViewを画面外に生成(SecondView: UIVIewを継承) secondView = [[SecondView alloc]initWithFrame:CGRectMake(self.view.frame.size.width + 1, 0, self.view.frame.size.width, self.view.frame.size.height)]; // アニメーション開始 [UIView beginAnimations:nil context:nil]: [UIView setAnimationDuration:0.5]; // 0.5秒かけて [UIView setAnimationCure:UIViewAnimationCurveLinear]; // 一定速度で [self.view addSubview:secondView]; // addSubviewする secondView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); // 画面内へ動かす [UIView commitAnimations]; // アニメーションコミットこれで右から画面内へスライドインする遷移ができます。
今度は戻るボタンなどで元画面へ戻る処理です。
[UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.5]; [UIView setAnimationCurve:UIViewAnimationCurveLInear]; [UIView setAnimationDelegate:self]; // デリゲートをselfで指定 [UIView setAnimationDidStopSelector:@selector(animationStopped:finished:context:)]; // アニメーションが完了した時の処理こうなります。secondView.frame = CGRectMake(self.view.frame.size.width + 1, 0, self.view.frame.size.width, self.view.frame.size.height); // 画面外へ[UIView commitAnimations];/** * アニメーション停止後の処理 */ - (void)animationStopped:(NSString *)animation finished:(BOOL)finished context:(void *)context { [secondView removeFromSuperview]; // secondViewをremoveFromSuperviewする }
secondViewをremoveFromSuperviewする場合は、UIViewのsetAnimationDidStopSelectorを使ってアニメーション停止後の処理をセレクターを使って処理させて下さい。そうしないとアニメーションが動きません。
またその場合はUIViewのsetAnimationDelegateメソッドを呼んでおく必要があります。
以上でぇぇぇぇぇぇす。
0 件のコメント:
コメントを投稿