我在故事板中使用约束设置了UIView
,并且我想使用带有CAShapeLayer
的{{1}}向此视图添加圈子进度。
我已正确添加,但圆圈未扩展到所有视图。我在viewDidLoad函数中调用它。我的视图限制了高度top-x视图和宽度。
UIBezierPath
圈子进度未调整为- (void)viewDidLoad {
[super viewDidLoad];
CAShapeLayer *borderLayer = [CAShapeLayer layer];
borderLayer.fillColor = [UIColor whiteColor].CGColor;
CGFloat lineWidth = 4;
CGRect rect = CGRectMake(lineWidth+lineWidth/2, lineWidth+lineWidth/2, self.myView.bounds.size.width/2, self.myView.bounds.size.height/2);
borderLayer.path = [UIBezierPath bezierPathWithOvalInRect:rect].CGPath;
borderLayer.strokeColor = [[UIColor redColor] CGColor];
borderLayer.lineWidth = lineWidth;
[borderLayer setFillColor:[UIColor clearColor].CGColor];
[self.myView.layer addSublayer:borderLayer];
}
,并显示如下:
我如何能够像这样占据整个UIView
:
答案 0 :(得分:1)
1 - 您的视图框架尚未在viewDidLoad
中设置。您需要在视图控制器的生命周期中将此代码移动到viewDidLayoutSubviews
或更高版本。
相关问题:
Why am I having to manually set my view's frame in viewDidLoad?
关于视图控制器生命周期的Apple Docs: https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/WorkWithViewControllers.html#//apple_ref/doc/uid/TP40015214-CH6-SW1
2 - 改变这个:
CGRect rect = CGRectMake(lineWidth+lineWidth/2, lineWidth+lineWidth/2, self.myView.bounds.size.width/2, self.myView.bounds.size.height/2);
到此:
CGRect rect = CGRectMake(lineWidth/2, lineWidth/2, self.myView.bounds.size.width - lineWidth, self.myView.bounds.size.height - lineWidth);
结果(我的测试使用略微不同的lineWidth和视图大小):