如何同步2个不同图层的动画

use*_*400 4 core-animation ios

我有一个UIView,其图层有2个子图层,一个是CAShapeLayer,另一个是CALayer.

CAShapeLayer使用bezierPathWithOvalInRect设置路径,并使用CABasicAnimation进行动画处理."strokeEnd"属性在一定的持续时间内从0.0到1.0动画.这具有在持续时间内从头到尾看到椭圆形绘制的效果.

CALayer只是将其内容设置为铅笔图像,并使用CAKeyframeAnimation进行动画处理.通过将CAKeyframeAnimation的path属性设置为与CAShapeLayer相同的路径来设置"position"属性,并将其设置为与CABasicAnimation相同的持续时间.这具有铅笔在相同持续时间内沿相同路径移动的效果,并且看起来铅笔正在绘制椭圆形.

在iOS6中工作得很漂亮.然而,在iOS7中,时间关闭 - 位置和strokeEnd动画不同步 - 它们在特定时刻同步,特别是在时间0,持续时间/ 4,持续时间/ 2,持续时间*3/4和持续时间 - 但在两者之间,同步已关闭.

如果不使用椭圆,我使用矩形或三角形,例如,它在iOS6和iOS7中运行良好.只有问题是iOS7中的椭圆.

基本上我需要知道如何同步2个不同的动画,其中每个动画都动画一个不同的层.

以下是创建2个图层的代码:

self.drawingLayer = [CAShapeLayer layer];
self.drawingLayer.frame = self.view.bounds;
self.drawingLayer.bounds = drawingRect;
self.drawingLayer.path = path.CGPath;
self.drawingLayer.strokeColor = [[UIColor blackColor] CGColor];
self.drawingLayer.fillColor = nil;
self.drawingLayer.lineWidth = 10.0f;
self.drawingLayer.lineJoin = kCALineJoinRound;
self.drawingLayer.lineCap = kCALineJoinRound;

[self.view.layer addSublayer:self.drawingLayer];

UIImage *pencilImage = [UIImage imageNamed:@"pencil.png"];
self.pencilLayer = [CALayer layer];
self.pencilLayer.contents = (id)pencilImage.CGImage;
self.pencilLayer.contentsScale = [UIScreen mainScreen].scale;
self.pencilLayer.anchorPoint = CGPointMake(0.0, 1.0); //bottom left corner
self.pencilLayer.frame = CGRectMake(0.0f, 0.0f, 100.0f, 100.0f);

[self.view.layer addSublayer:self.pencilLayer];
Run Code Online (Sandbox Code Playgroud)

这里是创建和启动2个不同动画的代码(self.drawingLayer是CAShapeLayer,self.pencilLayer是CALayer)

CABasicAnimation *drawingAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
drawingAnimation.duration = 10.0;
drawingAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
drawingAnimation.toValue = [NSNumber numberWithFloat:1.0f];
[self.drawingLayer addAnimation:drawingAnimation forKey:@"strokeEnd"];

CAKeyframeAnimation *pencilAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pencilAnimation.duration = drawingAnimation.duration;
pencilAnimation.path = self.drawingLayer.path;
pencilAnimation.calculationMode = kCAAnimationPaced;
pencilAnimation.delegate = self;
pencilAnimation.fillMode = kCAFillModeForwards;
pencilAnimation.removedOnCompletion = NO;
[self.pencilLayer addAnimation:pencilAnimation forKey:@"position"];
Run Code Online (Sandbox Code Playgroud)

UPDATE

这是一个测试应用程序,说明了问题.

https://github.com/xjones/AnimatedPaths

use*_*400 5

Apple告诉我这是iOS7中的已知错误,他们也要求我提交一个错误,以帮助他们了解修复的需求.Apple的技术支持人员告诉我他不知道解决方法.如果你们中的任何人找到了解决方法,我全都听见了......