AWLThemeManager 是 iOS 的轻量级主题管理器。
在实际工作中,主题之间可能有些许差异。在传统方式中,您需要每个主题中保持相同的内容。如果您想更改值,您需要找到所有地方并更改它。从现在开始,如果您想那样做,您可以由于 AWLThemeManager 的继承而感到释放。您只需修改基本主题,然后从基本主题继承的所有主题将更改为新值。
使用 Cocoapods
pod 'AWLThemeManager'
传统方式 只需将头文件和源文件添加到您的项目中
作为主题包首选使用包,尽管也可以使用文件夹。
包文件的结构如下图所示
defaults.plist 是必需的。将其他文件添加到包的根目录。
defaults.plist 用于设置主题的属性,包括颜色、字体等。
在 defaults.plist 中使用的默认密钥
AWL_THEME_NAME
此密钥是必需的。它是主题的名称,用于标识主题,必须是唯一的。
AWL_BASE_THEME
备选方案。如果您想将主题用作基本主题,则应添加此密钥。将基本主题的名称设置为该密钥。
颜色格式是:
它将通过以下方法返回颜色:
[UIColor colorWithRed:[array[0] doubleValue]/255
green:[array[1] doubleValue]/255
blue:[array[2] doubleValue]/255
alpha:[array[3] doubleValue]];
请确保您已将正确的值设置到颜色中。
支持白色色彩空间格式。颜色现在可以指定在白色色彩空间中(例如 0.4,1)。
支持图案图像颜色。颜色现在可以指定为格式为 "@[ImageName],[Optional Alpha]" 的图案图像(例如 @Foo", "@Foo,0.5)。
支持十六进制格式。请使用以下十六进制格式指定颜色
#RGB
#ARGB
#RRGGBB
#AARRGGBB
支持引用。如果您想将相同的值设置为不同的颜色键,可以将一个颜色的键设置为另一个颜色,然后 AWLThemeManager 将找到该颜色的实际值。
通过引用修改 alpha 值。例如,如果引用了颜色 "COLOR1" = "255,0,0,1","COLOR2" = "COLOR1",您现在可以追加 ":[alpha]" 来修改其 alpha 值,例如 "COLOR2" = "COLOR1:0.2" 等同于 "255,0,0,0.2"。
字体的格式为
第一个是字体名称,第二个是字体大小。将使用以下方法返回使用的字体
[UIFont fontWithName:fontName size:fontSize]
如果您想使用系统字体,则应忽略第一个值,如下所示
,14 //systemFontOfSize
bold,14 //boldSystemFontOfSize
italic,14 //italicSystemFontOfSize
支持引用。与颜色相同。
有两种方法可以将图像添加到主题包中
对于第二种方法,包需要在项目中 като реален цел OS X bundle с约定的_Target SDK iOS и валиден info.plist за Xcodeこんных включает compile .xcassets 文件daki. 请参阅项目中的 Assets(bundle)。示范项目。
支持引用。与颜色相同。如果默认.plist中找不到图像名,我们使用键作为图像名。
现在您可以在主题中拥有“foo”->“bar”,同时在所有包中搜索类型为“dat”的“foo”,除了回退到主包。如果找不到键“foo”,则假定“foo”是文件名。
您可以将任何内容添加到 defaults.plist。只需使用 objectiveForKey:
获取值。
将包的绝对路径添加到 AWLThemeManager 对象中,然后设置您想要的当前主题。例如
NSString *bundlePath1 = [[NSBundle mainBundle] pathForResource:@"BaseSample" ofType:@"bundle"];
NSString *bundlePath2 = [[NSBundle mainBundle] pathForResource:@"Sample" ofType:@"bundle"];
AWLThemeManager *mgr = [[AWLThemeManager alloc] init];
[mgr addTheme:bundlePath1];
mgr.currentTheme = [mgr addTheme:bundlePath2];
然后您可以使用相同的 AWLThemeManager 对象如下访问资源。
UIImage *img = [mgr imageNamed:@"icon"];
titleLabel.textColor = [mgr colorForKey:@"Content_Text_Color"];
titleLabel.font = [mgr fontForKey:@"Content_Font"];