使用Multiply混合模式覆盖UIImageViews?

时间:2013-01-30 17:05:48

标签: ios uiimageview calayer core-image

我有2个UIImageViews互相显示。其中一个可以使用手势识别器拖动。

有没有一种方法可以使用像Multiply这样的混合模式渲染ImageViews?这样,当它们移动到每个上面时,它们会以混合模式渲染吗?

1 个答案:

答案 0 :(得分:10)

您必须覆盖父视图上的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,否则新绘制的内容将被遮挡。由于父视图正在重绘它们,因此您将看到生成的乘法版本。

此外,每当图像的位置更新时,您需要在父视图上调用setNeedsDisplay,以强制它再次调用drawRect。

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