iOS 高性能置灰方案

iOS 高性能置灰方案

全局动态置灰,很多App都会在特殊节日比如清明或者其他哀悼日使用哀悼置灰。
对于置灰操作,如果是每次都更新版本,肯定就来不及,一般处理方式为后台设置按钮开关,处理对应日子开启置灰操作。
另外还有一些特殊的业务要求,比如首页页面置灰,而其他页面不置灰。本文将详细探讨实现和配置的细节,力求提供完整方案。

全局置灰实现:

思路: 给视图加上饱和度为0的滤镜。即 window 的 layer 上设置 filters。

  1. 生成CAFilter 颜色饱和度滤镜
CAFilter *filter = [CAFilter filterWithName:colorSaturate];
  1. 设置饱和度为0
[filter inputAmount:0];
  1. 赋值给 window (此处可以替换为keywindow)
[NMIoc_App appDelegate].window.layer.filters = @[filter];

部分页面置灰实现:

  1. 在App启动时通过配置中心获取执行黑/白名单模式,以及页面黑名单和页面白名单
  2. Hook viewWillAppearviewDidDisappear,判断是否处于命中页面
  3. viewWillAppear 设置 window 的滤镜
  4. viewDidDisappear 移除 window 滤镜

不把饱和度滤镜加 window 上的话,可能会导致首屏 tabbar 等元素是彩色的。

实现的细节:

  1. App前后台切换,需要更新滤镜状态
  2. 配置变更时更新配置

配置数据样例

缺省配置

[
    {
        "type":"colorSaturateZero",
        "strategy":"none",
        "startTime":1234567890,//单位毫秒
        "endTime":1234567890//单位毫秒
    }
]

全局配置

[
    {
        "type":"colorSaturateZero",
        "strategy":"global",
        "startTime":1234567890,
        "endTime":1234567890
    }
]

白名单模式

[
    {
        "type":"colorSaturateZero",
        "strategy":"whitelist",
        "startTime":1234567890,
        "endTime":1234567890,
        "iOSIdentify":[
            "需要置灰的页面A",
            "需要置灰的页面B"
        ],
        "androidIdentify":[
            "需要置灰的页面A",
            "需要置灰的页面B"
        ]
    }
]

黑名单模式

[
    {
        "type":"colorSaturateZero",
        "strategy":"blacklist",
        "startTime":1234567890,
        "endTime":1234567890,
        "iOSIdentify":[
            "不需要置灰的页面A",
            "不需要置灰的页面B"
        ],
        "androidIdentify":[
            "不需要置灰的页面A",
            "不需要置灰的页面B"
        ]
    }
]

特殊处理

*音乐 iPad 端页面

  1. 大部分分屏页面都没有 viewWillAppearviewDidDisappear 事件,需要结合监听 kNavigationPageChangedNotification 通知来获取页面变动事件。
  2. 需要额外 Hook View的生命周期。在通知产生后核对顶部视图的状态,如果命中置灰逻辑,则将VC对应的View记录下来,在Hook View的生命周期时对记录的View进行置灰处理。
  3. 分屏页面的出现导致无法使用windows滤镜,会污染被部分展示的白名单页面。所以只能设置 VC 对应 view 的滤镜。

广告页的异常情况

在*音乐iPhone端中,广告视图是另外创建的window,需要覆盖广告window的话,还需要Hook UIWindow makeKeyAndVisible来达到对新展示的window的覆盖效果。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值