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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

r语言 柱状图加星号_R语言绘制带有显著性字母标记的柱状图

Tao Wen 引子 方程分析的包目前正在重构,大家耐心等待,这是一年前我开始做这个包的时候的细节,从这里大家就可以学会如何做差异分析和可视化。 library(tidyverse) library(agricolae) library(car) library(reshape2) 需求 在很多时候,我们的需求其实很简单,做一个数据描…

php mysql 字段不为空_Thinkphp中查询复杂sql查询表达式,如何表达MYSQL中的某字段不为空is not null?...

Thinkphp中查询复杂sql查询表达式,如何表达MYSQL中的某字段不为空is not null?先上两种实现方式的实例:$querys["house_type_image"] array(NEQ,NULL); //判断字段不为空//$querys["house_type_image"] array(exp,is not null);/…

mysql mediumint(8)_mysql中bigint、int、mediumint、smallint与tinyint的取值范围

https://blog.csdn.net/github_39110707/article/details/74277381mysql数据库设计,其中对性能优化,字段类型很重要,下面对bigint、int、mediumint、smallint与tinyint的取值范围作简单总结,以备查看。1、bigint从 -2^63 (-922337…

mysql 嵌套函数_MySQL 聚合函数嵌套使用

MySQL 中聚合函数不可用直接嵌套使用,比如: MAX(AVG(sal))、MAX(COUNT(*))...解决思路:可以使用嵌套子查询,先分组取出被嵌套的聚合函数结果,再使用外聚合函数嵌套。(应该有更合适方式,待补充)示例&#xf…

mysql配置文件完全_MySQL配置文件my.cnf详解

以下是Mysql数据库服务器配置文件/etc/my.cnf的详细配置。应用场合是InnoDB引擎,4核CPU, 32位SUSE。[client]port 3306socket /tmp/mysql.sock# The MySQL server[mysqld]bind-address 192.168.0.11port 3306socket /tmp/mysql.sock##设置表的默认类型。…

mysql联合索引和单索引_mysql联合索引跟单列索引的区别

为了提高数据库效率,建索引是家常便饭;那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下。一、联合索引测试注&am…

卸载mysql 安装mariadb_centos7卸载mariadb并安装mysql8

一、安装前清理工作;清理原有的mysql数据库;rpm -qa|grep mysql根据结果删除软件yum remove xxxx2.删除mysql的配置文件find / -name mysqlrm –rf xxxx删除MariaDB的文件,rpm -pa|grep mariadbrpm -e xxxx强制删除rpm -e --nodeps xxxx至此就…

beego原生mysql查询_Beego基础学习(五)Golang原生sql操作Mysql数据库增删改查(基于Beego下测试)...

//控制器文件package controllersimport ("fmt""github.com/astaxie/beego""mypro/models""strings")type GetMovieInfoControllerstruct{beego.Controller}type MovieInfostruct{Id int64Movie_namestringMovie_directorstring}type …

mysql权限分立_MySQL设置3权分立

网站后台中权限模块非常普遍,所以掌握3权分立十分必要3权分立表有 用户表,角色表,权限表,对应关系如下用户有着“读者”,“作者”和“管理员”角色,角色有不同权限,如发布文章,审核…

fedora 27 mysql_无法在Fedora27上的Python2 virtualenv中使用mysqldb

这是一个w解决方法:添加unsigned int reconnect;在文件:/usr/include/mysql/mysql.h的第344行中typedef struct st_mysql {NET net; /* Communication parameters */void *unused_0;char *host,*user,*passwd,*unix_socket,*server_version,*host_info;c…

python中变量名后的逗号_Python中逗号的三种作用实例分析

本文实例讲述了Python中逗号的三种作用。分享给大家供大家参考。具体分析如下:最近研究python 遇到个逗号的问题 一直没弄明白 今天总算搞清楚了1.逗号在参数传递中的使用:这种情况不多说 没有什么不解的地方 就是形参或者实参传递的时候参数之间的逗号…

python跑一亿次循环_python爬虫爬取微博评论

原标题:python爬虫爬取微博评论python爬虫是程序员们一定会掌握的知识,练习python爬虫时,很多人会选择爬取微博练手。python爬虫微博根据微博存在于不同媒介上,所爬取的难度有差异,无论是python新入手的小白&#xff0…

mysql 二进制 存储格式化_解析MYSQL BINLOG 二进制格式(2)--FORMAT_DESCRIPTION_EVENT

原创:转载请说明出处谢谢!上接http://blog.itpub.net/7728585/viewspace-2133188/参考源:1、源码log_event.h log_event.cc2、internals-en.epubclass:Format_description_log_eventevent:FORMAT_DESCRIPTION_EVENTmys…

java mysql访问类_java 访问数据库公共类

package com.javaweb.mvc;import java.util.ArrayList;import java.util.List;import java.sql.*;/*** author 数据访问类**/public classServiceStationDao {/*** return 查询所有服务站**/public ListgetAll() {List list new ArrayList();Connection conn null;PreparedSta…

Nature:原来记忆是这样形成的!科学家发现记忆形成新机制

来源:神经科技概要:神经元之间通过突触传递信息,大约50年前科学家们发现了突触的可塑性,科学界也一直认为突触是记忆和学习过程中的一个重要的功能组成部分。来自法国的研究人员最近发现了突触储存信息和控制信息储存过程的一个新…

hive mysql远程模式_Hive远程模式启动

1、配置远程服务器MYSQL,并保证远程可以访问2、$HIVE_HOME/conf/hive-site.xml 关键配置如下hive.metastore.localfalsecontrols whether to connect to remove metastore server or open a new metastore server in Hive Client JVMjavax.jdo.option.ConnectionURL…

腾讯 AI Lab副主任俞栋:过去两年基于深度学习的声学模型进展

来源:腾讯AI Lab概要:过去几年里,自动语音识别(ASR)已经取得了重大的进步 。这些进步让 ASR 系统越过了许多真实场景应用所需的门槛,催生出了 Google Now、微软小娜和亚马逊 Alexa 等服务。1. 引言过去几年…

python计算汉明距离_20190503-汉明距离

难度分类 简单 题目描述 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离 注意: 0 ≤ x, y < 231. 示例: 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应…

王劲首度解析景驰:我们是跑得最快的无人驾驶公司

来源&#xff1a;AI世代概要&#xff1a;9月14日&#xff0c;在景驰科技天使轮投资方之一华创资本组织的分享会上&#xff0c;王劲以景驰科技创始人兼首席执行官的身份&#xff0c;发表了主题为“无人驾驶的大国冲刺”的演讲。创业近半年后&#xff0c;王劲带着景驰最新的发展成…

mysql 5.7安装完密码是多少_关于mysql5.7.18的安装并修改初始密码的图文教程

这篇文章主要为大家详细介绍了Mysql5.7安装并修改初始密码的方法&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下Centos 安装MySQL可以参考之前写的一篇文章Centos7.3 安装Mysql5.7并修改初始密码windows安装mysql5.7有两种方式1、下载.msi安装文件直…