gpt4 book ai didi

ios - 绘制矩形 : How do I do an "inverted clip"

转载 作者:行者123 更新时间:2023-11-28 23:07:41 26 4
gpt4 key购买 nike

我正在创建一个 iOS 用户界面,允许用户在现有图像中选择一个矩形,将该矩形的角拖动到所需的大小。我现在有四个自定义 UIButton(30% alpha)和一个在四个角按钮之间绘制虚线的自定义 View (也具有 30% alpha)。

为了“改进”界面,我希望我的 drawRect 代码使图像的裁剪部分看起来“正常”,而裁剪区域之外的所有内容都被洗掉(填充为白色,这将给我正确的效果因为 UIView 设置为 30% alpha)。

显而易见的算法是:

  1. 用 [UIColor whiteColor] 填充整个图像
  2. 用 [UIColor clearColor] 填充绘制四条虚线

当我这样做时,透明填充没有出现。我相信这是因为没有看到步骤 #2 中清晰颜色的“填充”,因为像素已经在步骤 #1 中设置为白色。也许有一种混合模式可以让我看到第二个矩形的透明度?我不确定各种混合模式。

我的第二次尝试成功了,它执行以下操作:

  1. 用 [UIColor clearColor] 填充绘制四个虚线
  2. 再绘制四个填充 [UIColor whiteColor] 的矩形,每个矩形代表裁剪区域的左侧、右侧、上方和下方的部分。

正如我提到的,这种方法有效,但在我看来应该有一种更简单的方法,而不是我每次都必须计算这四个额外的矩形。

SO Create layer mask with custom-shaped hole 上也有类似的问题它使用 CALayer 和 mask ,但这似乎对我需要的东西来说太过分了。

有人对如何改进这个有什么建议吗?

最佳答案

您可以将混合模式设置为 kCGBlendModeCopy 并使用 clearColor 将像素的 alpha 重置为零。您大概也可以使用 kCGBlendModeClear 但我还没有测试过。

您还可以将剪切路径设置为仅包含要清除的像素并调用 CGContextClearRect(gc, CGRectInfinite)

如果您想使用带孔的剪贴蒙版,您可以在不使用 CALayer 的情况下使用,并且您可以比您链接的答案更简单地构建它,通过使用奇偶规则和 CGRectInfinite:

CGContextSaveGState(GC); {
CGContextBeginPath(gc);
CGContextAddRect(gc, myRect); // or whatever simple path you want here
CGContextAddRect(gc, CGRectInfinite);
CGContextEOClip(gc);

// drawing code here is clipped to the exterior of myRect

} CGContextRestoreGState(gc);

关于ios - 绘制矩形 : How do I do an "inverted clip",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9042725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com