引言
最近開發(fā)哀悼模式的需求以應(yīng)對某些特殊場景,針對兩端的思想思路總結(jié)如下
解決方案
iOS:
思路:在頁面上添加混合飽和過濾模式的view,使最終的顏色為灰色
注意:iOS13有效,iOS12部分有效部分無效。在業(yè)務(wù)側(cè)使用時記得增加版本判斷
UIView *overlay = [[UIView alloc] initWithFrame:self.view.bounds];
// 濾鏡的背景顏色,一些鮮艷的顏色設(shè)置后會無效
overlay.backgroundColor = [UIColor lightGrayColor];
overlay.userInteractionEnabled = false;
// 設(shè)置符合過濾,混合飽和模式
overlay.layer.compositingFilter = @"saturationBlendMode"; // compositingFilter的值有如下: normalBlendMode、darkenBlendMode、multiplyBlendMode、colorBurnBlendMode、lightenBlendMode、screenBlendMode、colorDodgeBlendMode、overlayBlendMode、softLightBlendMode、hardLightBlendMode、differenceBlendMode、exclusionBlendMode、hueBlendMode、saturationBlendMode、colorBlendMode、luminosityBlendMode
// 設(shè)置圖層在最上面
overlay.layer.zPosition = FLT_MAX;
[self.view addSubview:overlay];
// 如果在整個app上起作用,將這個view添加到window上即可
UIWindow *window = [[UIApplication sharedApplication].delegate window];
[window addSubview:overlay];
Android:
思路:在Activity的頂層View設(shè)置置灰實現(xiàn)全局置灰效果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:
待補充