Sakurakit , es una biblioteca liviana y potente para la aplicación de temas o pieles, inspirados en SwiftTheme y Dknightversion . Proporciona programación de cadena y funcional, que es más legible para sus códigos.
中文介绍
Para la demostración, eche un vistazo a Sakurademo_oc, un proyecto de ejemplo de iOS en el espacio de trabajo. Deberá ejecutar pod install después de descargar.
sakura significa theme de lo siguiente. Ahora, Sakura para tus aplicaciones.
Hay tres formas de usar Sakurakit en su proyecto:
Usando Cocoapods
Manual
Usando Cartago
Cocoapods es un gerente de dependencia para Objective-C, que automatiza y simplifica el proceso de usar bibliotecas de terceros en sus proyectos.
Podpel
platform :ios, '8.0'
pod 'SakuraKit'
Descargue Repo's Zip y simplemente arrastre todos los archivos en la carpeta Sakurakit a sus proyectos.
Carthage es un gerente de dependencia descentralizado que construye sus dependencias y le proporciona marcos binarios.
Puede instalar Carthage con HomeBrew usando el siguiente comando:
$ brew update
$ brew install carthage
Para integrar Sakurakit en su proyecto Xcode usando Carthage, especifíquelo en su Cartfile:
github "tingxins/SakuraKit"
Ejecute Carthage para construir los marcos y arrastre el marco Sakurakit.Framework en su proyecto Xcode.
Aquí hay un ejemplo, Configure las pieles para UIButton como ejemplo siguiente.
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
button.sakura
.backgroundColor(@"Home.buttonBackgroundColor")
.titleColor(@"Home.buttonTitleColor", UIControlStateNormal);
Obviamente, como muestra el código. Es solo configurar backgroundColor & titleColor of Skin para un botón. Si desea cambiar de tema o piel para sus aplicaciones. Simplemente llame a esta API Use TXSakuraManager :
// name: name of a theme or skin.
// type: TXSakuraTypeMainBundle or TXSakuraTypeSandBox
+ (BOOL)shiftSakuraWithName:(TXSakuraName *)name type:(TXSakuraType)type;
Para líneas de código arriba. Es posible que algunos literales te perjudiquen, como Home.buttonBackgroundColor Buttonbackgroundcolor o Home.buttonTitleColor . No se preocupe, nos centraremos en cómo configurar un perfil para Sakura paso a paso más tarde.
Ahora, centrémonos en el perfil. En resumen, el perfil es una forma simple de administrar el tema o la piel para la configuración de su aplicación en un proyecto. (En realidad, el perfil de Sakura solo le gusta localizar su aplicación).
Sakurakit admite tanto el formato de archivo .json & .plist. Para el ejemplo del archivo .json. Es posible que deba configurar así:
{
"Home":{
"buttonBackgroundColor":"#BB503D",
"buttonTitleColor":"#4AF2A1"
}
}
Como KeyPath muestra anteriormente, podemos saber que los literales de Home.buttonBackgroundColor and Home.buttonTitleColor . Sakurakit siempre obtiene valor del tema de conmutación de perfil o la piel para su aplicación, como color/iconname/text/fontSize.eg
Precauciones:
Existen temas de paquete en su paquete de aplicaciones. También llamamos tema local . Siempre debemos configurar un tema predeterminado para la aplicación. Por supuesto, Sakurakit puede agregar temas de múltiples paquetes para su aplicación siguiendo estos pasos:
Primero, cree [ SakuraName ] .json perfil. Asegúrese de que el SakuraName sea su nombre de tema. Por ejemplo, si desea agregar un nuevo tema de paquete que se denomina typewriter , entonces el perfil correspondiente debe llamarse witewriter.json .
A continuación, configure los iconos para el tema typewriter . Y el nombre de los iconos debe distinguir con otro tema local. Por ejemplo. Si un icono llamado cm2_btm_icn_account en el tema predeterminado , entonces el icono correspondiente en el tema typewriter debe nombrarse como este cm2_btm_icn_account_xxx .
Después del paso 1 y 2. Puede registrar todo el tema Sakura local en AppDelegate. (Se puede ignorar el tema predeterminado ).
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Coding ...
[TXSakuraManager registerLocalSakuraWithNames:@[@"typewriter"]];
// Coding ...
return YES;
}
En este punto, hemos configurado todos los temas de paquete. Podemos cambiar a estos temas en cualquier momento. Por ejemplo. Si desea cambiar a un tema de paquete especificado que se llame typewriter . Solo llame a API como esta:
[TXSakuraManager shiftSakuraWithName:@"typewriter" type:TXSakuraTypeMainBundle];
Temas de sandbox, usando el paquete comprimido (.zip) con una carpeta, que contiene perfil e iconos . Y también llamamos un tema remoto . El usuario puede descargar a través de la red desde el servidor. El servidor puede cargar múltiples temas dinámicos, y luego el usuario puede descargar desde la aplicación.
Acerca de la sugerencia de formato de datos de tema remoto, dar un ejemplo: (para su información)
{
"name": "I'm a monkey",
"sakuraName": "monkey",
"url": "http:\image.tingxins.cnsakuramonkey.zip"
}
sakuraName es su nombre de tema. Y url es una dirección de URL remota del tema Sakura. (Nota: si el campo Sakuraname pasó nulo, el nombre del tema correspondiente se debe predeterminar el nombre del paquete descargado).
Cuando se ha descargado el tema remoto, podemos cambiar el tema como este:
[TXSakuraManager shiftSakuraWithName:sakuraName type:TXSakuraTypeSandBox];
Sobre algo emocionante para ti. Sakurakit también proporciona una API que puede usar para descargar el tema remoto. Y es compatible con la devolución de llamada Block y Delegate . Muy impresionante, ¿verdad? Y, por supuesto, también puede personalizar su propia operación de descarga para un tema remoto.
Hablemos de eso ahora.
Si quieres descargar un tema Sakura. Puede llamar a la API de bloque de tareas de descarga como esta. Mostrar el código de uso de uso:
[[TXSakuraManager manager] tx_sakuraDownloadWithInfos:sakuraModel downloadProgressHandler:^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) {
// Sakura theme download progress callback
} downloadErrorHandler:^(NSError * error) {
// Sakura theme download error callback
} unzipProgressHandler:^(unsigned long long loaded, unsigned long long total) {
// Unzip sakura theme compressed package progress callback
} completedHandler:^(id<TXSakuraDownloadProtocol> infos, NSURL * location) {
// completed callback
} ];
En este ejemplo, el objeto de sakuraModel se ajusta al TXSakuraDownloadProtocol . Puede consultar Sakurademo_OC para obtener más detalles en DownloadSakuraController .
Si quieres descargar un tema Sakura. Puede llamar a la API de Delegate de tarea de descarga como esta:
[[TXSakuraManager manager] tx_sakuraDownloadWithInfos:sakuraModel delegate:self];
Implementar métodos de delegado que necesite.
// If download task of sakura theme is already exist or already exist in sandbox, this API will callback.
- (void)sakuraManagerDownload:(TXSakuraManager *)manager
downloadTask:(NSURLSessionDownloadTask *)downloadTask
status:(TXSakuraDownloadTaskStatus)status;
// completed callback
- (void)sakuraManagerDownload:(TXSakuraManager *)manager
downloadTask:(NSURLSessionDownloadTask *)downloadTask
sakuraInfos:(id<TXSakuraDownloadProtocol>)infos
didFinishDownloadingToURL:(NSURL *)location;
// Sakura download progress callback
- (void)sakuraManagerDownload:(TXSakuraManager *)manager
downloadTask:(NSURLSessionDownloadTask *)downloadTask
didWriteData:(int64_t)bytesWritten
totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite;
/** Reserved for future use */
- (void)sakuraManagerDownload:(TXSakuraManager *)manager
downloadTask:(NSURLSessionDownloadTask *)downloadTask
didResumeAtOffset:(int64_t)fileOffset
expectedTotalBytes:(int64_t)expectedTotalBytes;
// Sakura theme download error callback
- (void)sakuraManagerDownload:(TXSakuraManager *)manager
sessionTask:(NSURLSessionTask *)downloadTask
didCompleteWithError:(nullable NSError *)error;
// Unzip sakura theme compressed package progress callback
- (void)sakuraManagerDownload:(TXSakuraManager *)manager
downloadTask:(NSURLSessionDownloadTask *)downloadTask
progressEvent:(unsigned long long)loaded
total:(unsigned long long)total;
Puede consultar Sakurademo_OC para obtener más detalles en AppDelegate .
Si no desea usar API para descargar el tema remoto que Sakurakit proporcionó, puede personalizar su propia operación de descarga para el tema Sakura.
Muestre el código que desea:
// `sakuraModel` conform to `TXSakuraDownloadProtocol`. location is theme compressed package path that downloaded。
[[TXSakuraManager manager] tx_generatePathWithInfos:sakuraModel downloadFileLocalURL:location successHandler:^(NSString *toFilePath, NSString *sakuraPath, TXSakuraName *sakuraName) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
BOOL isSuccess = [SSZipArchive unzipFileAtPath:toFilePath toDestination:sakuraPath delegate:self];
// Note: Be sure that call this API to format theme path if you are customize your own download operation. otherwise, when switching theme you may be failed.
[TXSakuraManager formatSakuraPath:sakuraPath cleanCachePath:toFilePath];
dispatch_sync(dispatch_get_main_queue(), ^{
if (isSuccess) {
[TXSakuraManager shiftSakuraWithName:sakuraName type:TXSakuraTypeSandBox];
}
});
});
} errorHandler:^(NSError * _Nullable error) {
NSLog(@"errorDescription:%@",error);
}];
P: ¿Por qué cada tema tiene su propio perfil?
R: Debido a que cada tema, al lado del nombre de los iconos, son los mismos, y diferentes temas de fondo de fondo, el tamaño de la fuente puede no ser el mismo. Por lo tanto, cada tema debe tener su propio perfil, a menos que solo desee hacer un tema solo para iconos.
P: ¿Por qué el nombre Sakura debe ser consistente con el nombre del perfil del tema correspondiente?
R: Esta es solo una convención para nosotros. Al cambiar el tema, Sakurakit a través del nombre del tema encontrará el tema en el local o en la ruta de sandbox, haciendo que tanto el tema como el perfil sean igual, reducirá una carga de trabajo innecesaria.
P: ¿Cuál es la diferencia entre temas de paquete y sandbox?
A: En realidad. Tema de paquete, llamamos el tema local. Tema remoto también llamado Sandbox Theme.
P: ¿Sakurakit tiene una versión que escrita en Swift?
A: No. Vendrá pronto. Si realmente lo necesitas ahora. Aquí hay un ejemplo para usar Swift con Sakurakitoc. (Sakurakitocforswiftdemo)
Absolutamente, puede contribuir a este proyecto todo el tiempo si lo desea.
Si necesita ayuda o hacer una pregunta general , solo @Tingxins en Weibo o Twitter, por supuesto, puede acceder a mi blog .
Si encontró un error , simplemente abra un problema.
Si tiene una solicitud de función , simplemente abra un problema.
Si desea contribuir , desembolse este repositorio y luego envíe una solicitud de extracción.
SakuraKit está disponible bajo la licencia MIT. Consulte el archivo de licencia para obtener más información.
Bienvenido para seguir mi cuenta oficial de WeChat.