0
我正在尝试使UIViewControllerContextTransitioning正常工作。自定义模式转换不起作用 - 示例
我想要什么:
我想吃点什么,是呈现与自定义动画和透明背景模式视图控制器。
Wthat我所做的:
我创建动画实现UIViewControllerTransitioningDelegate,
集的模态控制器:
self.modalPresentationStyle = UIModalPresentationCustom;
self.transitioningDelegate = self;
我取得了什么至今,
模态控制器动画呈现和dis正确地丢失视图,但解散完成后,整个应用程序变黑。我使用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,我注释掉'[容器addSubview:fromVC.view]''中animatePresentingInContext:toVC:fromVC:'但没有真正改变。任何其他想法? – konradholub
删除'[container addSubview:toVC.view];''from animatePresentingInContext:toVC:fromVC:'虽然工作。谢谢你在那里指导我。请将其添加为答案,以便我可以将其标记为已解决。 – konradholub