CALayer 旋转动画不适用于呈现的 ViewController

Posted

技术标签:

【中文标题】CALayer 旋转动画不适用于呈现的 ViewController【英文标题】:CALayer Rotation animation is not working on presented ViewController 【发布时间】:2018-07-20 06:31:18 【问题描述】:

我有两个视图控制器(即 firstVC 和 secondVC)。我在 firstVC 上呈现 secondVC 并尝试实现旋转动画,但它不起作用,我尝试在主线程上运行动画,但有一些延迟,但它给出了奇怪的行为。以下是我用来旋转视图的代码。

extension UIView 

private static let kRotationAnimationKey = "rotationanimationkey"

func rotate(duration: Double = 1, delay: Int = 0) 
    if layer.animation(forKey: UIView.kRotationAnimationKey) == nil 
        let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation")

        rotationAnimation.fromValue = 0.0
        rotationAnimation.toValue = Float.pi * 2.0
        rotationAnimation.duration = duration
        rotationAnimation.repeatCount = Float.infinity

        DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(delay)) 
            self.layer.add(rotationAnimation, forKey: UIView.kRotationAnimationKey)
        
    


func stopRotating() 
    if layer.animation(forKey: UIView.kRotationAnimationKey) != nil 
        layer.removeAnimation(forKey: UIView.kRotationAnimationKey)
    

注意:通过推送“secondVC”动画可以正常工作。但我想介绍“secondVC”。

我不知道在视图控制器和旋转动画的演示过程中发生了什么。

如果您找到任何解决方案,请告诉我。

【问题讨论】:

从哪里调用这个旋转函数?第一VC还是第二VC?哪个 UIView 旋转?主视图还是您在 SecondVC 中添加一个 UIView? 我正在向 secondVC 添加一个新视图。并在 secondVC on view 上旋转该视图确实加载了。 从 viewWillAppear 调用轮换 @JD 谢谢它的工作 【参考方案1】:

要使用自定义演示转换,您必须确认UIViewControllerTransitioningDelegateUIKit 总是调用 animationController(forPresented:presenting:source:) 来查看是否返回了 UIViewControllerAnimatedTransitioning。如果返回 nil,则使用默认动画。

【讨论】:

我没有使用任何自定义过渡动画来旋转视图。

以上是关于CALayer 旋转动画不适用于呈现的 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

CALayer的动画结束回调?

动画期间未调用 CALayer setPosition

CALayer动画

呈现与模型(隐式动画)

将 CALayer 更改应用到 UIView

Core Animation CALayer遮罩动画表现