UIBezierPath出现不需要的轮廓,填充并用作查看渐变的剪辑

时间:2017-02-07 00:15:40

标签: ios gradient uibezierpath antialiasing

我有一条填充的路径,也用于剪辑以提供渐变。与渲染填充相比,渐变的渲染只是稍微小一些或者具有不同的抗锯齿效果。这会产生轮廓效果:

image of a leaf shape with a light yellow to gray gradient, surrounded by a darker grey jagged outline

有没有办法删除这个大纲?

请注意:

  1. 使用两个单独绘制的相同路径无法解决问题
  2. 不使用填充,但是使用两个渐变并不能解决问题。即使只有一个渐变超过另一个渐变,你也会得到轮廓。
  3. 通过仅使用没有填充的实体渐变,可以在没有轮廓的情况下获得我想要的渐变,但这会使渐变的效果更加困难。
  4. 以下是代码:

    let path4Path = UIBezierPath()
    //ordinary drawing stuff here
    path4Path.close()
    fillColor.setFill()  //set to black fill
    path4Path.fill()
    context.saveGState()
    context.setAlpha(0.9)
    path4Path.addClip()
    context.drawLinearGradient(allToldGradient, start: CGPoint(x: 52.72, y: 114.48), end: CGPoint(x: 30.22, y: 91.99), options: [])
    context.restoreGState()
    

1 个答案:

答案 0 :(得分:2)

我认为你必须像这样关闭抗锯齿:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetShouldAntialias(context, NO);
CGContextSetAllowsAntialiasing(context, NO);
CGContextSetInterpolationQuality(context, kCGInterpolationNone);