如何在Swift中降低UIView的饱和度?

问题描述 投票:0回答:1

我有UITableView,其中包含游戏级别列表。我想通过降低UITableViewCell的饱和度来减少为用户锁定的那些记录的饱和度。我正在看WWDC 2019 SwiftUI教程,在其中看到它很容易在任何视图的SwiftUI.saturation属性中完成,它将降低整个视图的饱和度,包括其子视图,如下所示:

普通视图

enter image description here

饱和度降低的视图

enter image description here

有什么方法可以在Swift中以编程方式实现相同的目标?降低色彩饱和度不是我想要的。

ios swift uiview swiftui
1个回答
0
投票

更新后的答案(仅适用于饱和度-stackoveflow规则:一个问题,一个答案,没有更多问题...)

extension UIImage {

    func withSaturationAdjustment(byVal: CGFloat) -> UIImage {
        guard let cgImage = self.cgImage else { return self }
        guard let filter = CIFilter(name: "CIColorControls") else { return self }
        filter.setValue(CIImage(cgImage: cgImage), forKey: kCIInputImageKey)
        filter.setValue(byVal, forKey: kCIInputSaturationKey)
        guard let result = filter.value(forKey: kCIOutputImageKey) as? CIImage else { return self }
        guard let newCgImage = CIContext(options: nil).createCGImage(result, from: result.extent) else { return self }
        return UIImage(cgImage: newCgImage, scale: UIScreen.main.scale, orientation: imageOrientation)
    }
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        let image = UIImage(named: "b")
        view.addSubview(UIImageView(image: image))

        let imageView2 = UIImageView(image: image?.withSaturationAdjustment(byVal: 0.3))
        imageView2.frame.origin.y = 300
        view.addSubview(imageView2)

    }


}

Result

© www.soinside.com 2019 - 2024. All rights reserved.