我需要创建一个应该有多个主题的应用程序。这意味着对于每个主题,我们使用不同的图像集。应该更改主题而不重新加载所有视图控制器(只需更改图像)。主题可以通过In app购买添加,因此不应该硬编码。
我还想使用Interface Builder来创建我的视图。
问题:最好的方法是什么?
答案 0 :(得分:0)
我建议我在答案中详述的方法:
Is there a simple way to set a default font for the whole app?
您可以在应用中使用视图控制器,请求ThemeApplicator类在必要时设置样式。它会通过设置正确的背景图像来实现这一点。您仍然可以使用IB来构建您的视图;只是不要在IB中设置背景(或设置默认背景)。关键是您以后以编程方式更新背景。
答案 1 :(得分:0)
在MyAppNotificationUIThemeChanged上,每个控制器都必须在其主视图中为每个UIImageView检索和设置图像。我可以想到两种方法:
1)蛮力。像这样:
self.imageView1.image = [self currentThemeImage:@"someController_image1.png"];
self.imageView2.image = [self currentThemeImage:@"someController_image2.png"];
2)自动化方法。
NSArray *imageViews = [self fetchAllImageViews];
foreach (UIImageView *iv in imageViews) {
iv.image = [self currentThemeImageForTag:iv.tag];
}
其中currentThemeImageForTag:是这样的:
- (UIImage*)currentUIThemeImageForTag:(NSUInteger)imageTag {
return [self currentUIThemeImage:[NSString stringWithFormat:@"%@_%u.png", NSStringFromClass([self class]), imageTag]];
}
我还建议使用NSBundle打包主题图像和其他资源。
<强>更新强>
我选择NSBundle只是因为它有很酷的方法,比如pathForResource:ofType:等等,还有支持本地化的能力。您可以使用XCode创建包(只需在Mac OS X下查看 - >新项目对话框中的Framework&amp; Library部分)。把你的图像放在参考资料中,删除任何框架(无论如何都没有代码),构建就是这样。在您的应用加载包中[NSBundle bundleWithPath:pathToDownloadedBundle]
。请注意:我不知道Apple是否允许下载捆绑包并在应用程序中使用它的内容。我能保证的是它可以在模拟器上运行。
答案 2 :(得分:0)
查看Three20项目,尤其是Three20Style。