2015-12-11 2 views
1

Я разрабатываю игру и хочу создать конфигурацию для упрощения скинов приложений.Глобальные переменные/одноэлементные альтернативы для хранения зависимых констант

Я застрял с определенными константами устройства. Например, я хочу сохранить размер шрифта, специфичный для устройства. Допустим, я хочу 30 для iPhone и 45 для iPad. Теперь я это сделать, объявляющего глобальную переменную следующим образом:

let h2FontSize : CGFloat = UIDevice.currentDevice().userInterfaceIdiom == .Pad ? 45 : 30 

Затем используйте его следующим образом:

private let topLabel = CCLabelTTF(string: "", fontName: mainFontName, fontSize: h2FontSize) 

Но это не кажется красивым решением, потому что у меня есть h1, h3 FONTSIZE и Они все выглядят одинаково.

let h1FontSize : CGFloat = UIDevice.currentDevice().userInterfaceIdiom == .Pad ? 60 : 45 
let h2FontSize : CGFloat = UIDevice.currentDevice().userInterfaceIdiom == .Pad ? 45 : 30 
let h3FontSize : CGFloat = UIDevice.currentDevice().userInterfaceIdiom == .Pad ? 30 : 15 

Как бороться с константами, специфичными для устройства?

+0

@ Калеб, потому что это в основном необходимо для разработки игр, в UIKit вы можете использовать классы размера для этого типа вещей. –

+1

@Caleb ОК, вы правы, я просто хотел привлечь внимание разработчиков cocos2d, я удалил это –

ответ

0

Вы можете сделать что-то вроде:

private extension UIDevice { 
    static func isIpad() -> Bool { 
     return currentDevice().userInterfaceIdiom == .Pad 
    } 
} 

struct Font { 
    struct Size { 
     static let H1: CGFloat = UIDevice.isIpad() ? 60 : 45 
     static let H2: CGFloat = UIDevice.isIpad() ? 45 : 30 
     static let H3: CGFloat = UIDevice.isIpad() ? 30 : 15 
    } 
} 

Затем, все ваши шрифта для укладки могут быть сделаны непосредственно в этом Шрифт структуры. Поэтому, если вам нужно больше стилей, вы можете заставить H1 вернуть стилизованный UIFont с вашими потребностями, а не только CGFloat, который еще больше отменит ваши стили.

Затем вы можете улучшить это, создав структуру стиля, которая использует UIDevice как зависимость вместо использования currentton() singleton.

1

Как бороться с специфическими для устройства константами?

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

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