像 Photoshop 一样在 UIImageViews 上设置混合模式

Lit*_*Dev 7 quartz-2d ios

我一直在尝试将混合模式应用于我的 UIImageViews 以复制 PSD 模型文件(抱歉不能提供)。PSD 文件有 3 个图层,一个基色具有 60% 的正常混合,一个图像层具有 55% 的乘法混合和一个具有 35% 叠加的渐变层。

我一直在通过互联网尝试几个教程,但仍然无法使颜色/图像完全相同。

我注意到的一件事是我的 iPhone 的颜色与我的 Mac 屏幕的颜色不同。

我找到了 Quartz 2D 的文档,我认为这是正确的方法,但我无法获得有关将混合模式与图像一起使用的任何示例/教程。 https://developer.apple.com/library/mac/documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_images/dq_images.html#//apple_ref/doc/uid/TP30001066-CH212-CJBIJEFG

任何人都可以提供一个很好的教程,与文档中的教程一样,这样我至少可以尝试混合一些东西,如果没有人为我的问题提供直接的答案。

Acc*_*yyc 0

现在内置到 iOS 中。历史答案:

您不想为此使用 UIImageView,因为它并不真正支持混合模式。

相反,正确的方法是创建一个 UIView 子类(其行为就像 UIImageView 一样)。因此,创建一个名为 BlendedImageView 的 UIView 子类。它应该有一个 image 属性,然后在 drawRect: 方法中你可以这样做:

- (void)drawRect:(CGRect)rect
{
    //
    // Here you need to calculate a rect based on self.contentMode to replicate UIImageView-behaviour.
    // For example, for UIViewContentModeCenter, you want a rect that goes outside 'rect' and centers with it.
    //
    CGRect actualRect = // ...
    [self.image drawInRect:actualRect blendMode:kCGBlendModeOverlay alpha:0.5];
}
Run Code Online (Sandbox Code Playgroud)

替换 Alpha 和混合模式以满足您的喜好。好的做法是让您的 BlendedImageView 保存 blendMode 属性。

在您的情况下,您可能需要使用与上面相同的代码进行更高级的视图来绘制所有 3 个图像。