如何旋转一个圆形的CAShapeLayer弧?

我有两个CAShapeLayer形成以下显示:

在这里输入图像描述

它们是用这段代码创建的:

CALayer *layer = [loadingView layer];
CAShapeLayer *circle = [CAShapeLayer layer];
[circle setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(5, 5, loadingView.bounds.size.width - 10, loadingView.bounds.size.height - 10)] CGPath]];
[circle setStrokeColor:[UIColorFromRGB(0xffffff, .15) CGColor]];
[circle setLineWidth:5];
[circle setFillColor:[[UIColor clearColor] CGColor]];
[layer addSublayer:circle];

CAShapeLayer *arc = [CAShapeLayer layer];
[arc setPath:[[UIBezierPath bezierPathWithArcCenter:CGPointMake(27, 27) radius:22 startAngle:1.25*M_PI endAngle:1.75*M_PI clockwise:YES] CGPath]];
[arc setStrokeColor:[UIColorFromRGB(0xffffff, .8) CGColor]];
[arc setLineWidth:5];
[arc setFillColor:[[UIColor clearColor] CGColor]];
[layer addSublayer:arc];

我希望较小的不透明弧线能够保持其大小并无限期地绕着圆环旋转。 我尝试过应用我在其他答案中找到的一些transform.rotation动画,但是最终会转向不可预测的方向。

我也尝试以同样的速度提高strokeStartstrokeEnd的弧度,这首先得到我想要的效果,但由于这些属性的性质而无法循环进行。

那是如此,如何执行这个效果?


这里最好的选择是旋转你的整个圈子。 围绕其中心旋转loadingView ,你会得到你想要的效果。 您将获得额外的好处,甚至可以非常轻松地修改笔划长度而不会混淆旋转。


默认情况下,形状图层中坐标系的原点位于点(0,0),其边界为0×0维; 当你给它一个路径时,这些属性都不会自动改变。 你要给它的圆弧集中在(27,27),所以当你旋转图层时,绘制的圆弧围绕图层的实际中心旋转,该中心是上方27点并且位于圆弧中心左侧。

你最好的选择是改变你创建弧形和定位图层的方式。 不要以(27,27)为中心创建贝塞尔路径,而要以(0,0)为中心(即图层的原点),并将弧层的位置设置为其父图层中的(27,27) 。

链接地址: http://www.djcxy.com/p/74259.html

上一篇: How to rotate a CAShapeLayer arc around a circle?

下一篇: CABasicAnimation not animating on CAShapeLayer