我在某个视图的图层中添加了CAAnimation
,并为视图的position
添加了动画效果。动画运行时,我想在OpenGL窗口中为对象设置动画。为了做到这一点,我必须以某种方式从我动画的属性获得实时更新。
我试过
someView.layer.addObserver(self, forKeyPath: "position", options: nil, context: nil)
但是我只有在animatin完成后才会得到更新。我还尝试将观察者添加到表示层,但没有成功。
有什么想法吗?
答案 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()上的变换然后我会根据需要使用这些信息...