swiift UIView动画完成处理程序首先调用

问题描述 投票:0回答:1

我找到了一个不错的卷曲视图动画,我想在完成后添加segue,但是segue首先调用(即使回到viewcontroller,我也可以看到动画结束)。请帮助我发现错误或实现目标的方法

UIView.animate(withDuration: 1, animations: {
            let animation = CATransition()
            animation.duration = 1
            animation.startProgress = 0.0
            animation.endProgress = 1
            animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
            animation.type = CATransitionType(rawValue: "pageCurl")
            animation.subtype = CATransitionSubtype(rawValue: "fromRight")

            animation.isRemovedOnCompletion = false
            animation.isRemovedOnCompletion = false
            self.selectedCell!.view1.layer.add(animation, forKey: "pageFlipAnimation")

        }, completion: { _ in

            let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "PageVC") as? PageVC
             secondViewController!.modalPresentationStyle = .fullScreen
             self.navigationController?.present(secondViewController!, animated: false, completion: nil)
        })
ios swift core-animation uiviewanimation
1个回答
0
投票

[您正在尝试使动画添加到视图中。动画块需要1秒钟才能完成。基本上,它试图在一秒钟内动画化动画的添加。完成后,它开始导航。您可以使用CATransaction创建所需的功能,而不是这样做。

CATransaction.begin()
CATransaction.setCompletionBlock {
    if let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "PageVC") as? PageVC {
        secondViewController.modalPresentationStyle = .fullScreen
        self.navigationController?.present(secondViewController, animated: false, completion: nil)
    }
}

let animation = CATransition()
animation.duration = 1
animation.startProgress = 0.0
animation.endProgress = 1
animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
animation.type = CATransitionType(rawValue: "pageCurl")
animation.subtype = CATransitionSubtype(rawValue: "fromRight")

animation.isRemovedOnCompletion = false
animation.isRemovedOnCompletion = false
self.selectedCell!.view1.layer.add(animation, forKey: "pageFlipAnimation")

CATransaction.commit()
© www.soinside.com 2019 - 2024. All rights reserved.