2012-01-11 60 views
6

我知道类似的问题已经被问到,但没有得到满意的答案。所以我再次加入这个问题。如何创建一个基于主题的应用程序?

根据iphone应用程序中的用户选择,我需要改变应用程序的外观和感觉(彩色字体背景图像等)。是否有任何标准的方法来实现这一目标?

一个可能的解决方案可以是复制每个主题的xib文件并根据选择加载它。这是一个好方法吗?主要是因为连接xib副本的出口和动作听起来是一项多余的任务。

我希望看到有关此疑问的专家建议。 感谢您提前提供任何帮助。

-mia

回答

0

对于非XIB路线

颜色:iOS 5的公开全新亮相的API。如果设置tintColor或backgroundColor,大多数UI元素都有选项。很少,甚至是背景图像。

字体:总是能够改变,但是你不能对它进行动画处理。

背景图像:您的主UIView应该有背景图像的选项,或者如果失败,则使用图案图像的背景颜色。

+0

这只是根据选择动态设置颜色。这很好,但我正在寻找一个有效的选项,如主题或样式,我可以简单地动态切换主题,同时我不必显式处理代码或重复的笔尖。 – mia 2012-01-12 04:50:55

+0

[UIButton setTintColor:[UIColor someColor]];你必须自己处理所有事情。在你称之为每个'新风格'的时候,用一些预设的颜色值做一些方法 – CodaFi 2012-01-12 04:52:20

0

实现基于主题的应用程序IOS应用程序(不使用〜xib路径)的最佳方法。你应该创建一个build.xml文件,它将包含所有主题。你应该保持你的布局相同,你可以根据用户的喜好在布局中改变图像,风格,字体,语言,视图。通过这样做,您不会复制任何代码,并且您将从应用程序中获得最佳性能。

+0

抱歉,我不明白你的解释。你能否再解释一下。这也不是动态的rt?意味着程序启动并运行时用户不能切换主题。 – mia 2012-01-12 04:52:39

0

正如CodaFI所说,如果您使用的是iOS 5或更高版本,则您已具备主题功能。它的工作原理是这样的:

  • 将协议<IAppearanceContainer>添加到类中。

  • UI_APPEARANCE_SELECTOR装修您打算更改的房产。例如:

     
    @interface UINavigationBar : ... <IAppearanceContainer> 
    @property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR; 
    @end 
    

  • 改变颜色的类的所有实例:
     
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]]; 
    

上面的例子是UINavigationBar,但它会与任何自定义类的工作。要看到的iOS 6.1已经支持的对象,查看文档或者运行以下命令:

cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/UIKit.framework/Headers 

grep -H UI_APPEARANCE_SELECTOR ./* | sed 's/ __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0) UI_APPEARANCE_SELECTOR;//' 

让你想模块化主题说:

  • 写的所有字体的大plist文件,颜色,音乐,还有什么不是。这些文件中的每一个都将是一个主题。
  • 通过单例读取文件,并为每个可设置主题的元素设置线条,如[x appearance] setWhatever:<plist value>]
  • 如果您有相同元素的实例需要显示不同的元素,请通过单例获取这些图像。

这或多或少是来自Amit Vyawahare的小费。我说plist代替了xml,因为它们更易于阅读。除非你确实需要,否则不要复制NIB。

相关问题