UIBezierPath的起始和结束角度?

我使用UIBezierPathCAShapeLayer在iOS中编码了半圈。

clockWiseLayer = [[CAShapeLayer alloc] init]; CGFloat startAngle = -M_PI_2; CGFloat endAngle = M_PI + M_PI_2; CGFloat width = CGRectGetWidth(imageView.frame)/2.0f + 30; CGFloat height = CGRectGetHeight(imageView.frame)/2.0f +50; CGPoint centerPoint = CGPointMake(width, height); float radius = CGRectGetWidth(imageView.frame)/2+10; clockWiseLayer.path = [UIBezierPath bezierPathWithArcCenter:centerPoint radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES].CGPath; clockWiseLayer.fillColor = [UIColor clearColor].CGColor; clockWiseLayer.strokeColor = [UIColor blueColor].CGColor; clockWiseLayer.borderColor = [UIColor greenColor].CGColor; clockWiseLayer.backgroundColor = [UIColor redColor].CGColor; clockWiseLayer.strokeStart = 0.0f; clockWiseLayer.strokeEnd = 0.5f; clockWiseLayer.lineWidth = 2.0f; clockWiseLayer.borderWidth = 5.0f; clockWiseLayer.shouldRasterize = NO; [self.layer addSublayer:clockWiseLayer]; 

结果如下。

在此处输入图像描述

我希望在世界地球仪的另一侧有这个蓝色半圈。

它是半圈,但我想在另一边,也是CounterClockWise。

我无法设置开始和结束角度, 顺时针方向:否

谢谢。

检查坐标文档: http : //i.stack.imgur.com/1yJo6.png

在此处输入图像描述

与数学中的标准坐标系相比,Y轴是相反的。

您应该从1/2 * PI(底部锚点)绘制到3/2 * PI(顶部锚点),然后将strokeStart设置为0.0f并将strokeEnd设置为1.0f(因此它将填充整个路径)。

使用iOS常量的工作代码:

 CGFloat startAngle = M_PI_2; CGFloat endAngle = startAngle + M_PI; CGFloat width = CGRectGetWidth(imageView.frame)/2.0f; CGFloat height = CGRectGetHeight(imageView.frame)/2.0f; CGPoint centerPoint = CGPointMake(width, height); float radius = CGRectGetWidth(imageView.frame)/2+10; CAShapeLayer* clockWiseLayer = [[CAShapeLayer alloc] init]; clockWiseLayer.path = [UIBezierPath bezierPathWithArcCenter:centerPoint radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES].CGPath; clockWiseLayer.fillColor = [UIColor clearColor].CGColor; clockWiseLayer.strokeColor = [UIColor blueColor].CGColor; clockWiseLayer.borderColor = [UIColor greenColor].CGColor; clockWiseLayer.backgroundColor = [UIColor redColor].CGColor; clockWiseLayer.strokeStart = 0.0f; clockWiseLayer.strokeEnd = 1.0f; clockWiseLayer.lineWidth = 2.0f; clockWiseLayer.borderWidth = 5.0f; [self.layer addSublayer:clockWiseLayer]; 

您从-M_PI_2 ,以M_PI + M_PI_2结束(如果您想要使用完整的圆并使用strokeEndstrokeStart限制它)。 然后将圆形路径设置为从路径末端的一半(图像的左侧)而不是从开始到一半(图像的右侧)绘制

 CGFloat startAngle = -M_PI_2; CGFloat endAngle = M_PI + M_PI_2; clockWiseLayer.strokeStart = .5f; clockWiseLayer.strokeEnd = 1.0f; 

我玩过bezierPathWithArcCenter ,如果clockwise = NO ,它会很奇怪。 但是如果你想用逆时针方向创建一个圆弧贝塞尔路径,你可以创建一个顺时针路径然后用bezierPathByReversingPath恢复它

具有相同路径形状但已在反方向上创建路径的新路径对象。