CAAnimation获取动画属性的实时更新

时间:2014-11-21 08:05:00

标签: ios objective-c iphone core-graphics core-animation

我在某个视图的图层中添加了CAAnimation,并为视图的position添加了动画效果。动画运行时,我想在OpenGL窗口中为对象设置动画。为了做到这一点,我必须以某种方式从我动画的属性获得实时更新。

我试过

someView.layer.addObserver(self, forKeyPath: "position", options: nil, context: nil)

但是我只有在animatin完成后才会得到更新。我还尝试将观察者添加到表示层,但没有成功。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我试图在CABasicAnimation中观察(KVO)CALayer的变换但是从来没有为我工作,甚至尝试使用PresentationLayer ......在我的情况下我解决它的方法是使用CADisplayLink。

这将允许您指定希望链接运行的frameTimeInterval,并且每次触发时您都可以直接检查您尝试从中获取KVO更新的图层的变换。

非常适合我。

所以,像这样:

displayLink = CADisplayLink(target: self, selector: "foo")
displayLink?.frameInterval = 1
displayLink?.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)

在foo()里面我会检查图层的presentationLayer()上的变换然后我会根据需要使用这些信息...