在一些节日或者哀悼日,需要App全局变灰(或部分页面变灰色),此方法iOS13及以上高版本有效。
原理就是把App页面当成图像,另一副偏灰图像和这个图像进行叠加运算,从而得到新的图像。iOS提供了Core Image滤镜,这些滤镜可以设置在UIView.layer上。将滤镜放置到App的最顶层。
//添加到最顶层视图,承载滤镜,自身不接收、不拦截任何触摸事件
@interface UIViewOverLay : UIView
@end
@implementation UIViewOverLay
-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event{
return nil;
}
@end
//添加到根视图,全局变灰
UIViewOverLay* overLay = [[UIViewOverLay alloc] initWithFrame:self.window.bounds];
overLay.translatesAutoresizingMaskIntoConstraints = NO;
overLay.backgroundColor = [UIColor lightGrayColor];
overLay.layer.compositingFilter = @"saturationBlendMode";
overLay.layer.zPosition = FLT_MAX;
//要保证overLay在最顶层
[self.window addSubview:overLay];
//如果要部分页面变灰,就添加到哪个具体页面
网友评论