Latest 1.0.2
Homepage https://github.com/mlibai/XZTheme
License MIT
Platforms ios 7.0, requires ARC
Frameworks UIKit
Authors

XZTheme 轻量级的 iOS 高性能主题管理库

CocoaPods
License
Platform

演示

Demo

安装

CocoaPods

  1. 将 cocoapods 更新至最新版本.
  2. 在 Podfile 中添加 pod 'XZTheme'
  3. 执行 pod installpod update
  4. 导入 <XZTheme/XZTheme.h>

手动安装

  1. 下载 XZTheme 文件夹内的所有内容。
  2. 将 XZTheme 内的源文件添加(拖放)到你的工程。
  3. 导入 XZTheme.h

特性

  • 轻,所有代码总共不到 1000 行,目前仅 800 行。
  • 快,使用 UIAppearance 机制,将应用主题的操作分散到视图显示时执行。
  • 简,主题支持只需实现一个方法。
  • 支持通过文件配置主题,更容易集中管理。
  • 方便快捷的拓展方法,告别繁琐的重复代码。
  • 几乎可以完全与主业务逻辑独立,降低维护成本。

使用方式

1. 为了与主业务逻辑分离,建议将主题设置放在 Category 中

@interface UIView (XZThemeSupporting) <XZThemeSupporting>

// 为了简化代码,可以自定义一个通用的方法
- (void)xz_updateAppearanceWithTheme:(XZTheme *)theme;

@end

@implementation UIView (XZThemeSupporting)

- (void)xz_updateAppearanceWithThemeName:(NSString *)themeName {
    XZTheme *theme = [self xz_currentTheme];
    if (theme != nil) {
        [self xz_updateAppearanceWithTheme:theme];
    }
}

// 做一些通用的操作
- (void)xz_updateAppearanceWithTheme:(XZTheme *)theme {
    self.backgroundColor = ([theme backgroundColor] ?: self.backgroundColor);
}

@end

2. 给控件设置主题ID

// 1, 一般情况下,同一视图,在同一主题下,外观是一样的,在 xz_themeIdentifier 方法中返回固定值就可以了。
- (NSString *)xz_themeIdentifier {
    return @"default tableView"; // 支持多 id ,用空格分隔
}

// 2, 对于相同主题下,同一控件需要展示不同外观样式,则需要为控件指定特定 themeIdentifier 。
UIView *view1 = [[UIView alloc] init];
UIView *view2 = [[UIView alloc] init];

view1.xz_themeIdentifier = @"id1";
view2.xz_themeIdentifier = @"id2";

// 3,这对第二种情况,无法做到主题与业务逻辑分离,可使用其它方法曲线实现,比如对于 XZView 在 App 中有三种外观形式。

// 3.1 .h 文件中
typedef NS_ENUM(NSInteger, XZViewAppearanceType) {
    XZViewAppearanceType0,
    XZViewAppearanceType1,
    XZViewAppearanceType2
};

@interface XZView : UIView

@property (nonatomic) XZViewAppearanceType appearanceType;

@end

// 3.2 Category 中
@implementation XZView (XZThemeSupporting)

- (NSString *)xz_themeIdentifier {
    switch (self.appearanceType) {
        case XZViewAppearanceType0:
            return @"id1";
        case XZViewAppearanceType1:
            return @"id2";
        case XZViewAppearanceType2:
            return @"id3";
    }
    return nil;
}

@end

// 3.3 甚至,无需自定义属性,使用 UIView.tag 属性,但是维护起来可能稍微有点不便。
view1.tag = XZViewAppearanceType0;
view2.tag = XZViewAppearanceType2;

3. 实现 -xz_updateAppearanceWithThemeName: 方法

// 1,读取主题配置,通过 +[XZTheme cachedThemeForCurrentWithIdentifier:] 方法得到 XZTheme 对象。
XZTheme *theme = [self xz_currentTheme];

// 2,XZTheme 对象,提供了一系列方便的方法,获取控件所需的主题配置。
self.contentView.backgroundColor = [theme backgroundColor];
self.textLabel.textColor = [theme textColor];

// 3,如果您没有创建主题配置文件,直接通过判断 themeName 来直接给控件配置属性。
if ([themeName isEqualToString:kXZThemeNameDay]) {
    self.backgroundColor = [UIColor redColor];
    self.barStyle = UIBarStyleDefault;
} else {
    self.backgroundColor = [UIColor grayColor];
    self.barStyle = UIBarStyleBlack;
}

// 4,您也可以获取其它的主题,来设置当前视图的外观
theme = [XZTheme cachedThemeWithName:kXZThemeNameNight identifier:@"aThemeID"];
self.backgroundColor = [theme backgroundColor];
self.titleLabel.textColor = [theme textColor]; // titleLabel 为子视图

// 5,还可以在配置文件中使用自定义属性,然后这样获取
self.titleLabel.shadowColor = [theme colorForAttribute:@".shadowColor"];

主题配置文件格式

1. JSON 格式

{
    "theme-name1": {
        "theme-id1": {
            ".backgroundColor": "0xFFFFFFFF"
        },
        "theme-id2": {
            ".backgroundImage": {
                ":normal": "img_nor",
                ":selected": "img_sel"
            }
        },
        "theme-id3": {
            ":normal": {
                ".image": "img_nor",
                ".color": "0xFF0000FF"
            },
            ":selected": {
                ".image": "img_sel",
                ".color": "0x00FF00FF"
            }
        },
        "theme-id4": {
            ".textFont": "17.0"
        },
        "theme-id5": {
            ".textFont": {
                "name": "宋体",
                "size": "17.0"
            }
        }
    }
}

2. plist 格式

// 与 json 格式相同结构的字典

系统要求

==============
该库最低支持 iOS 7.0Xcode 7.0

许可证

==============
XZTheme 使用 MIT 许可证,详情见 LICENSE 文件。

The CocoaPods Master Repo

This repository contains the public CocoaPods specifications.

Links

License

These specifications and CocoaPods are available under the MIT license.

a66cc6a2d26381016957c6cb59e31cab1ba93f89

Latest podspec

{
    "name": "XZTheme",
    "version": "1.0.2",
    "summary": "iOS App Theme Supporting Library.",
    "description": "XZTheme u662fu9488u5bf9 iOS u5e73u53f0u8bbeu8ba1u4e00u6b3eu9ad8u6548u4e3bu9898u652fu6301u5e93uff0cu5b9eu73b0u4e86u4e3bu9898u652fu6301u903bu8f91u4e0eu4e1au52a1u903bu8f91u7684u5206u79bbuff0cu964du4f4eu7ef4u62a4u6210u672cu3002nu5b83u7684u6838u5fc3u673au5236u662f UIAppearance u534fu8baeuff0cu51e0u4e4eu5bf9u6027u80fdu4e0du4f1au9020u6210u5f71u54cdu3002",
    "homepage": "https://github.com/mlibai/XZTheme",
    "license": "MIT",
    "authors": {
        "mlibai": "[email protected]"
    },
    "platforms": {
        "ios": "7.0"
    },
    "source": {
        "git": "https://github.com/mlibai/XZTheme.git",
        "tag": "1.0.2"
    },
    "source_files": [
        "XZTheme",
        "XZTheme/*.{h,m}"
    ],
    "public_header_files": "XZTheme/*.h",
    "frameworks": "UIKit",
    "requires_arc": true
}

Pin It on Pinterest

Share This