UIBezierPath bezierPathWithArcCenter无法正确居中

mag*_*zbc 5 objective-c ios uibezierpath

我有一个视图,想在其中画一个圆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;
}
Run Code Online (Sandbox Code Playgroud)

我预计这会在我的视线中产生一个黑色圆圈。但是,实际输出如下所示:
实际产量

我究竟做错了什么?

编辑 最奇怪的部分是,它是在全新安装了该应用程序之后正确绘制的-任何连续启动都会导致它被绘制为如所附图像中所示。为什么?

Mur*_*sar 5

不要使用视图的中心!

就我而言,使用 ,

let centerPoint = CGPoint(x: bounds.midX, y: bounds.midY)

因为中心点解决了我的问题。


mag*_*zbc 1

造成这种情况的原因似乎是 iOS 中的一个错误。已CAShapeLayer正确设置其边界

self.circleLayer.bounds = self.bounds;
Run Code Online (Sandbox Code Playgroud)

经过检查,图层的起源和大小都很好,但仅限于安装后首次启动应用程序后。该应用程序的任何后续启动都将导致其大小为(0, 0). 删除该应用程序并再次安装将导致一次正确绘制圆圈。

我通过在路上再次设置图层框架来修复它。