iOS使用颜色生成图片的暗黑适配
使用颜色生成图片的工具方法
UIImage* imageWithUIColor(UIColor* color) {CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);UIGraphicsBeginImageContext(rect.size);CGContextRef context = UIGraphicsGetCurrentContext();CGContextSetFillColorWithColor(context, [color CGColor]);CGContextFillRect(context, rect);UIImage *image = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return image;
}
这是设置button背景图片的代码
- (UIButton*)clickBtn {if (!_clickBtn) {_clickBtn = [UIButton buttonWithType:UIButtonTypeCustom];_clickBtn.backgroundColor = [UIColor clearColor];[_clickBtn addTarget:self action:@selector(clickHander:) forControlEvents:UIControlEventTouchUpInside];[_clickBtn setBackgroundImage:imageWithUIColor(CELLBACKCOLOR)forState:UIControlStateHighlighted];}return _clickBtn;
}
两种适配暗黑的方案:
1 因为我们生成图片用的是CGColor, 所以需要在系统改变模式的代理方法中手动重新设置
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{[super traitCollectionDidChange:previousTraitCollection];[self.clickBtn setBackgroundImage:imageWithUIColor(CELLBACKCOLOR)forState:UIControlStateHighlighted];
}
2 如果不想重新设置,就要使用image的imageAsset 属性调用 registerImage:(UIImage *)image withTraitCollection 接口 在不同的模式下注册不同的图片的方式实现适配了
- (UIImage *)imageWithLightImage:(UIImage *)lightImagedarkImage:(UIImage *)darkImage
{UIImage *image = nil;if (@available(iOS 13.0, *)) {image = [UIImage new];// lightUITraitCollection *lightTraitCollection = [UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleLight];[image.imageAsset registerImage:lightImage withTraitCollection:lightTraitCollection];// darkUITraitCollection *darkTraitCollection = [UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark];[image.imageAsset registerImage:darkImage withTraitCollection:darkTraitCollection];return image;}return nil;
}
调用的地方这样处理,先生成两个图片,一个暗黑的,一个亮模式的,并注册在同一个Image的不同模式下
UIImage *lightImg = imageWithUIColor([UIColor colorWithHexString:@"0xeceeee"]);UIImage *darkImg = imageWithUIColor([UIColor colorWithHexString:@"0x262626"]);UIImage *image = nil;if (@available(iOS 13.0, *)) {image = [self imageWithLightImage:lightImg darkImage:darkImg];} else {NSString *colorHex =[[TPUserDefault instance].isNightMode intValue] > 0?@"0x262626":@"0xeceeee";image = imageWithUIColor([UIColor colorWithHexString:colorHex]);}[_clickBtn setBackgroundImage:image
这样就生成了一个暗黑图片和一个亮图片,在切换模式的时候,就会展示不同的图片
iOS使用颜色生成图片的暗黑适配相关推荐
- iOS 根据颜色生成图片
// 根据颜色生成UIImage - (UIImage*)imageWithColor:(UIColor*)color{CGRect rect = CGRectMake(0.0f, 0.0f, 1.0 ...
- IOS开发基础之屏幕组件适配添加约束
IOS开发基础之屏幕组件适配添加约束 使得横屏显示也能自动适配 对齐我们可以按住Ctrl键,把控件连线至view中 如果我们不小心添加错了.可以清除掉约束 具体约束可以在右边查看 by johnson ...
- html5开发之ios屏幕适配,iOS开发屏幕尺寸以及屏幕适配等问题(转载内容)
原帖地址:http://blog.csdn.net/phunxm/article/details/42174937/ 仅供我个人收藏学习,原博主如不同意请联系qq651263878进行删除,在此表示感 ...
- iOS开发之#iPhone6与iPhone6Plus适配#Xcode6.0/Xcode6.1上传应用过程中一些变动以及#解决方案#
iOS开发之#iPhone6与iPhone6Plus适配#Xcode6.0/Xcode6.1上传应用过程中一些变动以及#解决方案# 参考文章: (1)iOS开发之#iPhone6与iPhone6Plu ...
- 58 同城 iOS 客户端 iOS11 及 iPhone X 适配实践
一.前言 前段时间 WWDC 大会上苹果推出了 iOS11 系统 和 iPhone X 新机型,相信各个 iOS 团队的开发者都已经在计划新系统和新机型的适配工作了.不得不说,新系统和新机型的发布确实 ...
- iOS 屏幕尺寸、分辨率、适配
1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS ...
- iOS 屏幕尺寸、分辨率、适配、UI规范
.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS 2 ...
- Android 暗黑适配方案
背景 现项目中涉及红色.金色主题,同时需要适配红色暗黑.金色暗黑,本地需要手动维护4套色值,并且切换主题时需要重新销毁创建页面,维护跟用户体验都不是很友好. 设计思路来源 通过调研,发现换肤的实现原理 ...
- iOS -- iOS11新特性,如何适配iOS11
前言 这几天抽空把WWDC的Session看了一些,总结了一些iOS11新的特性,可能对我们的App有影响,需要我们进行适配.本文作为一个总结. 本文内容包括:集成了搜索的大标题栏.横向选项卡栏.Ma ...
最新文章
- Oracle 11G RAC:生产环境下架构
- SD-WAN和MPLS有什么用途?
- GCC全过程详解+剖析生成的.o文件
- 【Tools】StarUML2.8工具安装和破解
- 使用V8和node轻松profile分析nodejs应用程序
- 开源日志审计系统_一文掌握mysql数据库审计特点、实现方案及审计插件部署教程...
- java内核_测量时间:从Java到内核再到
- 转载]SA权限九种上传方法
- [转]JSon数据解析的四种方式
- C语言(CED)判断一个数是否是2的整数幂的简便方法!
- vue 修改div宽度_Vue 组件通信方式及其应用场景总结(1.5W字)
- mysql point WKB格式 php 解析 unpack
- VLD(Visual LeakDetector)内存泄露工具的使用
- golang学习之远程木马demo编写
- 数字双极点低通滤波器-二阶巴特沃斯滤波器
- 单细胞测序对于医学的意义
- 灯的开关状态 :有 N 个灯放在一排,从 1 到 N 依次顺序编号。有 N 个人也从 	1 到 N 依次编号。1 号将灯 全部关闭,2 将凡是 2 的倍数的灯 	打开;3 号将凡是 3 的倍数的灯作相
- 【网络安全】如何使用OpenSSL工具生成根证书与应用证书
- c语言 proteus 延迟2秒_几种延时的汇编执行代码对比与总结
- HTML 表格与表单 个人简历
热门文章
- iOS11降级到iOS10.3.3/10.3.2教程
- vue使用高德地图的搜索地址和拖拽选址
- python列表两两相减_笨办法学python(二)数值、变量以及运算
- android广播教程,Android学习笔记(广播机制)
- 9大吸金手游公司盘点 2013年营收破1亿美元
- 高中计算机手抄报图片大全集,高中生手抄报版面图大全
- 银河土星_不要购买三星银河笔记20
- 我学会了用计算机作文,我学会了电脑作文
- 安卓开发招聘!免费Android高级工程师学习资源,2年以上经验必看
- 高代第2章第1节n元排列:奇排列、偶排列的判断