8

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

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

4

1 回答 1

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 来实现您想要的,但这可能是最简单的。

于 2013-01-30T19:47:08.750 回答