更新一下就没有问题了CALayer
暂停时的位置。然而,它自然会产生你提到的闪烁。那是因为您正在动画中间更新图层的位置。
不要忘记创建一个CABasicAnimation
并将其添加到CALayer
不更改图层的设置。它创建了一个动画using层,但它不会改变层。
这就是为什么动画完成后,您会看到图层回到之前的位置。
因此,如果您要对某个图层从 A 到 B 进行动画处理,并且希望该图层在动画完成后出现在 B 处,则需要此委托回调:
- (void)animationDidStart:(CAAnimation *)theAnimation
{
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue
forKey:kCATransactionDisableActions];
myLayer.position = targetPosition;
[CATransaction commit];
}
是的,它是animationDidStart
。如果我们使用animationDidStop
然后你会看到另一个闪烁。该图层将位于动画的结束位置 B,然后您会在 A 处看到它闪烁,然后您会在 B 处再次看到它。
UsinganimationDidStart
我们将位置设置为targetPosition
, i.e.B
因为这就是我们希望看到它完成的地方。
现在,关于QA1673 http://developer.apple.com/library/ios/#qa/qa1673/_index.html#//apple_ref/doc/uid/DTS40010053,你要做的就是将动画速度设置为零,并获取当前的时间戳CACurrentMediaTime()
。恢复时,您将速度恢复正常,并应用暂停期间产生的任何偏移。
在您掌握窍门之前,这一切似乎都很令人困惑。我可以推荐一些阅读材料和视频吗?
一定要读过核心动画渲染架构 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/CoreAnimationArchitecture.html.
强烈推荐的视频有:
WWDC 2010 第 424 和 425 场核心动画实践第 1 部分和第 2 部分 https://developer.apple.com/videos/wwdc/2010/
WWDC 2011 第 421 场核心动画要点 https://developer.apple.com/videos/wwdc/2011/
and
开发者视频会议 716 适用于 iPhone 和 Mac 的核心动画技术 https://developer.apple.com/videos/iphone/