ios - 使用乘法混合模式覆盖 UIImageViews?

标签 ios uiimageview calayer core-image

我有 2 个显示在彼此之上的 UIImageView。其中之一可以使用手势识别器来回拖动。

有没有一种方法可以使用像 Multiply 这样的混合模式来渲染 ImageViews?这样当它们移动到每个顶部时,它们就会使用该混合模式进行渲染?

最佳答案

您必须重写父 View 上的 drawRect: 函数,以实现如下目的:

   - (void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    [image1.image drawInRect:image1.frame blendMode:kCGBlendModeMultiply alpha:1];
    [image2.image drawInRect:image2.frame blendMode:kCGBlendModeMultiply alpha:1];
    [super drawRect:rect];
}

它所做的是获取当前的 graphicsContext,并使用乘法混合模式将两个图像绘制到其中。

为了能够看到这一点,您需要将两个图像的 alpha 设置为 0,否则新绘制的内容将被遮挡。由于父 View 正在重绘它们,因此您会看到生成的倍增版本。

此外,无论何时更新图像的位置,您都需要在父 View 上调用 setNeedsDisplay,以强制它再次调用 drawRect。

我确信可能有更有效的方法来利用 Quartz 2D 来实现您想要的,但这可能是最简单的。

关于ios - 使用乘法混合模式覆盖 UIImageViews?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609629/

相关文章:

android - 在 FCM 中添加 collapse_key

ios - 清除 CAShapeLayer 中的所有内容

iphone - subview 出现在 superviews layer.border 下面?

ios - 带有 CAShapelayer 的圆弧圆环图 - 底层的边界可见

Swift - 将最近使用的子层存储在数组(或变量)中,并使用按钮循环浏览它们?

iphone - UIImageView 中的边框

ios - "Generic parameter ' 值 ' could not be inferred"为 `observe`

苹果手机 |通过简单的短信发送 vCard

ios - 设置 UITextField 的最大字符长度

IOS:带有半径的 UIImageView 边框白色在 4 个角显示一条奇怪的黑线