Para executar o projeto de exemplo, clone o repo e execute pod install no diretório Exemplo primeiro.
Giotto está disponível através de Cocoapods. Para instalá -lo, basta adicionar a seguinte linha ao seu PODFILE:
pod "Giotto" Giotto está disponível sob a licença Apache. Consulte o arquivo de licença para obter mais informações.
Sdthememanager (doravante chamado TM) nasce principalmente com a intenção de simplificar e padronizar o desenvolvimento de aplicativos que exigem a rebranding da GUI.
O Plist descrevendo um tema deve conter um dicionário de constantes com todas as constantes, enquanto os estilos podem ser organizados conforme desejado em outros dicionários.
Ele contém todas as constantes, como nomes de fontes, cores ou tamanhos. Tecnicamente, é um dicionário organizado de um nível da seguinte maneira: <costant_name> : <costant_value> Por convenção, as chaves têm os seguintes prefixos:
- Nomes de fontes: a chave começa com
FONT_- Códigos de cores: a chave começa com
COLOR_- Dimensões (Inteiro o Float): a chave começa com
DIMENSION_
Esempi:
{
“FONT_REGULAR” : “Helvetica-Neue”,
“COLOR_COMMON_BACKGROUND” : “color:000000FF”,
“DIMENSION_VIEW_WIDTH” : 3 // value is a NSNumber
}
color: é explicado na seção Convenções Constantes não podem contém matriz ou dicionário como valor.
No mesmo nível que as constantes, outros dicionários podem ser definidos como grupos de função de estilos gráficos. Os nomes dos grupos são gratuitos. Tecnicamente, eles são dicionários organizados da seguinte forma: <style_name> : <style_dictionary> O dicionário de estilo está organizado da seguinte forma: <property_name> : <value_to_apply> Exemplos:
{
“CommonLabel” :
{
“_superstyle”: <style name of parent>,
“textColor” : “COLOR_COMMON_LABEL”,
“font”: “font:FONT_REGULAR,18”
},
“HomeViewController” :
{
“titleLabel” : “style:CommonLabel”,
“textField” :
{
“textColor” : “color:FFFFFF”,
“width” : “DIMENSION_FIELD_WIDTH”,
“layer.borderWidth” : 2
}
}
}
Convenções _superstyle" , style: e font: são explicadas nas convenções da seção
Para acelerar a redação dos temas e permitir o tratamento de casos particulares, mas frequentes, foram definidas as seguintes convenções:
_superstyle: pode ser inserido no dicionário de um estilo para indicar que o estilo herda de outro estilo. Quando o estilo "pai" é aplicado antes do estilo "criança", você pode substituir os teclados no "filho". Você pode herdar de vários estilos dividindo -os sequencialmente por A "". Os estilos indicados serão aplicados em ordem; portanto, o estilo mostrado após a substituição do valor dos teclados que ele tem em comum com um estilo que o precede na lista.
style:style_name1,style_name2: a propriedade indicada na chave é estilizada com os estilos listados na lista. Os estilos mostrados devem estar presentes em um dos grupos de estilos. Versão abreviadas: style_name1,style_name2. Como_superstyleos estilos mostrados são aplicados em ordem.font:font_name, font_size: nstantiates um uifont e o define como o valor da propriedade especificada na chave. Esta convenção também pode ser usada em constantes. Versão curtaf: font_name, font_size.O
font_namepode assumir valores convencionais para carregar a fonte do sistema:
system`systemBold``systemItalic`
color:color_string: renderiza color_string para instanciar um uicolor para validar a propriedade especificada na chave. Esta convenção também pode ser usada em constantes. Versão curtac: color_string.nullounil: Defina a propriedade indicada na chave comonil.point:x,y: defina a propriedade como um cgpoint com valores x e y. Os valores X e Y são interpretados como flutuação.size:width,height: Defina a propriedade como um CGSize com os valores de largura e altura indicados. Os valores são interpretados como flutuação.rect:x,y,width,height: defina a propriedade como um CGrect com valores x, y, largura e altura. Os valores são interpretados como flutuação.edge:top,left,bottom,right: defina a propriedade como um uiedgeInsets com valores superior, esquerdo, inferior e direito. Os valores são interpretados como flutuação.
Como já mencionado, um estilo parece um dicionário em um dos grupos de estilos e pode ser aplicado a qualquer NSObject (normalmente um elemento de interface). As chaves do dicionário podem ser:
- Uma das convenções dadas as chaves (ver parágrafo dedicado)
- uma propriedade do objeto a ser estilizado
- o teclado de uma propriedade do objeto a ser estilizado (Ex. "Layer.BerDerColor")
- Uma string que não indica um imóvel, mas será tratada no método apropriado que cada objeto herda da categoria NSObject+Thememanager (consulte a seção Special Property Management ).
- Uma lista de propriedades ou teclados separados por "" (es. textColor, layer.bordercolor).
A propriedade indicada também pode ser um NSARRAY (como uma IboutLeTCollection). Nesse caso, o valor é aplicado a todos os objetos da matriz.
Para aplicar um estilo declarado em Plist a um objeto, basta usar a seguinte linha de código:
[[SDThemeManager sharedManager] applyStyleWithName:@"NomeStile" toObject:object];
O objeto indicado também pode ser auto .
A biblioteca contém uma categoria NSObject+Thememanager que expõe o método:
- (void) applyThemeValue:(id)value forKeyPath:(NSString*)keyPath;
Este método é substituído pelas categorias de algumas subclasses para lidar com algumas propriedades de uma maneira especial. Essas categorias estão sempre incluídas na biblioteca Sysdata. Por exemplo. Uitextfield+thememanager gerencia a propriedade falsa de propriedades de propriedades para usar o atribuído atribuído .
A categoria NSObject+Thememanager declara o protocolo:
@protocol ThemeManagerCustomizationProtocol <NSObject>
@optional
- (BOOL) shouldApplyThemeCustomizationForKeyPath:(NSString*)keyPath;
- (void) applyCustomizationOfThemeValue:(id)value forKeyPath:(NSString*)keyPath;
@end
Os métodos deste protocolo permitem o gerenciamento de propriedades personalizadas fora da própria biblioteca. Esses são os únicos métodos que devem ser usados na biblioteca para evitar arriscar a implementação do método descrito anteriormente.
O método shouldApplyThemeCustomizationForKeyPath: aplicar YES do que você pretende lidar manualmente.
O método applyCustomizationOfThemeValue:forKeyPath: deve conter a implementação personalizada para os Keypaths aceitos pelo método anterior.
O temanager exige necessariamente um tema padrão e, opcionalmente, um ou mais estilos alternativos podem ser indicados pelo método:
- (void) setAlternativeThemes:(NSArray*)alternativeThemes
A matriz passada deve conter os nomes de arquivos plistos de temas alternativos. Quando você tenta aplicar um estilo, o TheMemanager procura isso no primeiro tema alternativo. Se você não o encontrar no segundo e assim por diante. Se nenhum dos temas alternativos contiver o estilo indicado, o TheMemanager o procurará no tema padrão.
O pedido é importante !!!
A versão 2 do TheMemanager é compatível com versões anteriores. Para lidar com a retrocompatibilidade com os formatos antigos do Plist, os novos devem necessariamente conter o par de valores-chave: “formatVersion” : 2
Os métodos a seguir podem alterar o tema e os valores constantes de maneira programática.
Modifique o valor de uma constante de maneira programática.
- (void) modifyConstant:(NSString*)constant withValue:(id)value
Modifique o valor para um estilo em um determinado caminho de maneira programática.
- (void) modifyStlye:(NSString*)style forKeyPath:(NSString*)keyPath withValue:(id)value
Atenção :
Por padrão, modificando um estilo definindo alguns teclados substituem todo o estilo no pacote apenas pelos novos teclados. Se você deseja mantain todos os outros valores do Keypath definidos nos temas básicos, ativo a herança
- (void) modifyStyle:(NSString*)style inheritanceEnable:(BOOL)inheritanceEnable
Para persistir, todos os modificam o Definir programaticamente para retê -los também na próxima reinicialização do aplicativo. Caso contrário, todos os modificados estarão disponíveis para a sessão atual.
- (void) synchronizeModifies
Para redefinir todos os modificados, defina programaticamente (usando o ModifyConstant: withvalue: ou modifystlye: forkeypath: withvalue :)
- (void) resetModifies