为什么cashapelayer的圆形路径不那么圆?

时间:2013-08-28 15:28:18

标签: ios objective-c cashapelayer

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];

enter image description here

3 个答案:

答案 0 :(得分:2)

根据the UIBezierPath docsbezierPathWithOvalInRect:“使用一系列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,这引起了椭圆形不圆的问题。