1

の質問と同じコードですが、問題が異なります。

ビューコントローラをUINavigationControllerに追加するカスタムアニメーションを作成しました。このコードは、ビューを元のサイズの80%に拡大縮小し、次に反転してから、元のサイズに拡大縮小します。

[UIView animateWithDuration:scaleDuration delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
    // Scale the controllers' views down.
    self.view.transform = CGAffineTransformScale(self.view.transform, 0.8, 0.8);
} completion:^(BOOL finished) {
    // Transition to the new view and push on the new view controller.
    [UIView transitionWithView:self.view duration:1 options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionTransitionFlipFromLeft animations:^{
        [self pushViewController:viewController animated:NO];
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:scaleDuration delay:0 options:UIViewAnimationOptionCurveLinear animations:
^{
            // Scale back to the original size.
            self.view.transform = CGAffineTransformScale(self.view.transform, 1.25, 1.25);
        } completion:nil];
    }];
}];

問題は、アニメーションが完了すると、タスクバーの下に描画されることを除いて、新しいビューが非常にうまく表示されることです。つまり、画面の原点が0,20ではなく0,0に描画されます。「ステータスバー」オプションはIBで(「黒」に)設定されています。当然、これは、標準のUINavigationControllerプッシュアニメーションを使用する場合は発生せず、カスタムアニメーションのみを使用します。アニメーションの後にデバイスを回転させると、回転時に再描画すると適切な場所に移動します。しかし、そもそもどうすればそれを実現できますか?

pushViewController:animated:追加のしわとして、呼び出しをブロックまで下に移動しても、タスクバーの下に描画されませんcompletion:(ただし、もちろん、ビューはそれ自体に反転し、突然新しいビューが表示されます)。

4

1 に答える 1

0

これまでのところ、回避策はナビゲーションバーを非表示にしてから表示することだけです。

変換を設定した後、次の2行を追加します。

[self setNavigationBarHidden:YES];
[self setNavigationBarHidden:NO];

それは醜いですがうまくいきます、私はまたより良い解決策を探しています。

注:layoutsubview、setNeedsLayoutは機能しません。

于 2012-09-26T07:31:06.443 に答える