0

目前,我有一个显示其他视图控制器的视图控制器。我要做的是重新创建推送视图控制器时使用的默认动画。

我目前的做法是:

FirstViewController

@IBAction private func push(sender: AnyObject) {
    let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SecondViewController")

    let transition = CATransition()
    transition.duration = 0.5
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.type = kCATransitionPush
    transition.subtype = kCATransitionFromRight

    view.window?.layer.addAnimation(transition, forKey: kCATransition)

    presentViewController(vc, animated: false, completion: nil)
}

SecondViewController

@IBAction private func pop(sender: AnyObject) {

    let transition = CATransition()
    transition.duration = 0.5
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.type = kCATransitionPush
    transition.subtype = kCATransitionFromLeft

    view.window?.layer.addAnimation(transition, forKey: kCATransition)

    dismissViewControllerAnimated(false, completion: nil)
}

它几乎可以工作,但我有一个奇怪的行为,在视图控制器之间转换时我有一种黑屏/闪光灯。我已经尝试过更改window.backgroundColor,但它没有解决问题。

在此先感谢 0_0...

4

1 回答 1

1

问题仅仅是你正在做的不是如何为呈现/关闭过渡自定义动画。Apple 为您提供了一种清晰、成熟、官方的方式来做到这一点,而您正在做的不是它。您需要为呈现的视图控制器提供 atransitioningDelegate以及and 的实现,animationControllerForPresentedController:animationControllerForDismissedController:实现 UIViewControllerAnimatedTransitioning 协议,可能还有自定义 UIPresentationController 子类。

于 2016-02-24T19:10:28.747 回答