gpt4 book ai didi

ios - 如何同步2个不同层的动画

转载 作者:可可西里 更新时间:2023-11-01 05:36:00 25 4
gpt4 key购买 nike

我有一个 UIView,它的层有 2 个子层,一个是 CAShapeLayer,另一个是 CALayer。

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

CALayer 只是将其内容设置为铅笔图像,并使用 CAKeyframeAnimation 进行动画处理。 “位置”属性通过将 CAKeyframeAnimation 的路径属性设置为与 CAShapeLayer 相同的路径,以及与 CABasicAnimation 相同的持续时间来设置动画。这具有铅笔在相同的持续时间内沿着相同的路径移动的效果,看起来就像铅笔在画椭圆。

在 iOS6 中运行良好。然而,在 iOS7 中,时间是关闭的 - 位置和 strokeEnd 动画不同步 - 它们在特定时刻同步,特别是在时间 0、duration/4、duration/2、duration*3/4 和 duration -但在两者之间,同步关闭。

如果我不使用椭圆,而是使用矩形或三角形,例如,它在 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];

下面是创建和启动两个不同动画的代码(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"];

更新

这是一个说明问题的测试应用程序。

https://github.com/xjones/AnimatedPaths

最佳答案

Apple 已通知我这是 iOS7 中的一个已知错误,他们还要求我提交错误,以帮助他们了解修复需求。 Apple 的技术支持人员告诉我他不知道有什么解决方法。如果你们中有人想出解决方法,我会洗耳恭听...

关于ios - 如何同步2个不同层的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com