android ios 夜间模式切换,iOS夜间模式实现方案

项目中加了夜间模式的功能,现将我的实现方案记录下:

夜间模式无非是图片、色值变了。那么在赋值的时候我们就要设置两套图片和色值。所有设计稿和切图都需要两套。

如何设置两套图片

大思路就是使用NSUserDefault在本地存储一个标识,切换日间/夜间,比如夜间时我存储的是"night"字符串。

但是我们不可能在每次设置图片时都取出此标识,所有需要写一个UIImage的category。代码如下:

+ (UIImage *)kg_imageNamed:(NSString *)name {

NSString *styleStr = [[NSUserDefaults standardUserDefaults] stringForKey:KGSkinStyle];

if ([styleStr isEqualToString:@"night"]) {

return [UIImage imageNamed:[name stringByAppendingString:@"N"]];

}

return [UIImage imageNamed:name];

}

通过代码可以看出,夜间模式下取出的图片是后缀带‘N’的,所有对图片命名时有技巧。例如我在Demo中引用的图片正常模式下命名为mine_picture,夜间模式下需命名为mine_pictureN,后缀加N,后缀自定义,自己高兴就好。

这样,在项目中需要设置夜间模式图片的地方使用自己的[UIImage kg_imageNamed:]方法,不需要夜间模式的地方继续使用系统的[UIImage imageNamed:]方法。

如果设置两套色值

在大思路上图片和色值是一样的,不同的是,色值没有命名技巧可言。

同样需要写一个UIColor的category。只设置16进制色值。

+ (UIColor *)kg_colorWithNormalHexColor:(NSInteger)normalHexColor nightHexColor:(NSInteger)nightHexColor {

NSString *styleStr = [[NSUserDefaults standardUserDefaults] objectForKey:KGSkinStyle];

if ([styleStr isEqualToString:@"night"]) {

return [UIColor kg_colorWithHex:nightHexColor];

}

return [UIColor kg_colorWithHex:normalHexColor];

}

+ (UIColor *)kg_colorWithHex:(NSInteger)hexColor {

return [UIColor colorWithRed:((hexColor & 0xFF0000) >> 16)/255.0 green:((hexColor & 0x00FF00) >> 8) /255.0 blue:( hexColor & 0x0000FF)/255.0 alpha:1.0];

}

只要给一个日间模式和夜间模式的色值就可以了。在设置夜间颜色的地方使用[UIColoe kg_colorWithNormalHexColor: nightHexColor:],不需要夜间模式的地方使用[UIColor kg_colorWithHex]。

至此,方案就完成了。但在项目中,设置夜间模式还有很多需要注意的地方。比如:如何广播到全局、各页面继承关系、透明遮罩层、导航栏变化、tabbar个元素变化、状态栏改变等等。

个人思路,不一定是最简单的,大家有不明白或项目中遇到的问题,可留言谈论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值