使用颜色生成图片的工具方法

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使用颜色生成图片的暗黑适配相关推荐

  1. iOS 根据颜色生成图片

    // 根据颜色生成UIImage - (UIImage*)imageWithColor:(UIColor*)color{CGRect rect = CGRectMake(0.0f, 0.0f, 1.0 ...

  2. IOS开发基础之屏幕组件适配添加约束

    IOS开发基础之屏幕组件适配添加约束 使得横屏显示也能自动适配 对齐我们可以按住Ctrl键,把控件连线至view中 如果我们不小心添加错了.可以清除掉约束 具体约束可以在右边查看 by johnson ...

  3. html5开发之ios屏幕适配,iOS开发屏幕尺寸以及屏幕适配等问题(转载内容)

    原帖地址:http://blog.csdn.net/phunxm/article/details/42174937/ 仅供我个人收藏学习,原博主如不同意请联系qq651263878进行删除,在此表示感 ...

  4. iOS开发之#iPhone6与iPhone6Plus适配#Xcode6.0/Xcode6.1上传应用过程中一些变动以及#解决方案#

    iOS开发之#iPhone6与iPhone6Plus适配#Xcode6.0/Xcode6.1上传应用过程中一些变动以及#解决方案# 参考文章: (1)iOS开发之#iPhone6与iPhone6Plu ...

  5. 58 同城 iOS 客户端 iOS11 及 iPhone X 适配实践

    一.前言 前段时间 WWDC 大会上苹果推出了 iOS11 系统 和 iPhone X 新机型,相信各个 iOS 团队的开发者都已经在计划新系统和新机型的适配工作了.不得不说,新系统和新机型的发布确实 ...

  6. iOS 屏幕尺寸、分辨率、适配

    1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS ...

  7. iOS 屏幕尺寸、分辨率、适配、UI规范

    .iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS 2 ...

  8. Android 暗黑适配方案

    背景 现项目中涉及红色.金色主题,同时需要适配红色暗黑.金色暗黑,本地需要手动维护4套色值,并且切换主题时需要重新销毁创建页面,维护跟用户体验都不是很友好. 设计思路来源 通过调研,发现换肤的实现原理 ...

  9. iOS -- iOS11新特性,如何适配iOS11

    前言 这几天抽空把WWDC的Session看了一些,总结了一些iOS11新的特性,可能对我们的App有影响,需要我们进行适配.本文作为一个总结. 本文内容包括:集成了搜索的大标题栏.横向选项卡栏.Ma ...

最新文章

  1. Oracle 11G RAC:生产环境下架构
  2. SD-WAN和MPLS有什么用途?
  3. GCC全过程详解+剖析生成的.o文件
  4. 【Tools】StarUML2.8工具安装和破解
  5. 使用V8和node轻松profile分析nodejs应用程序
  6. 开源日志审计系统_一文掌握mysql数据库审计特点、实现方案及审计插件部署教程...
  7. java内核_测量时间:从Java到内核再到
  8. 转载]SA权限九种上传方法
  9. [转]JSon数据解析的四种方式
  10. C语言(CED)判断一个数是否是2的整数幂的简便方法!
  11. vue 修改div宽度_Vue 组件通信方式及其应用场景总结(1.5W字)
  12. mysql point WKB格式 php 解析 unpack
  13. VLD(Visual LeakDetector)内存泄露工具的使用
  14. golang学习之远程木马demo编写
  15. 数字双极点低通滤波器-二阶巴特沃斯滤波器
  16. 单细胞测序对于医学的意义
  17. 灯的开关状态 :有 N 个灯放在一排,从 1 到 N 依次顺序编号。有 N 个人也从 1 到 N 依次编号。1 号将灯 全部关闭,2 将凡是 2 的倍数的灯 打开;3 号将凡是 3 的倍数的灯作相
  18. 【网络安全】如何使用OpenSSL工具生成根证书与应用证书
  19. c语言 proteus 延迟2秒_几种延时的汇编执行代码对比与总结
  20. HTML 表格与表单 个人简历

热门文章

  1. iOS11降级到iOS10.3.3/10.3.2教程
  2. vue使用高德地图的搜索地址和拖拽选址
  3. python列表两两相减_笨办法学python(二)数值、变量以及运算
  4. android广播教程,Android学习笔记(广播机制)
  5. 9大吸金手游公司盘点 2013年营收破1亿美元
  6. 高中计算机手抄报图片大全集,高中生手抄报版面图大全
  7. 银河土星_不要购买三星银河笔记20
  8. 我学会了用计算机作文,我学会了电脑作文
  9. 安卓开发招聘!免费Android高级工程师学习资源,2年以上经验必看
  10. 高代第2章第1节n元排列:奇排列、偶排列的判断