doucumet说CAShapLayer是消除锯齿的,为什么得到这个结果。 我还在drawRect方法中用CGContext绘制了一个圆圈,它非常完美。
UIBezierPath *path = [UIBezierPath bezierPath];
[path appendPath:[UIBezierPath bezierPathWithOvalInRect:CGRectMake(150, 300, 136, 136)]];
self.circleLayer = [CAShapeLayer layer];
self.circleLayer.path = path.CGPath;
self.circleLayer.frame = self.bounds;
self.circleLayer.fillColor = [[UIColor whiteColor] colorWithAlphaComponent:0.6].CGColor;
[self.layer addSublayer:self.circleLayer];
答案 0 :(得分:2)
根据the UIBezierPath docs,bezierPathWithOvalInRect:
“使用一系列Bézier曲线创建一个近似椭圆的封闭子路径,”因此它可能无法绘制一个完美的圆。 / p>
答案 1 :(得分:1)
如果使用UIBezierPath绘制圆圈,则不会是完美的圆,因为它是贝塞尔曲线的近似值。
你可以从方形UIView中画出一个完美的圆圈。例如:
myView.layer.cornerRadius = myView.frame.size.width/2;
在本主题中,解释了绘制圆圈的三种方法 - > How to draw a smooth circle with CAShapeLayer and UIBezierPath?
答案 2 :(得分:0)
iOS 12 : 我在iPhone XS和XS Max上遇到了同样的问题。我不知道为什么,但是在iPhone 8上没有问题。圆圈非常圆。
要解决XS和XS Max上的问题,我将flatness
的{{1}}属性设置为0.0,并确保用于UIBezierPath
的rect的中心是整数或例如25.5。我的直肠中心是y = 51.166666,这引起了椭圆形不圆的问题。