私はUIViewControllerContextTransitioningを動作させようとしています。カスタムモーダルトランジションが動作しません - 例:
私が欲しいもの:私は、カスタムアニメーションと透明な背景を持つモーダルビューコントローラを提示されたいと思うパートナーはどのような
。
私はUIViewControllerTransitioningDelegate、モーダルコントローラの
セットの実装アニメーター作成:
self.modalPresentationStyle = UIModalPresentationCustom;
self.transitioningDelegate = self;
私がこれまで達成し何、
モーダルコントローラを私がやったWthat
プレゼンテーションとディスプレイをアニメーション化する表示が正しく表示されませんが、終了後にアプリ全体が黒くなります。私はxCodeツールを使ってウィンドウ階層内のものを選びましたが、何もありません。私の推測は、コンテクストのコンテナに追加するときにVCのスーパービューを変更したことです。
アニメーター
@implementation AlertAnimator
const static CGFloat kAnimationDuration = 1.2;
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
UIViewController *to = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController *from = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
if (self.transitionType == ModalAnimatedTransitioningTypePresent) {
[self animatePresentingInContext:transitionContext toVC:to fromVC:from];
} else if (self.transitionType == ModalAnimatedTransitioningTypeDismiss) {
[self animateDismissingInContext:transitionContext toVC:to fromVC:from];
}
}
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext{
return kAnimationDuration;
}
- (void)animatePresentingInContext:(id<UIViewControllerContextTransitioning>)transitionContext toVC:(UIViewController *)toVC fromVC:(UIViewController *)fromVC {
CGRect fromVCRect = [transitionContext initialFrameForViewController:fromVC];
CGRect toVCRect = fromVCRect;
toVCRect.origin.y = toVCRect.size.height;
toVC.view.frame = toVCRect;
UIView *container = [transitionContext containerView];
[container addSubview:fromVC.view];
[container addSubview:toVC.view];
[UIView animateWithDuration:kAnimationDuration animations:^{
toVC.view.frame = fromVCRect;
} completion:^(BOOL finished) {
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];
}];
}
- (void)animateDismissingInContext:(id<UIViewControllerContextTransitioning>)transitionContext toVC:(UIViewController *)toVC fromVC:(UIViewController *)fromVC {
CGRect fromVCRect = [transitionContext initialFrameForViewController:fromVC];
fromVCRect.origin.y = fromVCRect.size.height;
UIView *container = [transitionContext containerView];
[container addSubview:toVC.view];
[container addSubview:fromVC.view];
[UIView animateWithDuration:kAnimationDuration animations:^{
fromVC.view.frame = fromVCRect;
} completion:^(BOOL finished) {
[transitionContext completeTransition:![transitionContext transitionWasCancelled]];
}];
}
@end
コード例:
https://www.dropbox.com/s/oaghtgwvga4nxs4/Test.zip?dl=0
質問:
私が間違っていると、なぜ画面が黒くなっていますか?
これがプレゼンテーションアニメーターの場合は、fromVC.viewをサブビューとして追加するべきではありません。これによりバグが発生します。それを試してみてください。 – DatForis
感謝@DatForis、私は 'animatePresentingInContext:toVC:fromVC:'で '[container addSubview:fromVC.view];をコメントアウトしましたが、実際には何も変わっていません。他のアイデア? – konradholub
'animatePresentingInContext:toVC:fromVC:'から '[container addSubview:toVC.view];を削除しました。そこに私を案内してくれてありがとう。答えとして追加してください。解決済みとマークすることができます。 – konradholub