【发布时间】:2017-09-04 08:26:17
【问题描述】:
我有一个视图,我想用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;
}
我预计这会在我的视野中心产生一个黑色圆圈。但是,实际输出如下所示:
我做错了什么?
编辑 最奇怪的部分是它在重新安装应用程序后正确绘制 - 任何连续启动都会导致它像所附图像一样被绘制。为什么?
【问题讨论】:
-
尝试在drawRect方法中使用这段代码
-
self.circleLayer.frame = self.bounds;? -
@Larme 好吧,它是一个子层,所以它需要有
(0, 0)来源。还是我错了? -
@MikeAlter 我不能在
drawRect中使用,因为稍后我想在CABasicAnimation中对其进行动画处理。为什么它显示不正确?我将UIBezierPath添加到CAShapeLayer是为了不必在drawRect中使用它 -
您正在使用“self.frame.size.width”来定义您的圆心。尝试记录这个。此时您无法确定它的大小。您的视图可以使用 (0,0) 进行初始化,然后根据我们所知调整其大小。
标签: ios objective-c uibezierpath