iOS8 Orientationが変わった時のアニメーションを無しにする方法

公開: 2015-04-24 04:02
更新: 2016-04-29 06:03

iOS8にてUIInterfaceOrientationが変わる時に
クルリンとViewが回転するアニメーションを消す方法です。



1.UIDeviceOrientationDidChangeNotificationを受け取る

独自のUIViewController内とします。

UIDeviceOrientationDidChangeNotificationを受け取ります。デバイスの向きが変わったあとに呼ばれます。

- (void)viewDidLoad {
        [super viewDidLoad];
        ...
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotateDeviceChangeNotification:) name:UIDeviceOrientationDidChangeNotification object:nil];
        [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
        ...
}



2.viewWillTransitionToSize:でアニメーションをオフにする

デバイスの向きが変わる直前のタイミングで呼ばれる関数内でアニメーションをオフにします。


iOS SDK 8.0から
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
が非推奨になったので代わりに
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator
を使います。

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
        [UIView setAnimationsEnabled:NO];
        ...
}



3.didRotateDeviceChangeNotification:でアニメーションをオンに戻す

戻さないと他のアニメーションが動かないので回転し終わったら戻します。

- (void)didRotateDeviceChangeNotification:(NSNotification*)notification {
        [UIView setAnimationsEnabled:YES];
        ...
}

1.で指定した関数です。

これでクルリンがなくなりパッと向きが変わります。



この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。