引言
最近开发哀悼模式的需求以应对某些特殊场景,针对两端的思想思路总结如下
解决方案
iOS:
思路:在页面上添加混合饱和过滤模式的view,使最终的颜色为灰色
注意:iOS13有效,iOS12部分有效部分无效。在业务侧使用时记得增加版本判断
UIView *overlay = [[UIView alloc] initWithFrame:self.view.bounds];
// 滤镜的背景颜色,一些鲜艳的颜色设置后会无效
overlay.backgroundColor = [UIColor lightGrayColor];
overlay.userInteractionEnabled = false;
// 设置符合过滤,混合饱和模式
overlay.layer.compositingFilter = @"saturationBlendMode"; // compositingFilter的值有如下: normalBlendMode、darkenBlendMode、multiplyBlendMode、colorBurnBlendMode、lightenBlendMode、screenBlendMode、colorDodgeBlendMode、overlayBlendMode、softLightBlendMode、hardLightBlendMode、differenceBlendMode、exclusionBlendMode、hueBlendMode、saturationBlendMode、colorBlendMode、luminosityBlendMode
// 设置图层在最上面
overlay.layer.zPosition = FLT_MAX;
[self.view addSubview:overlay];
// 如果在整个app上起作用,将这个view添加到window上即可
UIWindow *window = [[UIApplication sharedApplication].delegate window];
[window addSubview:overlay];
Android:
思路:在Activity的顶层View设置置灰实现全局置灰效果View
View view = activity.getWindow().getDecorView();
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setStaturation(0);
paint.setColorFilter(new ColorMatrixColorFilter(cm));
view.setLayerType(View.LAYER_TYPE_HARDWARE, paint);
Harmony:
待补充