gpt4 book ai didi

objective-c - CAShapeLayers 上的抗锯齿

转载 作者:搜寻专家 更新时间:2023-10-30 20:17:52 24 4
gpt4 key购买 nike

我有一个加载指示器的自定义 View ,它由许多 CAShapeLayers 组成,我在其上执行各种动画以表示各种状态。在 init 方法中,我创建了许多形状图层并将它们作为子图层添加到 View 图层中。我遇到的问题是我绘制的形状有非常粗糙的边缘并且似乎没有抗锯齿。我已经从这里的类似答案中尝试了很多东西,但我似乎无法对形状进行抗锯齿处理。我以前从来没有遇到过这个问题,然后直接在 drawRect 中绘制。

我是否遗漏了什么或者是否有更好的方法来完成我想做的事情?

更新:下面是如何绘制形状的比较:

Comparison of drawing methods

在左侧,我使用以下代码在 layoutSubviews 中绘制:

CGFloat lineWidth = 2.5f;
CGFloat radius = (self.bounds.size.width - lineWidth)/2;
CGPoint center = CGPointMake(CGRectGetWidth(self.frame)/2, CGRectGetHeight(self.frame)/2);

CGFloat startAngle = - ((float)M_PI / 2);
CGFloat endAngle = (2 * (float)M_PI) + startAngle;

UIBezierPath *trackPath = [UIBezierPath bezierPathWithArcCenter:center
radius:radius
startAngle:startAngle
endAngle:endAngle
clockwise:YES];
self.trackLayer.path = trackPath.CGPath;
self.trackLayer.lineWidth = lineWidth;

在右侧,我正在从 awakeFromNib 中调用一个单独的方法:

-(void)awakeFromNib
{
....
self.trackLayer = [self trackShape]
[self.layer addSublayer:self.trackLayer];
}

-(CAShapeLayer*)trackShape
{
float start_angle = 2*M_PI*-M_PI_2;
float end_angle = 2*M_PI*1-M_PI_2;
float minSize = MIN(self.frame.size.width, self.frame.size.height);
float radius = (minSize-_strokeWidth)/2 -4;
CGPoint center = CGPointMake(self.frame.size.width/2,self.frame.size.height/2);
CAShapeLayer *circle = [CAShapeLayer layer];

circle.path = [UIBezierPath bezierPathWithArcCenter:center
radius:radius
startAngle:start_angle
endAngle:end_angle
clockwise:YES].CGPath;
circle.strokeColor = self.trackColor.CGColor;
circle.fillColor = nil;
circle.lineWidth = (_strokeWidth == -1.0) ? minSize * _strokeWidthRatio
: _strokeWidth;
circle.rasterizationScale = [[UIScreen mainScreen] scale];

return circle;
}

最佳答案

您提供的图片正是我遇到的情况。我得到了一个粗圆圈。在我的例子中,代码在 drawRect 方法中。问题是我在每次调用 drawRect 时都添加了一个 CAShapeLayer 作为我 View 的子层。

因此,对于任何偶然发现类似情况的人,请在 drawRect 中再次绘制之前跟踪您正在添加的 CAShapeLayer 或清除所有内容。

关于objective-c - CAShapeLayers 上的抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22720481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com