1
一段时间以来,我们使用以下代码来遮盖灰度图像,而不透明化彩色图像。iOS10 beta3上的图像遮罩失败
在苹果发布iOS 10 beta 3之前,它一直正常运行。突然之间,面具不再适用,导致仅使用te给定颜色返回方形框。
掩蔽用的图像的图像首标下找到面膜
该代码的逻辑: *以一个灰度图像,而没有阿尔法 *用给定的颜色创建一个纯色图像 *从给定的图像创建一个蒙版 *使用创建的蒙版蒙版实心图像 *输出是一个蒙面图像,同时也尊重(gr ay可能是浅红色的即)。
有没有人有一个想法如何解决这个功能? 如果你的XCode 8的Beta 3,您可以运行该代码,并在模拟器低于iOS的10,这将工作正确的,在iOS上10它将只创建一个方盒子
public static func image(maskedWith color: UIColor, imageNamed imageName: String) -> UIImage? {
guard let image = UIImage(named: imageName)?.withRenderingMode(.alwaysOriginal) else {
return nil
}
guard image.size != CGSize.zero else {
return nil
}
guard
let maskRef = image.cgImage,
let colorImage = self.image(with: color, size: image.size),
let cgColorImage = colorImage.cgImage,
let dataProvider = maskRef.dataProvider
else {
return nil
}
guard
let mask = CGImage(maskWidth: maskRef.width, height: maskRef.height, bitsPerComponent: maskRef.bitsPerComponent, bitsPerPixel: maskRef.bitsPerPixel, bytesPerRow: maskRef.bytesPerRow, provider: dataProvider, decode: nil, shouldInterpolate: true),
let masked = cgColorImage.masking(mask)
else {
return nil
}
let result = UIImage(cgImage: masked, scale: UIScreen.main().scale, orientation: image.imageOrientation)
return result
}
public static func image(with color: UIColor, size: CGSize) -> UIImage? {
guard size != CGSize.zero else {
return nil
}
let rect = CGRect(origin: CGPoint.zero, size: size)
UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.main().scale)
defer {
UIGraphicsEndImageContext()
}
guard let context = UIGraphicsGetCurrentContext() else {
return nil
}
context.setFillColor(color.cgColor)
context.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
return image;
}
这方面的进展如何?堆叠多个CALayers并使用蒙版时,我遇到类似的问题。你有没有向Apple提出申请? –
是的,我们确实已经向苹果报告过。我们希望他们能够在下一个测试版中解决它,或者开始探索不同的选择(或希望有人有一个很好的解决方案) –
我还没有在我的问题上取得任何进展。一个重现问题的示例项目不存在问题:-(。它像CALayer将图像数据量化为更少的位,因为它包含更多的子图层。 –