10

前面に送信し、ビューの中央にアニメーション化する必要がある UIImageViews の束を持つ ViewController があります。

UIViewアニメーションをキャストする前にbringSubviewToFrontを呼び出そうとしましたが、ビューがスタックの一番上に送信されたように見えますが、アニメーションは発生しません(完了ハンドラーログにはアニメーションDIDが発生したように表示されますが) )。

アニメーションをトリガーするボタンを2回目に押します(今回はビューがすでにトップインデックスにあることを考慮して、アニメーションは正常に行われます)

私のコードは次のとおりです。

- (void)beginAnimationWithSelectedCountry:(UIView *)countryView
{
    if (!countryView) return;

    [self.view bringSubviewToFront:countryView];
    [UIView animateWithDuration:0.6f delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
        countryView.center = CGPointMake(self.view.center.x, self.view.center.y);
    } completion:^(BOOL finished) {
        NSLog(@"Animation complete");
    }];
}

何かご意見は?私は何時間もこれにいました >.<

ありがとう

編集:私がbringSubviewToFrontをコメントアウトすると、コードはアニメーションで問題なく実行されます(ビューが他のビューの下にあることを除いて)ので、問題は次の行にあると確信しています:

[self.view bringSubviewToFront:countryView];

私が現在持っているもののスクリーンショットを次に示します。これにより、問題がさらに明らかになる可能性があり ます。

4

3 に答える 3

3

電話すると

[self.view bringSubviewToFront:countryView];

新しいビュー レイアウト イベントをトリガーします。これは、コントローラーの「viewDidLayoutSubviews」にブレークポイントを設定することで確認できます。

同様の問題がありました。「viewDidLayoutSubviews」メソッドのコードが、アニメーション化しようとしていたオブジェクトのフレームをリセットすることで、アニメーションをキャンセルしました。

于 2012-12-13T15:59:04.260 に答える
0

UIViewAnimationOptionAllowAnimatedContentオプションに追加してみてください。これがこのオプションの場合であるとほぼ確信していますが、そうでない場合は他のオプションで遊んでください。次のランループでアニメーションを実行するようにブロックをスケジュールすることもできます。

于 2012-10-22T20:59:18.707 に答える