我有 2 个 UIImageViews 显示在彼此之上。其中一个可以使用手势识别器拖动。
有没有一种方法可以使用像 Multiply 这样的混合模式来渲染 ImageView?这样当它们在每个顶部移动时,它们会以该混合模式呈现?
我有 2 个 UIImageViews 显示在彼此之上。其中一个可以使用手势识别器拖动。
有没有一种方法可以使用像 Multiply 这样的混合模式来渲染 ImageView?这样当它们在每个顶部移动时,它们会以该混合模式呈现?
您必须覆盖父视图上的 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 来实现您想要的,但这可能是最简单的。