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;
}
我预计这将产生在我看来为中心的黑圈。但是,实际输出如下所示:
我在做什么错?
编辑 最奇怪的是,它的正确绘制后的新的应用安装 - 任何连续发射导致它被绘制像附着在图像中。为什么?
答
原因似乎是iOS中的一个错误。该CAShapeLayer
有其边界正确
self.circleLayer.bounds = self.bounds;
设置在检查它,该层的起源和大小是好的,但后才安装后首批推出的应用程序。任何随后的应用程序启动将导致其大小为(0, 0)
。删除应用程序并再次安装将导致圆圈被正确绘制一次。
我通过再次设置层的框架来修复它。
尝试在drawRect方法中使用此代码 –
'self.circleLayer.frame = self.bounds;'? – Larme
@大家好,它是一个子层,所以它需要有'(0,0)'来源。或者我错了? –