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