3

アプリでいくつかのビューをアニメーション化する次のコードがあります。

void (^animate)() = ^() {
    CGRect leftFrame = centerFrame;
    leftFrame.origin.x -= centerFrame.size.width;
    newViewController.view.frame = centerFrame;
    oldViewController.view.frame = leftFrame;
};

if (animated) {
    [UIView animateWithDuration:0.3f
                          delay:0.0f
                        options:nil
                     animations:animate
                     completion:^(BOOL finished){}];
} else {
    animate();
}

これは iOS 6 では正しくアニメーション化されますが、iOS 7 ではアニメーション化されません。奇妙なことに、ブロック内のコードが呼び出され、ビューが更新されますが、アニメーションの長さは考慮されていません。

このブロックが呼び出されない理由はありますか?

4

6 に答える 6

2

あなたのアニメーションは、遷移中に UIKit によって呼び出された別の競合するアニメーション ブロックと衝突している可能性があります。nilアニメーション オプションに渡す代わりに、次を使用します。

UIViewAnimationOptionOverrideInheritedOptions | UIViewAnimationOptionBeginFromCurrentState

これが役立つかどうかを確認してください。

于 2013-09-23T18:13:28.230 に答える
2

私は同じ問題を抱えていました.iOS6の魅力のように機能するアニメーションブロックは、iOS7のアニメーションなしで実行されます.

これが役立つかどうかはわかりませんが、アニメーション トリガーを に移動しviewDidAppear:、現在はアニメーション化されています。

したがって、これは次のようになります。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    animate();
    // do your other stuff here...
}
于 2013-09-21T17:22:56.117 に答える
2

iOS6 と iOS7 の間でまったく同じ回帰がありました。

私の場合、アニメーションが画面に表示animateWithDuration:される前に呼び出されたことが原因でした。UIView

iOS7 では、 が制御側で呼び出されるanimateWithDuration:前に呼び出すべきではないようです。-(void)viewDidAppear:(BOOL)animatedUIViewController

于 2013-11-23T18:01:48.913 に答える
1

私は同じ問題を抱えていました。私にとって判明したことは、アニメーション化していた UITableViewCell の別の部分を iOS 6 で行ったものとは異なる部分を参照する必要があるということです。同様の問題が発生する可能性があります。

于 2013-09-21T02:00:07.023 に答える