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

有没有一种方法可以使用混合模式(如“乘”)来渲染ImageView?这样,当它们在每个顶部移动时,会使用该混合模式进行渲染吗?

最佳答案

您必须重写父 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实现您想要的功能,但这可能是最简单的。

10-08 08:27