我是靠谱客的博主 安静大米,最近开发中收集的这篇文章主要介绍iOS 高性能置灰方案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的覆盖效果。

最后

以上就是安静大米为你收集整理的iOS 高性能置灰方案iOS 高性能置灰方案的全部内容,希望文章能够帮你解决iOS 高性能置灰方案iOS 高性能置灰方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部