首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为iphone应用程序创建多个主题/外观?

如何为iphone应用程序创建多个主题/外观?
EN

Stack Overflow用户
提问于 2018-04-17 02:03:44
回答 1查看 0关注 0票数 0

我有一个iPhone应用程序通过了应用程序商店批准。现在我想为我的应用创建不同的主题。有人可以帮助我吗?与信息/链接/步骤如何为我的应用程序创建主题?

我想创建一个男孩的金属主题和女孩的粉红色主题。我的意思是,整个应用程序(功能和功能)将保持不变,但取决于用户是谁(男孩或女孩),他/她可以选择他们希望看到的主题。当主题改变时,只有图像/背景/音乐会根据应用主题而改变。

EN

回答 1

Stack Overflow用户

发布于 2018-04-17 11:27:21

非常困难的,因为应用程序没有相当于css样式表。

首先,你需要计算出你想要皮肤的哪些部分,以及何时允许用户交换皮肤。

我假设你想要改变图像和字体颜色,并且如果用户必须重新启动应用程序来改变皮肤(这会使事情变得更简单),那就没问题了。

创建一个包含所有可换肤图像和颜色的plist。plist将是一个带有明智的图像和颜色的主题中性键名称的词典(例如,没有称为“红色”的颜色,称之为“primaryHeadingColor”)。图像将是文件名,颜色可以是十六进制字符串,例如红色的FF0000。

每个主题都会有一个plist。

创建一个名为ThemeManager的新类,并通过添加以下方法使其成为单例:

代码语言:javascript
复制
+ (ThemeManager *)sharedManager
{
    static ThemeManager *sharedManager = nil;
    if (sharedManager == nil)
    {
        sharedManager = [[ThemeManager alloc] init];
    }
    return sharedManager;
}

ThemeManager类将有一个名为“styles”的NSDictionary属性,并且在init方法中,将像下面这样将主题加载到样式字典中:

代码语言:javascript
复制
- (id)init
{
    if ((self = [super init]))
    {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSString *themeName = [defaults objectForKey:@"theme"] ?: @"default";

        NSString *path = [[NSBundle mainBundle] pathForResource:themeName ofType:@"plist"];
        self.styles = [NSDictionary dictionaryWithContentsOfFile:path];
    }
    return self;
}

(注意:有些人不喜欢在init方法中做很多工作,我从来没有发现它是一个问题,但如果你愿意,可以创建一个单独的方法来加载主题字典并从应用程序中调用它设置代码)。

请注意,我是如何从用户默认值中获取主题plist的名称的。这意味着用户可以在首选项中选择一个主题并保存,并且该应用将在下次启动时加载该主题。如果没有选择主题,我已经输入了一个默认的主题名称,所以请确保有一个default.plist主题文件(或者将代码中的@“default”更改为默认主题plist实际调用的任何内容)。

现在你已经加载了你的主题,你需要使用它; 我假设你的应用程序有各种图像和文本标签。如果你正在加载代码,那么这部分很容易。

现在通常你会加载一个图像说:

代码语言:javascript
复制
UIImage *image = [UIImage imageNamed:@"myImage.png"];

但是如果你想让这个图像成为可编辑的,你现在需要通过说明加载它

代码语言:javascript
复制
NSDictionary *styles = [ThemeManager sharedManager].styles;
NSString *imageName = [styles objectForKey:@"myImageKey"];
UIImage *image = [UIImage imageNamed:imageName];

这将在主题文件中查找匹配键“myImageKey”的主题图像并加载它。根据你已经加载的主题文件,你会得到不同的风格。

你将会使用这三行很多,所以你可能想把它们包装在一个函数中。一个好主意是在UIImage上创建一个类,该类声明一个名为类似的方法:

代码语言:javascript
复制
+ (UIImage *)themeImageNamed:(NSString *)key;

然后使用它,你可以将任何调用替换为[UIImage imageNamed:@“foo.png”]; 与[UIImage themeImageNamed:@“foo”]; foo现在是主题键而不是实际的图像名称。

好吧,这就是主题你的图片。要为标签颜色设定主题,假设目前正在设置标签颜色,请说出:

代码语言:javascript
复制
 someLabel.color = [UIColor redColor];

现在将替换为:

代码语言:javascript
复制
NSDictionary *styles = [ThemeManager sharedManager].styles;
NSString *labelColor = [styles objectForKey:@"myLabelColor"];
someLabel.color = [UIColor colorWithHexString:labelColor];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档