我环顾四周寻找答案,并花了最后两个小时将我的头发拉到了最后。在使用自定义UIViewController动画的动画后呈现的视图控制器消失
我正在实现一个非常基本的自定义视图控制器转换动画,它只是放大呈现视图控制器,并在呈现的视图控制器中增长。它增加了淡入淡出效果(0到1 alpha,反之亦然)。
当呈现视图控制器时它可以正常工作,但是当解散时,它会将视图控制器全部重新填满屏幕,但随后它会莫名其妙地消失。在这些动画改变alpha值或隐藏值之后,我没有做任何事情,这几乎是一个新鲜的项目。我一直在开发iOS应用程序3年,所以我怀疑这可能是一个错误,除非有人能够找出我要出错的地方。
class FadeAndGrowAnimationController : NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate {
func animationControllerForPresentedController(presented: UIViewController!, presentingController presenting: UIViewController!, sourceController source: UIViewController!) -> UIViewControllerAnimatedTransitioning! {
return self
}
func animationControllerForDismissedController(dismissed: UIViewController!) -> UIViewControllerAnimatedTransitioning! {
return self
}
func transitionDuration(transitionContext: UIViewControllerContextTransitioning!) -> NSTimeInterval {
return 2
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning!) {
let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) as UIViewController
let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) as UIViewController
toViewController.view.transform = CGAffineTransformMakeScale(0.5, 0.5)
toViewController.view.alpha = 0
transitionContext.containerView().addSubview(fromViewController.view)
transitionContext.containerView().addSubview(toViewController.view)
transitionContext.containerView().bringSubviewToFront(toViewController.view)
UIView.animateWithDuration(self.transitionDuration(transitionContext), animations: {
fromViewController.view.transform = CGAffineTransformScale(fromViewController.view.transform, 2, 2)
fromViewController.view.alpha = 1
toViewController.view.transform = CGAffineTransformMakeScale(1, 1)
toViewController.view.alpha = 1
}, completion: { finished in
transitionContext.completeTransition(!transitionContext.transitionWasCancelled())
})
}
}
和代码来呈现:
let targetViewController = self.storyboard.instantiateViewControllerWithIdentifier("Level1ViewController") as Level1ViewController
let td = FadeAndGrowAnimationController()
targetViewController.transitioningDelegate = td
targetViewController.modalPresentationStyle = .Custom
self.presentViewController(targetViewController, animated: true, completion: nil)
正如你所看到的,一个相当基本的动画。我在这里错过了什么吗?就像我说的,它表现得很好,然后解散了99.99%的完美,但解雇后的视图控制器被莫名其妙地删除。在这种情况发生后,iPad会显示一个黑屏 - 完全黑屏。
后?因为我遇到了同样的错误,并且它在Xcode 5上适用于我。 – Siegfoult 2014-09-15 16:15:15