取消视图控制器的自定义动画。

3

我试图使用自定义动画调用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)

它只是消失了,没有任何动画效果。
有什么想法吗?
1个回答

1
当定制呈现或解除视图控制器时发生的动画时,不是通过在其后面提供转换来完成的,而是通过自定义实际动画来完成的。给呈现的视图控制器提供一个实现了animationControllerForPresentedController:presentingController:sourceController:animationControllerForDismissedController:transitioningDelegate。现在,动画控制器完全负责动画,通过其对animateTransition:的实现。

有一个实际的例子,请参见我的可下载项目:https://github.com/mattneub/custom-alert-view-iOS7 注意,我们在呈现时获得一个自定义动画,在解除时获得另一个自定义动画。 - matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接