如何使iPhone应用程序“skinnable”?

时间:2011-08-23 18:17:05

标签: iphone ios xcode skin

客户要求我做一个" skinnable"应用程序,我真的不知道这意味着什么。 我用谷歌搜索疯狂,我没有找到一个明确的答案或一个例子。

如果有人对此有任何疑问,我们将不胜感激。

感谢。

6 个答案:

答案 0 :(得分:3)

通常这意味着应用程序将允许用户为UI选择不同的外观,每个外观都有不同的配色方案,感觉等。

答案 1 :(得分:1)

我实际上对我的项目做了什么。我决定使用多个故事板来让我更好地控制每个主题的整个UI和UX。我通过一个将它们全部链接在一起的主故事板以编程方式将它们全部链接在一起。这就是我所做的,而且效果非常好。性能很好,同时仍然保持对每个主题的高水平细粒度控制。您甚至可以将各个视图控制器的Header和Implementation文件保持相同,这样就可以在故事板上保持名称相同。

例如,我正在处理的一个名为Jam-mout(音乐播放器)的应用程序具有多个高质量主题。 (附图)每个主题都有它自己的故事板。

答案 2 :(得分:0)

对于iPhone应用程序,其中大多数GUI设计由操作系统提供,您可以通过设置自定义导航栏背景图像,自定义按钮图形以及不同的字体/大小/权重和空白来实现。确保您与熟悉iPhone GUI的设计师合作(如果您不与设计师密切合作,这将是一场噩梦)。

我最近为需要大量自定义GUI的客户端安装了一个应用程序:http://itunes.apple.com/us/app/gogoparis/id428497937?mt=8。一个'skinnable'应用程序会有这样的几个集合,因此用户可以选择几种不同的整体样式。 (我希望你的客户有一个巨大的设计预算!)

答案 3 :(得分:0)

我的帖子应该可以帮助您入门:

What is the recommended method of styling an iOS app?

如果您需要实时主题更改,此示例中的每个主题都可以在用户选择其他主题(或皮肤)时发布通知 - 然后您可以更新主题实例本身。

或者,您可以为映射的主题(NSCFDictionary)创建标识符到中央主题工厂。用于主题工厂的特定视图的示例标识符可以是字符串MONImageSelectorTableCellThemeIdentifier

一个示例管理器/工厂,它处理所有主题加载并出售对主题的引用:

@interface MONThemeManager : NSObject

//...

- (MONTheme *)themeForCurrentlySelectedSkinForViewWithIdentifier:(NSString *)identifier;

//...

@end
除此之外,如果不了解您的要求,很难更详细地回答您的问题。皮肤化应用程序的实现可以从非常简单到非常复杂。祝你好运。

答案 4 :(得分:0)

这里已经有了一些很好的答案,但是如果你使用像Three20这样的ui工具包,我会补充说 你可以像使用网页一样使用CSS来修饰所有内容。

答案 5 :(得分:0)

我确实知道这是一个老帖子,但我想我会在这件事上分享我的一分钱:)

要使任何Cocoa应用程序可换肤,您需要考虑应用程序的3个方面:

1)统一性:我的意思是,在所有窗口,视图(包括按钮,文本输入等......)上,您希望拥有一个适用于整个应用程序的“标准”。这是您需要关注的第一件事。尽管iOS和OS X已经有了“主题”,即苹果默认的着色和布局方式,你可以覆盖它们(参考个别视图/窗口等......文档。

2)性能:有了皮肤等......在编写自己的drawRect等方法时,性能总是一个问题。已经针对“默认”设置的代码苹果已经过优化,因此您需要在执行此操作时密切关注应用程序的性能。很好的例子是:我使用渐变图像,还是使用NSGradient?在渲染它们时,两者都存在性能问题,但这是两个中哪个更好的问题

3)userDefaults:这通常是您从中获取“皮肤设置”的区域。 userDefaults基本上是存储您通常在首选项窗格中设置的所有信息的位置。

如果我是你,我会查看它的课程参考:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/

此外,这是使用userDefaults的一个很好的例子:

http://mobile.tutsplus.com/tutorials/iphone/nsuserdefaults_iphone-sdk/

希望这有帮助!