Pour exécuter l'exemple de projet, clonez le repo et exécutez d'abord pod install à partir de l'exemple du répertoire.
Giotto est disponible via Cocoapods. Pour l'installer, ajoutez simplement la ligne suivante à votre podfile:
pod "Giotto" Giotto est disponible sous la licence Apache. Voir le fichier de licence pour plus d'informations.
SdthemeManager (désormais appelé TM) naît principalement avec l'intention de simplifier et de normaliser le développement d'applications qui nécessitent le changement de marque de l'interface graphique.
Le PLIST décrivant un thème doit contenir un dictionnaire des constantes avec toutes les constantes, tandis que les styles peuvent être organisés comme souhaité dans d'autres dictionnaires.
Il contient toutes les constantes telles que les noms de police, les couleurs ou les tailles. Techniquement, c'est un dictionnaire organisé à un niveau comme suit: <costant_name> : <costant_value> Par convention Les clés ont les préfixes suivants:
- Noms de police: la clé commence par
FONT_- Codes de couleur: la clé commence par
COLOR_- dimensions (entier o float): la clé commence par
DIMENSION_
ESEMPI:
{
“FONT_REGULAR” : “Helvetica-Neue”,
“COLOR_COMMON_BACKGROUND” : “color:000000FF”,
“DIMENSION_VIEW_WIDTH” : 3 // value is a NSNumber
}
color: est expliqué dans la section Conventions Les constantes ne peuvent pas contenir le tableau ou le dictionnaire comme valeur.
Au même niveau que les constantes, d'autres dictionnaires peuvent être définis comme des groupes de fonctions de styles graphiques. Les noms de groupe sont gratuits. Techniquement, ce sont des dictionnaires organisés comme suit: <style_name> : <style_dictionary> Le dictionnaire de style est organisé comme suit: <property_name> : <value_to_apply> Exemples:
{
“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
}
}
}
Conventions _superstyle" , style: et font: sont expliquées dans la section Conventions
Afin d'accélérer la rédaction des thèmes et de permettre la gestion des cas particuliers mais fréquents, les conventions suivantes ont été définies:
_superstyle: Peut être entré dans le dictionnaire d'un style pour indiquer que le style hérite d'un autre style. Lorsque le style "parent" est appliqué avant le style "enfant", vous pouvez écraser les forces de touche de «l'enfant». Vous pouvez hériter de plusieurs styles en les divisant séquentiellement par un ",". Les styles indiqués seront appliqués dans l'ordre, de sorte que le style indiqué après avoir écrasé la valeur des chapeaux qu'il a en commun avec un style qui le précède dans la liste.
style:style_name1,style_name2: La propriété indiquée dans la clé est stylisée avec les styles répertoriés sur la liste. Les styles indiqués doivent être présents dans l'un des groupes de styles. Version abrégées: style_name1,style_name2. Comme_superstyleles styles indiqués sont appliqués dans l'ordre.font:font_name, font_size: nStantiate a Uifont et le définit comme la valeur de la propriété spécifiée dans la clé. Cette convention peut également être utilisée dans les constantes. Version courtef: font_name, font_size.Le
font_namepeut prendre des valeurs conventionnelles pour charger la police du système:
system`systemBold``systemItalic`
color:color_string: rend Color_string pour instancier un uicolor pour valider la propriété spécifiée dans la clé. Cette convention peut également être utilisée dans les constantes. Version courtec: color_string.nullounil: Définissez la propriété indiquée dans la clé commenil.point:x,y: Définissez la propriété en tant que CGPoint avec des valeurs x et y. Les valeurs x et y sont interprétées comme flottantes.size:width,height: définissez la propriété en tant que CGSize avec les valeurs de largeur et de hauteur indiquées. Les valeurs sont interprétées comme flottantes.rect:x,y,width,height: définissez la propriété en tant que cgrect avec des valeurs x, y, largeur et hauteur. Les valeurs sont interprétées comme flottantes.edge:top,left,bottom,right: Réglez la propriété sous forme de valeurs UEIEGEINGE avec les valeurs supérieure, gauche, inférieure et droite. Les valeurs sont interprétées comme flottantes.
Comme déjà mentionné, un style ressemble à un dictionnaire dans l'un des groupes Styles et peut être appliqué à n'importe quel NSObject (généralement un élément d'interface). Les clés du dictionnaire peuvent être:
- L'une des conventions compte tenu des clés (voir paragraphe dédié)
- une propriété de l'objet à styliser
- Le cheype de l'une d'une propriété de l'objet à styliser (Ex. "Layer.BorderColor")
- Une chaîne qui n'indique pas de propriété immobilière mais sera gérée dans la méthode appropriée selon laquelle chaque objet hérite de la catégorie NSObject + ThemeManager (voir la section Special Property Management ).
- Une liste de propriétés ou de trajectoires séparées par "," (es. TextColor, couche.BorderColor).
La propriété indiquée peut également être un NSARRAY (comme une IboutletCollection). Dans ce cas, la valeur est appliquée à tous les objets du tableau.
Pour appliquer un style déclaré dans Plist à un objet, utilisez simplement la ligne de code suivante:
[[SDThemeManager sharedManager] applyStyleWithName:@"NomeStile" toObject:object];
L'objet indiqué peut également être auto .
La bibliothèque contient une catégorie NSObject + ThemeManager qui expose la méthode:
- (void) applyThemeValue:(id)value forKeyPath:(NSString*)keyPath;
Cette méthode est remplacée par les catégories de certaines sous-classes pour gérer quelques propriétés d'une manière spéciale. Ces catégories sont toujours incluses dans la bibliothèque Sysdata. Par exemple, par exemple Uitextfield + TheMemanager gère le faux espace réservé à la propriété pour utiliser ' AttributedPlaceHolder .
La catégorie NSOBject + TheMemanager déclare le protocole:
@protocol ThemeManagerCustomizationProtocol <NSObject>
@optional
- (BOOL) shouldApplyThemeCustomizationForKeyPath:(NSString*)keyPath;
- (void) applyCustomizationOfThemeValue:(id)value forKeyPath:(NSString*)keyPath;
@end
Les méthodes de ce protocole permettent une gestion de propriété personnalisée en dehors de la bibliothèque elle-même. Ce sont les seules méthodes qui doivent être utilisées à partir de la bibliothèque pour éviter de risquer la mise en œuvre de la méthode décrite précédemment.
La méthode shouldApplyThemeCustomizationForKeyPath: ne devrait revenir YES uniquement que pour les forfaits que vous avez l'intention de gérer manuellement.
La méthode applyCustomizationOfThemeValue:forKeyPath: doit contenir l'implémentation personnalisée pour les forfaits acceptés par la méthode précédente.
Le themeManager nécessite nécessairement un thème par défaut et éventuellement un ou plusieurs styles alternatifs peuvent être indiqués par la méthode:
- (void) setAlternativeThemes:(NSArray*)alternativeThemes
Le tableau précédent doit contenir les noms des fichiers PLIST des thèmes alternatifs. Lorsque vous essayez d'appliquer un style, ThemeManager le cherche dans le premier thème alternatif. Si vous ne le trouvez pas dans la seconde et ainsi de suite. Si aucun des thèmes alternatifs ne contient le style indiqué, le themeManager le recherche dans le thème par défaut.
L'ordre est important !!!
La version 2 du TheMemanager est compatible en arrière. Pour gérer la rétrocompatibilité avec les anciens formats PLIST, les nouveaux doivent nécessairement contenir la paire de valeurs clés: “formatVersion” : 2
Les méthodes suivantes peuvent modifier le thème et les valeurs constantes de manière programmatique.
Modifiez la valeur d'une constante de manière programmatique.
- (void) modifyConstant:(NSString*)constant withValue:(id)value
Modifiez la valeur d'un style sur un chemin donné de manière programmatique.
- (void) modifyStlye:(NSString*)style forKeyPath:(NSString*)keyPath withValue:(id)value
ATTENTION :
Par défaut, la modification d'un style de style Certaines forces de touche remplacent l'ensemble du style dans le bundle par uniquement les nouvelles forces de touche. Si vous souhaitez gêner toutes les autres valeurs de trajectoire définies dans les thèmes de base, activez l'héritage
- (void) modifyStyle:(NSString*)style inheritanceEnable:(BOOL)inheritanceEnable
Pour persister tous les modifications Set programmatiquement pour les retreive également lors du redémarrage de l'application suivante. Sinon, toutes les modifications seront disponibles pour la session en cours.
- (void) synchronizeModifies
Pour réinitialiser toutes les modifications, set programmatiquement (en utilisant modifyConstant: withValue: ou modifyStlye: forKeyPath: witchvalue :)
- (void) resetModifies