前の質問と同じコードですが、問題が異なります。
ビューコントローラを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:
(ただし、もちろん、ビューはそれ自体に反転し、突然新しいビューが表示されます)。