我在UIScrollView
中有一個UIImage
,它可以從一端滾動到另一端。可以說左邊是0.0%,右邊是100.0%。逐漸將UIImage的顏色從RGB更改爲灰度
UIImage
是RGB範圍內的彩色圖像,我希望根據滾動位置逐漸變爲灰度。
我研究了這個,但找不到任何答案逐漸改變它。顯然可以一次渲染它的射線比例。
有沒有可能在Swift中做到這一點?
編輯
感謝鄧肯技術上正確的答案。這確實有效,但不幸的是它在滾動時滯後。這就是爲什麼我使用Joerns解決方案將兩個圖像放在一起(一個彩色,一個灰度)並相應地更改Alpha值。 如果有人想代碼鄧肯建議,在這裏你去:
if let image = image
{
let icon = CIImage(CGImage: image)
if let filter = CIFilter(name: "CIColorControls")
{
filter.setValue(icon, forKey: kCIInputImageKey)
filter.setValue(0.0, forKey: kCIInputSaturationKey)
if let ciImage = filter.outputImage
{
let context = CIContext(options:nil)
let cgImage = context.createCGImage(ciImage, fromRect: ciImage.extent)
imageView.image = UIImage(CIImage: cgImage)
}
}
}
您能解釋一下根據滾動位置進行更改的含義嗎?您是否希望飽和度在圖像上從左向右逐漸變化,還是希望圖像的整個可見部分使用根據滾動位置而變化的單個飽和度值?我的回答假設你想要從飽和狀態改變爲左至右。西蒙的回答可以讓你根據滾動位置改變整個當前可見區域的飽和度。 –
@DuncanC看到我上面的編輯 – freshking
@freshking你可以使用CGColorSpaceCreateDeviceGray創建一個上下文並在其上繪製圖像。這比過濾器快10倍。在我的機器0.07121700048446655針對0.6915000081062317使用CIColorControls –