我有我想要绘制UIBezierPath bezierPathWithArcCenter
了一圈视图。我的观点的initWithFrame
如下:
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if(self == nil) {
return nil;
}
self.circleLayer = [CAShapeLayer layer];
self.circleLayer.fillColor = UIColor.clearColor.CGColor;
self.circleLayer.strokeColor = UIColor.blackColor.CGColor;
self.circleLayer.lineWidth = 4;
self.circleLayer.bounds = self.bounds;
self.startAngle = 0.0;
self.endAngle = M_PI * 2;
CGPoint center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5);
CGFloat radius = self.frame.size.height * 0.45;
self.circleLayer.path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:self.startAngle endAngle:self.endAngle clockwise:YES].CGPath;
[self.layer addSublayer:self.circleLayer];
self.backgroundColor = UIColor.greenColor;
return self;
}
我预计这将产生在我看来为中心的黑圈。然而,实际的输出如下所示:
我究竟做错了什么?
编辑怪异的部分是,它绘制正确后重新安装应用程序的 - 任何连续发射导致它被绘制像附着在图像中。为什么?
这样做的原因似乎是iOS中的错误。该CAShapeLayer
有其界限设置不当
self.circleLayer.bounds = self.bounds;
经检查它,该层的起源和大小是好的,但只有在安装后第一次推出的应用程序后。任何后续推出的应用程序将导致它的大小存在(0, 0)
。删除应用程序,并重新安装它会导致循环正在制定适当的一次。
我再次进一步设置层的帧的道路修好了。
不要使用视图的中心!
在我的情况下,使用,
let centerPoint = CGPoint(x: bounds.midX, y: bounds.midY)
为中心点解决我的问题。
我跑进有些同样的问题,但我要的道路并没有在我的观点的中心,甚至在第一次发射图纸。
这是我在问题的时间代码:让circularPath = UIBezierPath(arcCenter:CGPoint(X:containerView.frame.size.width / 2,Y:containerView.frame.size.height / 2),半径:50,由startAngle: (-CGFloat.pi / 2),endAngle:(CGFloat.pi * 2),顺时针:真)
该“containerView”是含有由bazierpath绘制的圆的图。
但后来我做了一个预感以下和它的工作。
让中心点= CGPoint(X:containerView.frame.size.width / 2,Y:containerView.frame.size.height / 2)
让circularPath = UIBezierPath(arcCenter:中心点,半径:50,由startAngle:(-CGFloat.pi / 2),endAngle:(CGFloat.pi * 2),顺时针:真)
基本上,我不得不把它分配给bazierpath之前创建的中心点。希望这可以帮助别人。