使用自定义动画取消视图控制器?

13

我正在使用这行代码来关闭我的视图控制器 self.dismiss(animated: true, completion: nil),但我不喜欢当前的动画效果。相反,我希望从左侧向右滑动。以下是我尝试测试动画的代码,但没有起作用。

UIView.animate(withDuration: 1.0, delay: 0.0, options: UIViewAnimationOptions.curveEaseIn, animations: {

        let transition = CATransition()
        transition.duration = 10
        transition.type = kCATransitionPush
        transition.subtype = kCATransitionFromLeft

        self.view.layer.add(transition, forKey: kCATransition)

        self.dismiss(animated: false, completion: nil)
        }, completion: nil)

我认为这里发生的情况是视图控制器在动画开始时被解除了。您可以尝试将self.dismiss(...)移动到动画完成块中,看看是否有效。如果不行,您可以在网上找到许多关于如何自定义segue的教程。我从未做过,所以无法给您任何指针,但Ray Wenderlich始终是深入教程的好去处。https://www.raywenderlich.com/86521/how-to-make-a-view-controller-transition-animation-like-in-the-ping-app - Erik
1个回答

56
let transition: CATransition = CATransition()
transition.duration = 0.5
transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
transition.type = CATransitionType.reveal
transition.subtype = CATransitionSubtype.fromRight
self.view.window!.layer.add(transition, forKey: nil)
self.dismiss(animated: false, completion: nil)

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