dismissViewControllerAnimated自定义动画

我试图用自定义动画调用dismissViewControllerAnimated,但它似乎不起作用。

当我呈现视图控制器时:

cameraUI = UIImagePickerController() cameraUI.delegate = self cameraUI.sourceType = UIImagePickerControllerSourceType.Camera cameraUI.mediaTypes = [kUTTypeImage] cameraUI.allowsEditing = false cameraUI.showsCameraControls = false var translate = CGAffineTransformMakeTranslation(0.0, 71.0); //This slots the preview exactly in the middle of the screen by moving it down 71 points cameraUI.cameraViewTransform = translate; var scale = CGAffineTransformScale(translate, 1.333333, 1.333333); cameraUI.cameraViewTransform = scale; var transition = CATransition() transition.duration = 0.5 transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) transition.type = kCATransitionMoveIn transition.subtype = kCATransitionFromLeft self.view.window?.layer.addAnimation(transition, forKey: nil) self.presentViewController(cameraUI, animated: false, completion: nil) 

这很好用。 它适当滑入。

然后我去解雇它:

  var transition = CATransition() transition.duration = 0.5 transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) transition.type = kCATransitionMoveIn transition.subtype = kCATransitionFromRight self.view.window?.layer.addAnimation(transition, forKey: nil) cameraUI.dismissViewControllerAnimated(false, completion: nil) 

它完全消失,没有动画。

有什么想法吗?

在呈现或关闭视图控制器时自定义动画的方式不是通过提供它后面的转换,而是通过自定义实际动画。 为呈现的视图控制器提供一个transitioningDelegate ,它实现了animationControllerForPresentedController:presentingController:sourceController:animationControllerForDismissedController: . 现在动画控制器通过实现animateTransition:完全负责动画animateTransition: