iOS7でUIViewアニメーションが機能しない
iOSの違いでUIViewアニメーションの挙動が違うので注意が必要です。
とりわけ「iOS6では動くのにiOS7では動かない」といった状況に陥ります。
iOS7ではUIViewアニメーションに関して変更があり、viewがまだ表示されていない状態(viewDidLoad
, viewWillAppear
, awakeFromNib
など)でUIViewアニメーションをコールしても、アニメーションがスキップされてしまいます。
- (void)viewDidLoad { [super viewDidLoad]; // アニメーションさせるで! [UIView animateWithDuration:.2f animations:^{ // スルーされるよ(というかdurationが無視される?) } completion:^(BOOL finished) { // すぐここにくるよ }]; }
対応方法としては、viewが表示された状態(viewDidAppear
など)でUIViewアニメーションをコールするよう修正すればOKです。
-(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // アニメーションさせるで! [UIView animateWithDuration:.2f animations:^{ // ちゃんとアニメーション実行するよ } completion:^(BOOL finished) { // アニメーション終了したらここ通るよ }]; }
エラーもなにも出ないので最初はなんのこっちゃと思いました。。