3

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

在此处输入图像描述

4

3 回答 3

2

根据UIBezierPath 文档, “使用一系列贝塞尔曲线bezierPathWithOvalInRect:创建一个近似椭圆的封闭子路径”,因此它可能不会绘制一个完美的圆。

于 2013-08-28T16:25:55.800 回答
1

如果您使用 UIBezierPath 绘制圆,则不会是完美的圆,因为它是贝塞尔曲线的近似值。

您可以从方形 UIView 中绘制一个完美的圆形。例如:

myView.layer.cornerRadius = myView.frame.size.width/2;

在本主题中解释三种绘制圆的方法 ->如何使用 CAShapeLayer 和 UIBezierPath 绘制平滑的圆?

于 2014-09-05T15:30:09.730 回答
0

iOS 12:我在 iPhone XS 和 XS Max 上遇到了同样的问题。我不知道为什么,但在 iPhone 8 上没有问题。圆圈是完美的圆形。

为了解决 XS 和 XS Max 上的问题,我将flatness属性设置UIBezierPath为 0.0,并确保用于的矩形的中心UIBezierPath是整数或浮点数,例如 25.5。我的矩形的中心是 y=51.166666,这导致了椭圆不圆的问题。

于 2019-04-03T08:03:35.480 回答