UIBezierPath bezierPathWithArcCenter未正确居中

问题描述:

我有一个视图,我想在其中画一个圆圈UIBezierPath bezierPathWithArcCenter。我的观点的initWithFrame如下:UIBezierPath bezierPathWithArcCenter未正确居中

- (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; 
} 

我预计这将产生在我看来为中心的黑圈。但是,实际输出如下所示:
Actual output

我在做什么错?

编辑 最奇怪的是,它的正确绘制后的新的应用安装 - 任何连续发射导致它被绘制像附着在图像中。为什么?

+0

尝试在drawRect方法中使用此代码 –

+0

'self.circleLayer.frame = self.bounds;'? – Larme

+0

@大家好,它是一个子层,所以它需要有'(0,0)'来源。或者我错了? –

原因似乎是iOS中的一个错误。该CAShapeLayer有其边界正确

self.circleLayer.bounds = self.bounds; 

设置在检查它,该层的起源和大小是好的,但后才安装后首批推出的应用程序。任何随后的应用程序启动将导致其大小为(0, 0)。删除应用程序并再次安装将导致圆圈被正确绘制一次

我通过再次设置层的框架来修复它。