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將圖像數據量化爲更少的位,因爲它包含更多的子圖層。 –