我有 2 个显示在彼此之上的 UIImageView。其中之一可以使用手势识别器来回拖动。
有没有一种方法可以使用像 Multiply 这样的混合模式来渲染 ImageViews?这样当它们移动到每个顶部时,它们就会使用该混合模式进行渲染?
最佳答案
您必须重写父 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 来实现您想要的,但这可能是最简单的。
关于ios - 使用乘法混合模式覆盖 UIImageViews?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609629/