ios 实现白天夜景切换的方案

项目中要做白天夜景切换的功能,写了个扩展方便用,记录一下。不太完善,主要是提供一种思路。。。,欢迎大牛指点一下。

先附一个链接 

https://github.com/evolFe/DayNightDemo

效果图:

利用category封装 使用是这样的

实现思路:

1,色值变化,主要是view的backgroundcolor,label.texColor, button.titlecolor等等。。。

要是白夜切换肯定要像实现多语言一样 有个key 然后动态绑定到视图上

这里实现是通过一个枚举,这样写代码的时候比价方便

2 图片变换,包括imageView 还有button

key 的话 就是图片本身名字 ,要是夜景的话 图片名字后加_night 例如 mine_bg.png 夜景就是 mine_bg_night.png

然后写一个字符串的 扩展

 

第二步,Key 解决了以后 接下来就是绑定的问题

创建一个容器类 保存该对象的target 并为对象添加方法和参数, 参数是多参数的。

这里是添加方法参数的实现, 是保存到一个数组里面了, 因为有可能例如button 可能设置了背景色,和title 图片等,多个方法保存

 

这里是创建容器类的时候 添加通知。。。 并遍历存储的对象方法并执行。。 支持多参数

 

接下来是category 绑定的问题 使用runtime特性

基本就完事儿了

此处单例使用的比较安全的方式,哈哈哈,因为之前被人问住了,所以尽量标准化写。。。

只是添加了几个简单的功能,项目还在写,用到时候继续补充。。。

 

续:后来发现项目里使用的时候 定义枚举相当耗时耗力,并且名字不好区分,所以我又改良了一下

使用是这样子的

// z这里   
 self.view.dnBackGroundColor = ELMakeColorTuple(UIColorFromRGB(0xedeeef), UIColorFromRGB(0x3a3928));
    UIImageView * imageView = [[UIImageView alloc] init];
    imageView.imageKey = @"mine_bg";
    [imageView sizeToFit];
    [self.view addSubview:imageView];
    
    UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(20, CGRectGetMaxY(imageView.frame), 200, 30)];
    label.font = [UIFont systemFontOfSize:15];
    label.text = @"这是一个 UILabel";
//这里
    label.dnTextColor = ELMakeColorTuple(UIColorFromRGB(0x222222), UIColorFromRGB(0xdcc787));
    [self.view addSubview:label];
    
    
    UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
    // 这里
    button.dnBackGroundColor = ELMakeColorTuple(UIColorFromRGB(0x7c936e), UIColorFromRGB(0x4b4a38));
    [button setFrame:CGRectMake(CGRectGetWidth(self.view.frame)/2 - 30, CGRectGetHeight(self.view.frame) - 100, 60, 30)];
    [button setTitle:@"Change" forState:UIControlStateNormal];
//这里
    [button setDnTitleColor:ELMakeColorTuple([UIColor whiteColor], UIColorFromRGB(0xdcc787)) forState:UIControlStateNormal];
    button.titleLabel.font = [UIFont systemFontOfSize:15];
    [button addTarget:self action:@selector(dayNightChange:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];

使用的时候 dn是day-night的缩写,然后使用方法ELMakeColorTuple创建一个数组@[dayColor, nightColor];

typedef NSArray * ELColorTuple;
ELColorTuple ELMakeColorTuple(UIColor * dayColor, UIColor * nightColor);

需要改变夜景的时候 也无需使用我这单例了,直接调用

@interface ELDayNight : NSObject

/**
 公共API 设置白天夜景

 @param night 是否是夜景
 */
+ (void)setNight:(BOOL)night;

这个API可以直接调用,[ELDayNight setNight:YES/NO]; //这里没有本地化记录状态,因为我自己的项目里已经实现了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值