UIView 反转掩码 MaskView
Posted
技术标签:
【中文标题】UIView 反转掩码 MaskView【英文标题】:UIView invert mask MaskView 【发布时间】:2017-10-21 11:25:37 【问题描述】:我想对我的 UIView 应用一个倒置蒙版。我将掩码设置为带有透明图像的 UIImageView。然而输出与
view.mask = imageView
不是想要的结果。如下图所示,我怎样才能达到预期的效果?所需的结果使用蒙版切口作为透明度。当我检查视图的掩码时,它不是 CAShapeLayer,所以我不能那样反转它。
【问题讨论】:
【参考方案1】:似乎你可以做一些事情。您可以使用您拥有的图像,但掩盖一个白色视图并在其后面放置一个蓝色视图。或者您可以通过反转透明度来调整您正在使用的图像资源。或者您可以使用CoreImage
在代码中执行此操作。例如:
func invertMask(_ image: UIImage) -> UIImage?
guard let inputMaskImage = CIImage(image: image),
let backgroundImageFilter = CIFilter(name: "CIConstantColorGenerator", withInputParameters: [kCIInputColorKey: CIColor.black]),
let inputColorFilter = CIFilter(name: "CIConstantColorGenerator", withInputParameters: [kCIInputColorKey: CIColor.clear]),
let inputImage = inputColorFilter.outputImage,
let backgroundImage = backgroundImageFilter.outputImage,
let filter = CIFilter(name: "CIBlendWithAlphaMask", withInputParameters: [kCIInputImageKey: inputImage, kCIInputBackgroundImageKey: backgroundImage, kCIInputMaskImageKey: inputMaskImage]),
let filterOutput = filter.outputImage,
let outputImage = CIContext().createCGImage(filterOutput, from: inputMaskImage.extent) else return nil
let finalOutputImage = UIImage(cgImage: outputImage)
return finalOutputImage
【讨论】:
太棒了!我唯一的问题是 imageView 比 UIView 小,所以掩码只显示带有切口的倒置图像。我该如何解决? 我想最简单的方法是将imageView
的frame
设置为与您要屏蔽的视图相同的大小,并将imageView
的contentMode
设置为.scaleAspectFill
但很难确切知道该怎么做。也许你可以用你想要发生的事情来更新你的问题。以上是关于UIView 反转掩码 MaskView的主要内容,如果未能解决你的问题,请参考以下文章