我有2个UIImageViews互相显示。其中一个可以使用手势识别器拖动。
有没有一种方法可以使用像Multiply这样的混合模式渲染ImageViews?这样,当它们移动到每个上面时,它们会以混合模式渲染吗?
答案 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来实现你想要的东西,但这可能是最简单的。