在UIImageViews(如Photoshop)上设置混合模式



我一直在尝试将混合模式应用于我的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

有人能提供一个与文档中相同的好教程吗?这样,如果没有人直接回答我的问题,我至少可以尝试把事情搞混。

这个问题很久以前就被问过了,但如果有人在寻找相同的anwser,你可以在视图的底层使用compositingFilter来获得你想要的:

overlayView.layer.compositingFilter = "multiplyBlendMode"

由@SeanA建议,点击此处:https://stackoverflow.com/a/46676507/1147286

过滤器
过滤器的完整列表在这里
或者你可以用打印出合成过滤器类型

print("Filters:n",CIFilter.filterNames(inCategory: kCICategoryCompositeOperation))

现已内置于iOS。历史答案:

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

相反,方法是创建一个UIView子类(其行为与UIImageView类似)。因此,制作一个UIView子类,名为BlendedImageView。它应该有一个图像属性,然后在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];
}

替换alpha和混合模式以符合您的喜好。好的做法是让BlendedImageView保存一个blendMode属性。

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

最新更新