読者です 読者をやめる 読者になる 読者になる

49hack

見習いエンジニアが魔法使いになるまで

iOS7でUIViewアニメーションが機能しない

objective-c

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) {
        // アニメーション終了したらここ通るよ
    }];
}

エラーもなにも出ないので最初はなんのこっちゃと思いました。。

参考