Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当视图不在视图层次结构中时启动CAAnimation_Ios_Uiview_Core Animation_Caanimation - Fatal编程技术网

Ios 当视图不在视图层次结构中时启动CAAnimation

Ios 当视图不在视图层次结构中时启动CAAnimation,ios,uiview,core-animation,caanimation,Ios,Uiview,Core Animation,Caanimation,我有一个UI组件(加载微调器),它有无限的动画: class MySpinner: UIView { ... override var bounds: CGRect { didSet { updateLayers() } } override init(frame: CGRect) { super.init(frame: frame) self.layer.addSublayer(self.animatedLayer)

我有一个UI组件(加载微调器),它有无限的动画:

class MySpinner: UIView {

...

override var bounds: CGRect {
    didSet {
        updateLayers()
    }
}

override init(frame: CGRect) {
        super.init(frame: frame)
        self.layer.addSublayer(self.animatedLayer)
        self.updateLayers()
        self.startAnimating()
}

private func updateLayers() {
        //Set up path, stroke color and such
        self.animatedLayer.frame = self.bounds
}

private func startAnimating() {
        CATransaction.begin()
        CATransaction.setDisableActions(true) //disable automatic animations by iOS

        let endlessRotationAnimation = CAKeyframeAnimation(keyPath: "transform.rotation")
        endlessRotationAnimation.values = [ 0.0, CGFloat(2.0 * .pi) ]
        endlessRotationAnimation.keyTimes = [ 0.0, 1.0 ]
        endlessRotationAnimation.repeatDuration = .infinity
        endlessRotationAnimation.duration = 1.0
        self.animatedLayer.add(endlessRotationAnimation, forKey: "rotationAnimation")

        CATransaction.commit()
}

}
结果证明这是行不通的。我假设如果在将视图添加到窗口之前调用
startAnimating()
,iOS将立即删除动画。如果我首先将视图添加到视图层次结构中,然后调用
startAnimating()
,事情就开始工作了


有没有办法防止iOS删除我的动画?或者是否有关于此行为的文档,我找不到任何文档?

我可以通过覆盖
didMoveToWindow
来解决此问题

public override func didMoveToWindow() {
    super.didMoveToWindow()
    startAnimating()
}