私の目標は、アプリケーションを起動するときにスプリングボードアイコンと同様のビューからユーザーのズームモーダルトランジションを拡大することです。カスタムトランジションでcompleteTransitionを呼び出した後にナビゲーションバーが調整される
提示されたビューコントローラが正しくズームインしますが、ナビゲーションバーのステータスバーの位置が正しくありません。この位置は[transitionContext completeTransition:finished];を呼び出した後に修正されます。移行の初めからどのように修正することができますか?
これはバグのスクリーンの録音です:http://youtu.be/7LKU4lzb-uw(グリッチは、記録の第6秒である)
UIViewControllerAnimatedTransitioningコード:
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIView *container = [transitionContext containerView];
CGPoint viewCenter = self.view.center;
CGSize viewSize = self.view.frame.size;
CGSize controllerSize = toViewController.view.frame.size;
CGFloat controllerFromX = viewCenter.x - (controllerSize.width/2);
CGFloat controllerFromY = viewCenter.y - (controllerSize.height/2);
CGAffineTransform transform = CGAffineTransformMakeTranslation(controllerFromX, controllerFromY);
transform = CGAffineTransformScale(transform, viewSize.width/controllerSize.width, viewSize.height/controllerSize.height);
if (self.reverse) {
[container insertSubview:toViewController.view belowSubview:fromViewController.view];
} else {
toViewController.view.transform = transform;
[container addSubview:toViewController.view];
}
[UIView animateKeyframesWithDuration:ZoomTransitioningDuration
delay:0
options:0
animations:^{
if (self.reverse) {
fromViewController.view.alpha = 0.0f;
fromViewController.view.transform = transform;
} else {
toViewController.view.transform = CGAffineTransformIdentity;
}
}
completion:^(BOOL finished) {
[transitionContext completeTransition:finished];
}];
}
対応するビューのy原点を調整できませんか? –
これを行うと、ステータスバーの下の領域は黒ではなく緑色になります(コントローラー全体が下に移動します)。 –
self.viewはどこから来たのですか?プレゼンテーションビューコントローラはアニメーションコントローラですか? – bilobatum