概述
iOS 高性能置灰方案
全局动态置灰,很多App都会在特殊节日比如清明或者其他哀悼日使用哀悼置灰。
对于置灰操作,如果是每次都更新版本,肯定就来不及,一般处理方式为后台设置按钮开关,处理对应日子开启置灰操作。
另外还有一些特殊的业务要求,比如首页页面置灰,而其他页面不置灰。本文将详细探讨实现和配置的细节,力求提供完整方案。
全局置灰实现:
思路: 给视图加上饱和度为0的滤镜。即 window 的 layer 上设置 filters。
- 生成CAFilter 颜色饱和度滤镜
CAFilter *filter = [CAFilter filterWithName:colorSaturate];
- 设置饱和度为0
[filter inputAmount:0];
- 赋值给 window (此处可以替换为keywindow)
[NMIoc_App appDelegate].window.layer.filters = @[filter];
部分页面置灰实现:
- 在App启动时通过配置中心获取执行黑/白名单模式,以及页面黑名单和页面白名单
- Hook
viewWillAppear
和viewDidDisappear
,判断是否处于命中页面 viewWillAppear
设置 window 的滤镜viewDidDisappear
移除 window 滤镜
不把饱和度滤镜加 window 上的话,可能会导致首屏
tabbar
等元素是彩色的。
实现的细节:
- App前后台切换,需要更新滤镜状态
- 配置变更时更新配置
配置数据样例
缺省配置
[
{
"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 端页面
- 大部分分屏页面都没有
viewWillAppear
和viewDidDisappear
事件,需要结合监听kNavigationPageChangedNotification
通知来获取页面变动事件。 - 需要额外 Hook
View
的生命周期。在通知产生后核对顶部视图的状态,如果命中置灰逻辑,则将VC对应的View
记录下来,在HookView
的生命周期时对记录的View
进行置灰处理。 - 分屏页面的出现导致无法使用
windows
滤镜,会污染被部分展示的白名单页面。所以只能设置VC
对应view
的滤镜。
广告页的异常情况
在*音乐iPhone端中,广告视图是另外创建的window
,需要覆盖广告window
的话,还需要Hook UIWindow
makeKeyAndVisible
来达到对新展示的window
的覆盖效果。
最后
以上就是安静大米为你收集整理的iOS 高性能置灰方案iOS 高性能置灰方案的全部内容,希望文章能够帮你解决iOS 高性能置灰方案iOS 高性能置灰方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复