我编写了一个模拟"左推"的自定义segue。我获取了2个视图的屏幕截图,从右到左为它们设置动画,然后显示目标视图并删除重叠的屏幕截图。我担心这最终导致堆叠视图彼此叠加,在这种情况下应该避免。动画完成后,我无法弄清楚如何正确地解除底层视图。我尝试使用navigationController?.pushViewController
代替present
,但我的尝试没有成功。我怎么能解决这个问题?
我的自定义信息:
class SeguePushLeft: UIStoryboardSegue
{
override func perform()
{
self.source.view.isUserInteractionEnabled = false
self.destination.view.isUserInteractionEnabled = false
let slideViewOut = UIImageView(image: source.view.capture()!)
let slideViewIn = UIImageView(image: destination.view.capture()!)
let screenWidth = source.view.frame.size.width
self.source.view.addSubview(slideViewIn)
self.source.view.addSubview(slideViewOut)
slideViewIn.transform = CGAffineTransform(translationX: screenWidth, y: 0)
UIView.animate(withDuration: 0.4,
delay: 0.0,
usingSpringWithDamping: 1,
initialSpringVelocity: 0,
options: UIViewAnimationOptions.curveEaseOut,
animations: {
slideViewIn.transform = CGAffineTransform.identity
slideViewOut.transform = CGAffineTransform(translationX: -screenWidth, y: 0)
}, completion: { finished in
DispatchQueue.main.async{
(self.source as UIViewController).present((self.destination as UIViewController), animated: false, completion: {
self.source.view.isUserInteractionEnabled = true
self.destination.view.isUserInteractionEnabled = true
slideViewIn.removeFromSuperview()
slideViewOut.removeFromSuperview()
})
}
})
}
}
答案 0 :(得分:0)
[请原谅我以前过于仓促的答案。我正在进入另一个而不是编辑第一个,因为所有的评论现在都是第一个。]
问题很简单:你做错了。您希望做的是present
转换,但使用自定义动画。这是完全可行的,你当然可以用自定义的segue来做,但你做这件事的方式并不是你这样做的。您可以使用自定义过渡动画来完成此操作。有一种固定的实现方式,而不是你如何处理事情。您需要了解如何为演示文稿转换编写自定义过渡动画,并且您将全部设置。