1

ある XIB から別の XIB に移行するためにモーダル トランジションを使用していますが、1 つのことを除いてすべて動作しています。トランジションが始まる瞬間に、前のビューで行ったすべての動きのアニメーションが元に戻されます。 .

私が取り組んでいる方法は次のとおりです。

- (IBAction)chooseInsight:(id)sender {
    [CATransaction setCompletionBlock:^{
        ContainerViewController *insight = [[ContainerViewController alloc] init];
        insight.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentViewController:insight animated:YES completion:nil];
    }];
    [self animateExit];
}

このanimateExitメソッドは、複数の UI オブジェクトに対して 1 秒間のフレームの動きをアニメーション化し、すべてが画面から飛び出し、無地の背景を残す効果を与えます。私の希望は、この無地の背景が次のビューであるContainerViewController.

しかし、何が起こるかというと、UI オブジェクトが画面からはみ出し、無地の背景が表示され、突然すべてのボタンとラベルが元に戻りContainerViewController.

なぜそれが起こっているのですか?アニメーションを支援するために、前のビューの画像がキャッシュされていますか? その場合、移行前にキャッシュを更新できますか? または、そうでない場合、このディゾルブをスムーズに機能させるにはどうすればよいですか?

編集:関連がある場合は、アニメーションの最後まで遅らせる方法について、この回答CATransactionから少し得ました。2 つのアニメーションが問題の原因ではないかという声が頭の片隅にあるのですが、iOS のアニメーションに詳しくないので、その方法を理解することはできません...

4

1 に答える 1

2

前のビューで実行したすべての動きのアニメーションが元に戻されます。

これらのサブビューのフレーム(または中心) を変更して、これらのアニメーションを実行したためです。しかし、Autolayout も使用しています。そんなことはできません。フレームと自動レイアウトは互いに敵です。

遷移が発生すると、レイアウトが発生します。これは、制約が守られることを意味します。これが Autolayout の意味です。しかし、制約を変更しませんでした (これを行うべきでした)。フレームを変更しました。制約が勝つので、すべてが元の場所に戻ります。それが制約の指示であるためです。

于 2015-01-31T02:37:58.277 に答える