我想反转CGContextClip() 所以使用此代码:
let startPoint: CGFloat = CGFloat(degreesToRadians(270))
let endPoint: CGFloat = CGFloat(degreesToRadians(0))
var path: CGMutablePathRef = CGPathCreateMutable()
CGPathAddArc(path, nil, CGFloat(self.frame.size.width / 2.0), CGFloat(self.frame.size.height / 2.0), 155, startPoint, endPoint, false)
CGPathAddArc(path, nil, CGFloat(self.frame.size.width / 2.0), CGFloat(self.frame.size.height / 2.0), 84, endPoint, startPoint, true)
CGContextAddPath(ctx, path)
CGContextDrawImage(ctx, CGPathGetBoundingBox(path), image.CGImage)
CGContextFillPath(ctx)
CGContextClosePath(ctx)
CGContextClip(ctx)
是否可以反转剪裁区域以获取我的线条内的图像?
答案 0 :(得分:2)
它只是用黑色填补你的道路。在绘制图像之前,您需要致电CGContextClip
。这本身应该达到你想要的效果(将图像蒙版在弧区域内)。
此外,在添加您的上下文路径之前,应将CGContextClosePath
称为。如果您只是屏蔽,则不应该致电CGContextFillPath
。
这样的事情应该达到你想要的效果:
let startPoint = -CGFloat(M_PI)*0.5
let endPoint = CGFloat(0)
let ctx = UIGraphicsGetCurrentContext()
let path = CGPathCreateMutable()
CGPathAddArc(path, nil, frame.size.width / 2.0, frame.size.height / 2.0, 155, startPoint, endPoint, false)
CGPathAddArc(path, nil, frame.size.width / 2.0, frame.size.height / 2.0, 84, endPoint, startPoint, true)
CGContextClosePath(ctx)
CGContextAddPath(ctx, path)
CGContextClip(ctx)
CGContextDrawImage(ctx, CGPathGetBoundingBox(path), image.CGImage)
如果你仍然需要倒数,Matt's answer已经让你满意。
您(大部分时间)在定义变量时不需要明确提供类型信息。让斯威夫特推断它。因此,您可以替换这样的行:
var path: CGMutablePathRef = CGPathCreateMutable()
用这个:
var path = CGPathCreateMutable()
答案 1 :(得分:1)
您可以使用指定不同的填充模式(偶数 - 奇数)并使用外部路径以及主(内部)路径,它可以为您提供所需的内容。以下是一些可能有用的其他详细信息:Drawing Hollow circle in iPhone