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)
我预计这会在我的视线中产生一个黑色圆圈。但是,实际输出如下所示:

我究竟做错了什么?
编辑 最奇怪的部分是,它是在全新安装了该应用程序之后正确绘制的-任何连续启动都会导致它被绘制为如所附图像中所示。为什么?
不要使用视图的中心!
就我而言,使用 ,
let centerPoint = CGPoint(x: bounds.midX, y: bounds.midY)
因为中心点解决了我的问题。
造成这种情况的原因似乎是 iOS 中的一个错误。已CAShapeLayer正确设置其边界
self.circleLayer.bounds = self.bounds;
Run Code Online (Sandbox Code Playgroud)
经过检查,图层的起源和大小都很好,但仅限于安装后首次启动应用程序后。该应用程序的任何后续启动都将导致其大小为(0, 0). 删除该应用程序并再次安装将导致一次正确绘制圆圈。
我通过在路上再次设置图层框架来修复它。