Ios CGGradient和路径剪辑:剪辑周围的奇怪边框
我试图重现《iOS编程:大怪人牧场指南》第四版中的一个例子 请注意,我用Swift重写了书中的所有Obj-C代码 作为一项挑战,本书要求使用核心图形绘制三角形渐变: 但当我运行代码时,我注意到三角形周围有一个灰色的边框: 我不明白为什么。。。。这是我的代码: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
....
// 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,在那里你使用填充剪辑面具。请重写你的评论作为回答,这样我就可以接受了。