背景:
护眼模式(大多数情况下,即夜间模式),通常是降低屏幕亮度和降低屏幕蓝光,以达到护眼功能
一、方案:
A.app的UI设计分为护眼模式和非护眼模式,切换模式的时候其实是整体样式的刷新
A-非夜间模式.png
A-夜间模式.png
B.单纯降低屏幕的亮度、过滤蓝光
二、实现思路:
1.A方案:
通知(告知ViewController切换主题) + 单例或本地数据持久化(用以保存切换后的主题)
具体参照文章:
http://www.jianshu.com/p/ffc39669b81e
2.B方案:
(1)直接更改屏幕亮度(由于Night Shift并没有开放API,过滤蓝光也没有开放API,所以首先想到是通过调用更改屏幕亮度的API):
UIScreen.main.brightness = brightness
问题:
更改屏幕亮度,是整部手机有效的,不仅仅是app内有效,但是在 AppDelegate.swift 文件的 applicationWillResignActive 方法中执行 UIScreen.main.brightness = brightness 并不会生效(很疑惑)。
所以放弃了直接更改屏幕亮度的方法
(2)直接更改app屏幕背景颜色:
//护眼模式
UIApplication.shared.keyWindow?.backgroundColor = UIColor.yellow
UIApplication.shared.keyWindow?.alpha = 0.6
//非护眼模式
UIApplication.shared.keyWindow?.backgroundColor = UIColor.white
UIApplication.shared.keyWindow?.alpha = 1
网友评论