Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CGGradient和路径剪辑:剪辑周围的奇怪边框_Ios_Swift_Core Graphics - Fatal编程技术网

Ios CGGradient和路径剪辑:剪辑周围的奇怪边框

Ios CGGradient和路径剪辑:剪辑周围的奇怪边框,ios,swift,core-graphics,Ios,Swift,Core Graphics,我试图重现《iOS编程:大怪人牧场指南》第四版中的一个例子 请注意,我用Swift重写了书中的所有Obj-C代码 作为一项挑战,本书要求使用核心图形绘制三角形渐变: 但当我运行代码时,我注意到三角形周围有一个灰色的边框: 我不明白为什么。。。。这是我的代码: .... // draw circles UIColor.grayColor().setStroke() path.stroke() let logoImg = UIImage(named: "lo

我试图重现《iOS编程:大怪人牧场指南》第四版中的一个例子

请注意,我用Swift重写了书中的所有Obj-C代码

作为一项挑战,本书要求使用核心图形绘制三角形渐变:

但当我运行代码时,我注意到三角形周围有一个灰色的边框:

我不明白为什么。。。。这是我的代码:

    ....
    // draw circles
    UIColor.grayColor().setStroke()
    path.stroke()

    let logoImg = UIImage(named: "logo.png")
    let realSize:CGSize = logoImg.size.halve() // get a /2 CGSize in order to calculate non-retina size

    let gradientLocations:[CGFloat] = [0, 1]
    let gradientColors:[CGFloat] = [0, 1, 0, 1,
                                    1, 1, 0, 1]
    let colorSpace = CGColorSpaceCreateDeviceRGB()
    let gradient = CGGradientCreateWithColorComponents(colorSpace, gradientColors, gradientLocations, 2)

    let gradientClipPath = UIBezierPath()
    gradientClipPath.moveToPoint(CGPoint(x: center.x - realSize.width/2, y: center.y + realSize.height/2 + 30))
    gradientClipPath.addLineToPoint(CGPoint(x: center.x + realSize.width/2, y: center.y + realSize.height/2 + 30))
    gradientClipPath.addLineToPoint(CGPoint(x: center.x, y: center.y - realSize.height/2 - 30))
    gradientClipPath.addLineToPoint(CGPoint(x: center.x - realSize.width/2, y: center.y + realSize.height/2 + 30))
    gradientClipPath.fill()

    // draw gradient
    CGContextSaveGState(currContext)
    gradientClipPath.addClip()
    CGContextDrawLinearGradient(currContext, gradient, CGPoint(x: 0, y: center.y - realSize.height/2 - 30), CGPoint(x: 0, y: center.y + realSize.height/2 + 30), 0)
    CGContextRestoreGState(currContext)

    // draw logo with drop shadow
    ....

将“笔划”设置为“清除”或“其他颜色”无效。边框仍然存在,并且仍然是灰色的。

在绘制渐变之前,不需要填充渐变路径。删除此行:

gradientClipPath.fill()

gradientClipPath.fill是否应该包含在代码中?我认为这是一个错误。如果不是这样的话,我真的帮不上忙。对不起,我最近一直在用CAShapeLayer,我不太习惯使用核心图形。注意:您确实应该避免在实际项目中使用核心图形。通常,CAShapeLayer更适合绘制bezier路径。我认为填充应该在那里,因为它会划过将绘制渐变的区域。。。不请注意,这在书中是一个挑战,因此我自己编写了部分代码。谢谢你关于CG的提示。试着填写一下,我认为这是出问题的部分。如果你不填,会有帮助吗?在家里,我会尽量让你知道,谢谢。谢谢。。。那起作用了。。。我来自Flash,在那里你使用填充剪辑面具。请重写你的评论作为回答,这样我就可以接受了。