ios 主题切换 思路_iOS 使用 NSObject 的分类实现快速切换主题

PYTheme

An easy way to change theme through NSObject's category for iOS.

通过 NSObject 的分类实现使用简单的主题更换。

Features

轻量级

低耦合

自动管理内存

支持动态更换主题颜色

支持动态更换主题图片

支持 CocoaPods

Requirements

iOS 7.0 or later

Xcode 7.0 or later

Architecture

NSObject+PYThemeExtension

Renderings

PYThemeDemo.gif

Usage

使用 CocoaPods:

pod "PYTheme"

导入主头文件#import

手动导入:

将PYTheme文件夹中的所有文件拽入项目中

导入主头文件#import "NSObject+PYThemeExtension.h"

具体使用

设置主题色

1. 添加控件的属性 /方法到主题色池中

直接通过属性

// 按钮的背景色添加到主题色池中

[button py_addToThemeColorPool:@"backgroundColor"];

通过设置方法并且传入方法对应参数数组,参数中直接含有颜色参数

// 设置按钮选中时字体颜色添加到主题色池中

[button py_addToThemeColorPoolWithSelector:@selector(setTitleColor:forState:) objects:@[PYTHEME_THEME_COLOR, @(UIControlStateSelected)]];

当方法参数中没有直接包含颜色参数,而是经过包装(如使用 NSDictionary 包装)

// 设置 tabBar 选中时字体颜色添加到主题色池中

NSMutableDictionary *attrSel = [NSMutableDictionary dictionary];

attrSel[NSForegroundColorAttributeName] = PYTHEME_THEME_COLOR;

[childController.tabBarItem py_addToThemeColorPoolWithSelector:@selector(setTitleTextAttributes:forState:) objects:@[attrSel, @(UIControlStateSelected)]];

2. 设置主题色

// 设置主题色为红色

[self py_setThemeColor:[UIColor redColor]];

设置主题图片与配色

1. 添加相关控件对象到主题图片池中

// 添加 tabBarItem 到主题图片池中

[tabBarItem py_addToThemeImagePool];

2. 根据需求设置控件的相关属性

// 重新加载主题图片,并设置主题色为红色

[self py_reloadThemeImageWithThemeColor:[UIColor redColor] setting:^(const NSArray *objects) {

// 根据控件类型完成相关设置

}

使用注意

对象不能是UIAppearance,否则将无法添加到主题池中

如下:将导致 navigationBar 无法添加到主题色池中

// 获取全局 navBar

UINavigationBar *navBar = [UINavigationBar appearance];

// 添加背景色到主题色池中

[navBar py_addToThemeColorPool:@"barTintColor"];

使用py_addToThemeColorPoolWithSelector:objects:设置参数数组时注意:

方法参数必须按顺序一一对应,如果涉及到的主题色设置使用 PYTHEME_THEME_COLOR 宏定义代替

如果数组中某个参数为 nil ,需包装为 [NSNull null] 对象再添加到数组中

如果要使图片随着主题色变化而渲染成主题颜色,需要设置RenderingMode为: UIImageRenderingModeAlwaysTemplate

期待

如果您在使用过程中有任何问题,欢迎issue me! 很乐意为您解答任何相关问题!

与其给我点 star ,不如向我狠狠地抛来一个 BUG !

如果想要参与这个项目的维护或者有好的功能,欢迎 pull request !

如果您想要更多的接口来自定义或者建议 /意见,欢迎issue me!我会根据大家的需求提供更多的接口!

如果您在使用中觉得略有不适,欢迎联系我 QQ:499491531 ,希望一起完善此项目,让它变成更强大,能够满足大多数用户的需求!

Licenses

All source code is licensed under the MIT License.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值