View Switcher(4)~トランジションのアニメ化

2010. 09. 04
前回の『View Switcher(3)~コンテントビューの実装』で、2つのコンテントビューの切り替えをできるようにしましたが、一瞬で切り替わる状態なので、トランジションアニメーションで切り替わるようにswitchViews:メソッドを修正します。
(太字が追加した部分)

- (IBAction)switchViews:(id)sender {
    if (self.yellowViewController == nil) {
        YellowViewController *yellowController = [[YellowViewController alloc] initWithNibName:@"YellowView" bundle:nil];
        self.yellowViewController = yellowController;
        [yellowController release];
    }

    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:1.25];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

    if (self.blueViewController.view.superview == nil) {
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
        [blueViewController viewWillAppear:YES];
        [yellowViewController viewWillDisappear:YES];

        [yellowViewController.view removeFromSuperview];
        [self.view insertSubview:blueViewController.view atIndex:0];

        [yellowViewController viewDidDisappear:YES];
        [blueViewController viewDidAppear:YES];
    }
    else {
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
        [yellowViewController viewWillAppear:YES];
        [blueViewController viewWillDisappear:YES];

        [blueViewController.view removeFromSuperview];
        [self.view insertSubview:yellowViewController.view atIndex:0];

        [blueViewController viewDidDisappear:YES];
        [yellowViewController viewDidAppear:YES];
    }

    [UIView commitAnimations];
}

778

トランジションアニメーション(2)』で説明していますが、beginAnimations:context:、setAnimationDuration:、setAnimationCurve:、setAnimationTransition:forView:cache:、commitAnimationsメソッドは、iOS 4では非推奨メソッドになっていますので、内容を把握した後で推奨メソッドで書き換えます。
(beginAnimations:context:とcommitAnimationsは『スライドショーの簡易アニメーション(1)』、setAnimationDuration:とsetAnimationTransition:forView:cache:は『トランジションアニメーション(1)』を参照してください)

beginAnimations:context:でアニメーションブロックを開始し、commitAnimationsで終了しています。

ここではsetAnimationDuration:でアニメーションを行う期間を1.25秒、setAnimationCurve:で開始と終了時に減速するアニメーションカーブを指定しています。

setAnimationTransition:forView:cache:で、BlueViewからYellowViewへは右回転、YellowViewからBlueViewへは左回転でフリップの遷移を行います。

トランジションアニメーションの設定後、ビューの削除/挿入の前後に4つのメソッドが追加されています。

viewWill~は処理の直前、viewDidは処理の直後に行うメソッドで、Appearは表示、Disappearは非表示にすることを通知します。

4つのメソッドはデフォルトの実装で、今回の場合はオーバーライドしていないので何も起こりません。

これはサブクラス化したUIViewでアニメーションがOFFになるようなカスタマイズがされていても、確実にアニメーションが実行されるようにする保険のようなものです。

777


・setAnimationCurve:
(UIViewクラス)

+ (void)setAnimationCurve:(UIViewAnimationCurve)curve

アニメーションブロック内のアニメーションプロパティのカーブを変更します。

アニメーションカーブは、進行中のアニメーションに関する速度のことです。

このメソッドは、アニメーションブロック外で呼び出された場合は何もしません。

アニメーションブロックの開始にはbeginAnimations:context:、終了にはcommitAnimationsクラスメソッドを使用します。

アニメーションカーブのデフォルト値はUIViewAnimationCurveEaseInOutです。

このメソッドは、iPhone OS 4.0以降は推奨されません。
代わりにブロックベースのアニメーションメソッドを使用してください。


・UIViewAnimationCurve
(UIViewクラス)

typedef enum {
    UIViewAnimationCurveEaseInOut,
    UIViewAnimationCurveEaseIn,
    UIViewAnimationCurveEaseOut,
    UIViewAnimationCurveLinear
} UIViewAnimationCurve;

アニメーションカーブを指定します。

例えば、アニメーションの最初または最後の速度を変更することができます。

UIViewAnimationCurveEaseInOut
アニメーションをゆっくり開始し、中間では加速、終了前にはまた減速して完了します。

UIViewAnimationCurveEaseIn
アニメーションをゆっくり開始し、進行に応じて加速します。

UIViewAnimationCurveEaseOut
アニメーションの開始時には速く、完了に向けて減速します。

UIViewAnimationCurveLinear
アニメーションの期間中、一定の速度で進行します。


・viewWillAppear:
(UIViewControllerクラス)

- (void)viewWillAppear:(BOOL)animated

ビューコントローラのビューが可視状態になる時に通知します。

このメソッドは、レシーバのビューが画面に表示される前で、ビューの表示用に構成されているアニメーションの前に呼び出されます。

このメソッドをオーバーライドして、ビューを提示する際に関連付けられたカスタムのタスクを実行することができます。

例えばこのメソッドを使って、ステータスバーの向きやスタイルに応じて、これから提示するビューの向きやスタイルを調整することができます。

このメソッドをオーバーライドする場合は、実装する時点でsuperを呼び出す必要があります。

ウィンドウにビューを追加する方法や、メッセージの発声する順序に関する詳細については、『iOS View Controllerプログラミングガイド』を参照してください。

animated:YESの場合、ウィンドウにビューを追加する際にアニメーションを使います。


・viewWillDisappear:
(UIViewControllerクラス)

- (void)viewWillDisappear:(BOOL)animated

ビューコントローラのビューが破棄されたり覆われたり、その他の方法でビューが非表示になる時に通知します。

このメソッドはウィンドウからビューが削除されたり、他のビューに覆われる際に呼び出されます。

このメソッドは、ビューが実際に削除や覆われたりする前で、構成されているアニメーションの前に呼び出されます。

サブクラスはこのメソッドをオーバーライドして委任を編集して変更し、ビューのファーストレスポンダ状態を破棄したり、関連する他のタスクを実行することができます。

例えばビューを最初に提示する時に、viewDidDisappear:メソッドで作成されたステータスバーの向きまたはスタイルの変更を元に戻すのに、このメソッドを使用します。

このメソッドをオーバーライドする場合は、実装する時点でsuperを呼び出す必要があります。

animated:YESの場合、ビューを破棄する際にアニメーションが始まります。


・viewDidDisappear
(UIViewControllerクラス)

- (void)viewDidDisappear:(BOOL)animated

ビューコントローラのビューが破棄されたり覆われたり、その他の方法でビューが非表示になった時に通知します。

このメソッドをオーバーライドして、ビューが削除または非表示になった時に関連する追加のタスクを実行することができます。

このメソッドをオーバーライドする場合は、実装する時点でsuperを呼び出す必要があります。

animated:YESの場合、ビューを破棄した際にアニメーションを行います。


・viewDidAppear:
(UIViewControllerクラス)

- (void)viewDidAppear:(BOOL)animated

ビューコントローラのビューが可視状態になった時に通知します。

このメソッドをオーバーライドして、ビューを提示された際に関連付けられたカスタムのタスクを実行することができます。

このメソッドをオーバーライドする場合は、実装する時点でsuperを呼び出す必要があります。

animated:YESの場合、ウィンドウにビューを追加する際にアニメーションを使います。



参考文献

UIView Class Reference

UIViewController Class Reference

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る






コンパニオン20
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
03 | 2017/04 | 05
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

コンパニオン20
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR