实现原理:用添加了半透明灰色滤镜的View,盖在想要置灰的界面上。
自定义View
class GrayOverlayView: UIView {
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
return nil
}
}
添加View到界面。需要注意,saturationBlendMode
滤镜效果只在iOS12以上系统有效,需要判断系统。否则会出现一个灰色的View盖住屏幕的问题。
if #available(iOS 12.0, *) {
let grayView = GrayOverlayView()
grayView.translatesAutoresizingMaskIntoConstraints = false
grayView.frame = view.bounds
grayView.backgroundColor = .lightGray
grayView.layer.compositingFilter = "saturationBlendMode"
view.addSubview(grayView)
}
参考文章:iOS哀掉日黑白化