Как мы можем уменьшить насыщенность UIView в Swift? - PullRequest
0 голосов
/ 27 мая 2020

У меня UITableView со списком уровней игры. Я хочу уменьшить насыщенность тех записей, которые заблокированы для пользователя, уменьшив насыщенность его UITableViewCell. Я проходил через руководство WWD C 2019 SwiftUI, где я увидел, что это легко сделать в свойстве от SwiftUI до .saturation любого представления, и это уменьшит насыщенность всего представления, включая его подвиды, следующим образом:

Обычный вид

enter image description here

Просмотр с уменьшенной насыщенностью

enter image description here

Есть ли способ достичь того же программного обеспечения в Swift? Уменьшение насыщенности цвета - это не то, что я ищу.

1 Ответ

1 голос
/ 27 мая 2020

обновленный ответ (только для насыщения - правила 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

...