如何反转 CGContextClip()
How to invert CGContextClip()
我想反转 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)
我明白了:
是否可以反转裁剪区域以在我的行内获取图像?
您可以使用指定不同的填充模式(偶数-奇数)并使用外部路径以及您的主要(内部)路径,这应该会为您提供您正在寻找的内容。以下是一些可能有帮助的其他详细信息:Drawing Hollow circle in iPhone
这段代码没有剪裁任何东西
它只是用黑色填充你的路径。您需要在绘制图像之前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)
如果您还需要逆运算, 已经满足您的要求。
侧节点
您(大多数时候)不需要在定义变量时显式提供类型信息。让Swift推断一下。因此,您可以像这样替换行:
var path: CGMutablePathRef = CGPathCreateMutable()
有了这个:
var path = CGPathCreateMutable()
我想反转 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)
我明白了:
是否可以反转裁剪区域以在我的行内获取图像?
您可以使用指定不同的填充模式(偶数-奇数)并使用外部路径以及您的主要(内部)路径,这应该会为您提供您正在寻找的内容。以下是一些可能有帮助的其他详细信息:Drawing Hollow circle in iPhone
这段代码没有剪裁任何东西
它只是用黑色填充你的路径。您需要在绘制图像之前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)
如果您还需要逆运算,
侧节点
您(大多数时候)不需要在定义变量时显式提供类型信息。让Swift推断一下。因此,您可以像这样替换行:
var path: CGMutablePathRef = CGPathCreateMutable()
有了这个:
var path = CGPathCreateMutable()