掩盖CAShapeLayer创build这个奇怪的神器?

我想为待办事项列表创build一个平滑的进度条。 我用一个圆圈(CGMutablePath)掩盖了灰色区域,并有一个明显的圆弧状伪像。 不仅如此,酒吧右侧还有一个神器。

注:我试图栅格化图层无济于事。

什么原因导致iOS做到这一点,我该如何解决这个问题或摆脱它?

private var circleMask: CAShapeLayer = CAShapeLayer() override func layoutSubviews() { super.layoutSubviews() backgroundColor = GradientColor(.leftToRight, frame: self.bounds, colors: GradientFlatRed()) layer.cornerRadius = bounds.height / 2 plainProgressBar.layer.cornerRadius = layer.cornerRadius layer.shouldRasterize = true layer.rasterizationScale = UIScreen.main.scale plainProgressBar.layer.shouldRasterize = true plainProgressBar.layer.rasterizationScale = UIScreen.main.scale createMask() } private func createMask() { let path = CGMutablePath() path.addArc(center: CGPoint(x: bounds.origin.x+25/2, y: bounds.origin.y+25/2), radius: 25/2, startAngle: 0, endAngle: CGFloat(Double.pi*2), clockwise: false) path.addRect(bounds) circleMask.path = path circleMask.backgroundColor = plainMeterColor.cgColor circleMask.fillRule = kCAFillRuleEvenOdd plainProgressBar.layer.mask = circleMask } 

在这里输入图像说明

这个问题显然是反锯齿边缘的组成错误。

膝盖混乱问题:你有一个非典型的混合模式设置?

最简单的解决scheme:不要使用path.addArcpath.addRect来生成两个完全不同的形状。 只需使用init(roundedRect:...方法之一,并设置半angular高度的拐angular半径,将总path延伸到左侧的可用空间以创build硬边缘。

或者,如果没有出现,那么手动构buildpath作为一个moveaddLine(to:addArc只有半个圆圈,然后是最后一个addLine(to:close ,例如(彻底未testing,尤其是re:start和结束angular度和顺时针与逆时针与iOS的颠倒坐标系统)

 private func createMask() { let path = CGMutablePath() path.move(to: CGPoint(x: 0, y:0)) path.addLine(to: CGPoint(x: bounds.origin.x+25/2, y: 0)) path.addArc(center: CGPoint(x: bounds.origin.x+25/2, y: bounds.origin.y+25/2), radius: 25/2, startAngle: CGFloat(Double.pi/2.0), endAngle: CGFloat(Double.pi*3.0/2.0), clockwise: false) path.addLine(to: CGPoint(x: 0, y: 25)) path.close() ...