自定义Segue,多个动画不同步

时间:2017-12-14 15:13:28

标签: ios swift xcode swift4

关于这个话题有很多很好的答案,但这个让我很困惑。

有两条注释掉的线似乎无法正常工作。我喜欢这个自定义segue同时滑动和缩小,以便fromVC消失为无效,toVC从底部无任何影响。

但是,如果我尝试同时进行这两项操作,则会失败。单独工作(缩放或幻灯片),但不能一起工作。

class UnwindScaleSegue: UIStoryboardSegue {
    override func perform() {
        scaleDown()
    }

    func scaleDown() {
        let toVC = self.destination
        let fromVC = self.source     
        let screenHeight = UIScreen.main.bounds.size.height    

        toVC.view.transform = CGAffineTransform.init(translationX: 0.0, y: screenHeight)
        //toVC.view.transform = CGAffineTransform(scaleX: 0.001, y: 0.001)

        fromVC.view.superview?.insertSubview(toVC.view, at: 0)
        UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseInOut, animations: {
            //fromVC.view.transform = CGAffineTransform(scaleX: 0.001, y: 0.001)
            fromVC.view.transform = CGAffineTransform.init(translationX: 0.0, y: -screenHeight)

            toVC.view.transform = CGAffineTransform.identity
        }, completion: { success in
            fromVC.dismiss(animated: false, completion: nil)
        })
    }
}

1 个答案:

答案 0 :(得分:0)

解决!事实证明它与变换的组合方式有关。我不确定我理解,但是与转换的矢量性质有关的事情意味着在同一动画中进行多次转换时必须要小心。

通过"连接"他们认真工作!但是,对我来说,如果我换了订单,它就不起作用了。

关键线已加星标。

class UnwindScaleSegue: UIStoryboardSegue {

    override func perform() {
        scaleAway()
    }

    func scaleAway() {
        let toVC = self.destination
        let fromVC = self.source

        let screenHeight = UIScreen.main.bounds.size.height

        var translate = CGAffineTransform(translationX: 0.0, y:screenHeight) //**
        let scale = CGAffineTransform(scaleX: 0.001, y: 0.001) //**

        toVC.view.transform = scale.concatenating(translate) //**

        fromVC.view.superview?.insertSubview(toVC.view, at: 0)

        UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseInOut, animations: {
            translate = CGAffineTransform(translationX: 0.0, y: -screenHeight) //**
            fromVC.view.transform = scale.concatenating(translate) //**

            toVC.view.transform = CGAffineTransform.identity
        }, completion: { success in
            fromVC.dismiss(animated: false, completion: nil)
        })
    }
}
相关问题