【问题标题】:CAAnimation get live updates of animated propertiesCAAnimation 获取动画属性的实时更新
【发布时间】:2014-11-21 08:04:59
【问题描述】:
我已将CAAnimation 添加到某个视图的图层,它会为视图的position 设置动画。动画运行时,我想在 OpenGL 窗口中为对象设置动画。为此,我必须以某种方式从我制作动画的属性中获取实时更新。
我试过了
someView.layer.addObserver(self, forKeyPath: "position", options: nil, context: nil)
但我只有在动画完成后才能获得更新。我还尝试将观察者添加到表示层,但没有成功。
有什么想法吗?
【问题讨论】:
标签:
ios
objective-c
iphone
core-graphics
core-animation
【解决方案1】:
我试图在 CABasicAnimation 期间观察 (KVO) CALayer 的变换,但从来没有为我工作,甚至尝试过 PresentationLayer...我在这种情况下解决它的方法是使用 CADisplayLink。
这将允许您指定希望链接运行的 frameTimeInterval,并且每次触发时,您都可以直接检查您尝试从中获取 KVO 更新的层的变换。
非常适合我。
所以,是这样的:
displayLink = CADisplayLink(target: self, selector: "foo")
displayLink?.frameInterval = 1
displayLink?.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
在 foo() 内部,我会检查图层的presentationLayer() 上的转换,然后我会根据需要使用这些信息...