2014-01-08 3 views
2

Я новичок в разработке iOS и задавался вопросом, как добавить ночную тему, похожую на tweetbot 3 и clear. Из моих исследований я действительно не смог найти что-либо в своих приложениях для iOS.Создание ночной темы для моего приложения

Могу ли я переделать приложение в другой раскадровки, характерной для темы?

спасибо.

+0

Ознакомьтесь с нижеследующими ссылками: http: // stackoverflow.com/questions/8919334/how-to-create-multiple-themes-skins-for-iphone-apps http://stackoverflow.com/questions/7939981/how-to-switch-skins-or-design -themes-in-ios-app – PunjabiCoder

ответ

15

Чтобы добавить к тому, что говорили другие, есть видео WWDC по теме вашего кода. Я сделал этот шаг дальше и создал легкую основу для тезисов, которые я использую в нескольких своих приложениях. Суть заключается в следующем.

Каждый раз, когда вы создаете метку, кнопку и т. Д. (Или когда они появятся на экране, если вы используете построитель интерфейсов), вы передаете их экземпляру темы, который устанавливает их внешний вид. Если несколько компонентов пользовательского интерфейса работают вместе, используйте шаблон дизайна «Фасад», чтобы объединить их в один объект (например, если у вас есть кнопка, в которой есть обертка клиента, ярлык и изображение в определенном месте, заверните их в один класс называется, например, - WrappedButton).

Я иногда бывает легче общаться в UML, так что ...

Theme UML Diagram

Тема Протокол может выглядеть следующим образом.

@protocol Theme <NSObject> 

- (void)themeHeadingLabel:(UILabel *)headingLabel; 
- (void)themeBodyLabel:(UILabel *)bodyLabel; 

- (void)themeNavigationButton:(UIButton *)navigationButton; 
- (void)themeActionButton:(UIButton *)actionButton; 

@end 

Кстати, я обычно ставлю код там, чтобы кнопки, метки и т.д., чтобы реагировать на изменение размера текста (из приложения Settings) в iOS7. Так что может быть также такие методы, как,

- (void)respondToTextSizeChangeForHeadingLabel:(UILabel *)headingLabel; 
- (void)respondToTextSizeChangeForBodyLabel:(UILabel *)bodyLabel; 

// and do the same for buttons 

Тогда, конечно, вы будете иметь один или несколько реализаций этого протокола. Здесь ваши темы будут жить. Вот несколько фрагментов того, что может выглядеть.

#import "Theme.h" 

@interface LightTheme : NSObject <Theme> 

@end 

@implementation LightTheme 

- (void)themeHeadingLabel:(UILabel *)headingLabel 
{ 
    headingLabel.backgroundColor = [UIColor lightTextColor]; 
    headingLabel.textColor = [UIColor darkTextColor]; 

    headingLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]; 
} 

// the rest of your theming 

@end 

И вы могли бы иметь темную тему, реализация которых выглядит примерно так.

@implementation DarkTheme 

- (void)themeHeadingLabel:(UILabel *)headingLabel 
{ 
    headingLabel.backgroundColor = [UIColor darkGrayColor]; 
    headingLabel.textColor = [UIColor lightTextColor]; 

    headingLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]; 
} 

// the rest of your theming 

@end 

Я всегда обертку в ThemeManager, чтобы помочь мне следить за темой. Это может выглядеть примерно так.

#import "Theme.h" 

@interface ThemeManager : NSObject 

+ (id <Theme>)theme; 

@end 


#import "LightTheme.h" 
#import "DarkTheme.h" 

@implementation ThemeManager 

+ (id <Theme>)theme 
{ 
    // here you'd return either your light or dark theme, depending on your program's logic 
} 

@end 

Теперь, чтобы связать все это вместе, вы можете использовать его непосредственно или на заводе.

UILabel* headingLabel = [[UILabel alloc] init]; 
headingLabel.text = @"My Heading"; 

[[ThemeManager theme] themeHeadingLabel:myHeading]; 

// use the label 

Или как фабрика, реализация будет выглядеть примерно так.

- (UILabel *)buildLabelWith:(NSString *)text 
{ 
    UILabel* headingLabel = [[UILabel alloc] init]; 
    headingLabel.text = text; 

    [[ThemeManager theme] themeHeadingLabel:myHeading]; 

    return headingLabel; 
} 

Надеюсь, что это поможет. Если у вас есть какие-либо вопросы, дайте мне знать.

+0

Это прекрасно! Спасибо! – user3173553

+0

Очень хорошо объяснено, приятно использовать шаблоны. –

Смежные вопросы