Para ejecutar el proyecto de ejemplo, clonar el repositorio y ejecutar pod install desde el directorio de ejemplo.
Giotto está disponible a través de Cocoapods. Para instalarlo, simplemente agregue la siguiente línea a su Podfile:
pod "Giotto" Giotto está disponible bajo la licencia Apache. Consulte el archivo de licencia para obtener más información.
SDTHEMEMAGER (en adelante llamado TM) nace principalmente con la intención de simplificar y estandarizar el desarrollo de aplicaciones que requieren el cambio de marca de la GUI.
La Plist que describe un tema debe contener un diccionario de constantes con todas las constantes, mientras que los estilos se pueden organizar como se desea en otros diccionarios.
Contiene todas las constantes, como nombres de fuentes, colores o tamaños. Técnicamente es un diccionario organizado de un nivel de la siguiente manera: <costant_name> : <costant_value> Por convención, las claves tienen los siguientes prefijos:
- Nombres de fuentes: la clave comienza con
FONT_- Códigos de color: la tecla comienza con
COLOR_- dimensiones (entero o flotante): la tecla comienza con
DIMENSION_
Esempi:
{
“FONT_REGULAR” : “Helvetica-Neue”,
“COLOR_COMMON_BACKGROUND” : “color:000000FF”,
“DIMENSION_VIEW_WIDTH” : 3 // value is a NSNumber
}
color: se explica en la sección Convenciones Las constantes no pueden contener matriz o diccionario como valor.
Al mismo nivel que las constantes, otros diccionarios pueden definirse como grupos de funciones de estilos gráficos. Los nombres de grupo son gratuitos. Técnicamente, son diccionarios organizados de la siguiente manera: <style_name> : <style_dictionary> El diccionario de estilo se organiza de la siguiente manera: <property_name> : <value_to_apply> Ejemplos:
{
“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
}
}
}
Convenciones _superstyle" , style: y font: se explican en la sección convenciones
Para acelerar la redacción de los temas y permitir el manejo de casos particulares pero frecuentes, se han definido las siguientes convenciones:
_superstyle: se puede ingresar en el diccionario de un estilo para indicar que el estilo hereda de otro estilo. Cuando el estilo "padre" se aplica antes del estilo "niño", puede sobrescribir los keypaths en el "niño". Puede heredar de múltiples estilos dividiéndolos secuencialmente por un ",". Los estilos que se indican se aplicarán en orden, por lo que el estilo que se muestra después de sobrescribir el valor de los teclados que tiene en común con un estilo que lo precede en la lista.
style:style_name1,style_name2: la propiedad indicada en la clave se estiliza con los estilos enumerados en la lista. Los estilos mostrados deben estar presentes en uno de los grupos de estilos. Versión abreviadas: style_name1,style_name2. Como_superstylelos estilos que se muestran se aplican en orden.font:font_name, font_size: NSTANTIA A UIFONT y lo establece como el valor de la propiedad especificada en la clave. Esta convención también se puede usar en constantes. Versión cortaf: font_name, font_size.El
font_namepuede asumir los valores convencionales para cargar la fuente del sistema:
system`systemBold``systemItalic`
color:color_string: Renders Color_string para instanciar una uicolor para validar la propiedad especificada en la clave. Esta convención también se puede usar en constantes. Versión cortac: color_string.nullonil: Establezca la propiedad indicada en la clave comonil.point:x,y: Establezca la propiedad como un punto CG con valores X e Y. Los valores X e Y se interpretan como flotante.size:width,height: Establezca la propiedad como un CGSIZE con los valores de ancho y altura indicados. Los valores se interpretan como flotante.rect:x,y,width,height: establezca la propiedad como un cgrect con valores x, y, ancho y altura. Los valores se interpretan como flotante.edge:top,left,bottom,right: configure la propiedad como UIiedgeInsets con valores superior, izquierdo, inferior y derecho. Los valores se interpretan como flotante.
Como ya se mencionó, un estilo se parece a un diccionario en uno de los grupos de estilos y se puede aplicar a cualquier NSObject (generalmente un elemento de interfaz). Las teclas del diccionario pueden ser:
- Una de las convenciones dadas las claves (ver párrafo dedicado)
- una propiedad del objeto a ser estilizado
- El kyepath de uno de los bienes del objeto a ser estilizado (por ejemplo, "capa.bordercolor")
- Una cadena que no indica una propiedad real, pero se manejará en el método apropiado que cada objeto herede de la categoría NSObject+Thememanager (consulte la sección Gestión de propiedades especiales ).
- Una lista de propiedades o teclados separados por "," (Es. TextColor, Layer.BorderColor).
La propiedad indicada también puede ser un nsArray (como una iBoutletCollection). En este caso, el valor se aplica a todos los objetos en la matriz.
Para aplicar un estilo declarado en Plist a un objeto, simplemente use la siguiente línea de código:
[[SDThemeManager sharedManager] applyStyleWithName:@"NomeStile" toObject:object];
El objeto indicado también puede ser uno mismo .
La biblioteca contiene una categoría nsobject+thememanager que expone el método:
- (void) applyThemeValue:(id)value forKeyPath:(NSString*)keyPath;
Este método se anula por las categorías de algunas subclases para manejar algunas propiedades de manera especial. Estas categorías siempre se incluyen en la Biblioteca SysData. P.ej. UITEXTFIELD+Thememanager administra el propiedad de posición de propiedad falsa para usar ' atributedplaceholder .
La categoría NSObject+Thememanager declara el protocolo:
@protocol ThemeManagerCustomizationProtocol <NSObject>
@optional
- (BOOL) shouldApplyThemeCustomizationForKeyPath:(NSString*)keyPath;
- (void) applyCustomizationOfThemeValue:(id)value forKeyPath:(NSString*)keyPath;
@end
Los métodos de este protocolo permiten la administración de propiedades personalizadas fuera de la biblioteca. Estos son los únicos métodos que deben usarse fuera de la biblioteca para evitar arriesgar la implementación del método descrito anteriormente.
El método shouldApplyThemeCustomizationForKeyPath: debe devolver YES solo para los keypaths que tiene la intención de manejar manualmente.
El método applyCustomizationOfThemeValue:forKeyPath: debe contener la implementación personalizada para los teclados aceptados por el método anterior.
Thememanager necesariamente requiere un tema predeterminado y, opcionalmente, uno o más estilos alternativos pueden indicarse mediante el método:
- (void) setAlternativeThemes:(NSArray*)alternativeThemes
La matriz pasada debe contener los nombres de los archivos Plist de temas alternativos. Cuando intentas aplicar un estilo, Thememanager lo busca en el primer tema alternativo. Si no lo encuentra en el segundo y así sucesivamente. Si ninguno de los temas alternativos contiene el estilo indicado, el Thememanager lo busca en el tema predeterminado.
¡El pedido es importante!
La versión 2 del the Thememanager es compatible con retroceso. Para manejar la retrocompatibilidad con los formatos de Plist antiguos, los nuevos deben necesariamente contener el par de valores clave: “formatVersion” : 2
Los siguientes métodos pueden cambiar el tema y los valores constantes de manera programática.
Modifique el valor de una constante de manera programática.
- (void) modifyConstant:(NSString*)constant withValue:(id)value
Modifique el valor de un estilo en una ruta determinada de manera programática.
- (void) modifyStlye:(NSString*)style forKeyPath:(NSString*)keyPath withValue:(id)value
ATENCIÓN :
Por defecto, la modificación de una configuración de estilo algunos keypaths reemplazan todo el estilo en el paquete con solo los nuevos keypaths. Si desea que manta todos los demás valores de teclado establecidos en los temas básicos, actúe la herencia
- (void) modifyStyle:(NSString*)style inheritanceEnable:(BOOL)inheritanceEnable
Para persistir todas las modificaciones, establezca mediante programación para retenerlos también en el reinicio de la siguiente aplicación. De lo contrario, todas las modificaciones estarán disponibles para la sesión actual.
- (void) synchronizeModifies
Para restablecer todas las modificaciones establecidas programáticamente (usando ModifyConstant: WithValue: o ModifyStlye: ForkyEpath: WithValue :)
- (void) resetModifies