Sakurakit , est une bibliothèque légère et puissante pour l'application à la commutation de thèmes ou de peaux, inspirée de SwiftTheme et DknightVersion . Il fournit une programmation chaîne et fonctionnelle, qui est plus lisible pour vos codes.
中文介绍
Pour la démo, jetez un œil au Sakurademo_OC, un exemple de projet iOS dans l'espace de travail. Vous devrez exécuter pod install après le téléchargement.
sakura signifie theme comme suit. Maintenant, Sakura pour vos applications.
Il existe trois façons d'utiliser Sakurakit dans votre projet:
Utilisation de cocoapodes
Manuel
Utilisation de Carthage
Cocoapods est un gestionnaire de dépendances pour Objective-C, qui automatise et simplifie le processus d'utilisation des bibliothèques tierces dans vos projets.
Podfile
platform :ios, '8.0'
pod 'SakuraKit'
Téléchargez le zip de Repo et faites glisser tous les fichiers dans le dossier Sakurakit vers vos projets.
Carthage est un gestionnaire de dépendances décentralisé qui construit vos dépendances et vous fournit des cadres binaires.
Vous pouvez installer Carthage avec Homebrew en utilisant la commande suivante:
$ brew update
$ brew install carthage
Pour intégrer Sakurakit dans votre projet Xcode à l'aide de Carthage, spécifiez-le dans votre cartouche:
github "tingxins/SakuraKit"
Exécutez Carthage pour construire les frameworks et faites glisser le framework Sakurakit.framework dans votre projet Xcode.
Voici un exemple, configurez les skins pour UIButton comme exemple suivant.
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
button.sakura
.backgroundColor(@"Home.buttonBackgroundColor")
.titleColor(@"Home.buttonTitleColor", UIControlStateNormal);
De toute évidence, comme le montrent le code. Il s'agit simplement de configurer backgroundColor & titleColor of Skin pour un bouton. Si vous souhaitez changer de thème ou de peau pour vos applications. Appelez simplement cette API Utilisez TXSakuraManager :
// name: name of a theme or skin.
// type: TXSakuraTypeMainBundle or TXSakuraTypeSandBox
+ (BOOL)shiftSakuraWithName:(TXSakuraName *)name type:(TXSakuraType)type;
Pour les lignes de code ci-dessus. Vous pouvez être perplexe par certains littéraux, comme Home.buttonBackgroundColor ou Home.buttonTitleColor . Ne vous inquiétez pas, nous nous concentrerons sur la façon de configurer un profil pour Sakura étape par étape plus tard.
Maintenant, concentrons-nous sur le profil. En bref, le profil est un moyen simple de gérer le thème ou la peau pour votre paramètre d'application dans un projet. (En fait, le profil Sakura aime juste localiser votre application.)
Sakurakit prend en charge le format .json et .plist du fichier. Pour l'exemple de fichier .json. Vous pouvez faire de la configuration comme ceci:
{
"Home":{
"buttonBackgroundColor":"#BB503D",
"buttonTitleColor":"#4AF2A1"
}
}
Comme le montre ci-dessus, nous pouvons savoir que les littéraux de Home.buttonBackgroundColor et Home.buttonTitleColor n'est qu'un KeyPath pour le dictionnaire. Sakurakit récupére toujours la valeur à partir du thème de commutation de profil ou de la peau pour votre application, tels que Color / Iconname / Text / FonTSize.eg
Précautions:
Les thèmes du faisceau existent dans le pack de votre application. Nous avons également appelé le thème local . Nous devons toujours configurer un thème par défaut pour l'application. Bien sûr, Sakurakit peut ajouter des thèmes multiples pour votre application en suivant ces étapes:
Tout d'abord, créez un profil [ SakuraName ] .json. Assurez-vous que le SakuraName est votre nom de thème. Par exemple, si vous souhaitez ajouter un nouveau thème de bundle qui a nommé typewriter , le profil correspondant doit être nommé Typewriter.json .
Ensuite, configurez les icônes pour le thème typewriter . Et le nom des icônes doit être distingué avec un autre thème local. Par exemple. Si une icône nommée cm2_btm_icn_account dans le thème par défaut , alors l'icône correspondante dans le thème typewriter doit être nommée comme ce cm2_btm_icn_account_xxx .
Après les étapes 1 et 2. Vous pouvez enregistrer tout le thème Sakura local dans AppDelegate. (Le thème par défaut peut être ignoré.)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Coding ...
[TXSakuraManager registerLocalSakuraWithNames:@[@"typewriter"]];
// Coding ...
return YES;
}
À ce stade, nous avons configuré tous les thèmes de bundle. Nous pouvons passer à ces thèmes à tout moment maintenant. Par exemple. Si vous souhaitez passer à un thème de bundle spécifié qui a nommé typewriter . Appelez simplement API comme ceci:
[TXSakuraManager shiftSakuraWithName:@"typewriter" type:TXSakuraTypeMainBundle];
Les thèmes de bac à sable, en utilisant un package compressé (.zip) avec un dossier, qui contient du profil et des icônes . Et nous avons également appelé le thème distant . L'utilisateur peut télécharger via le réseau depuis le serveur. Le serveur peut télécharger la dynamique multi-thèmes, puis l'utilisateur peut télécharger à partir de l'application.
À propos de la suggestion du format de données sur le thème distant, donnez un exemple: (FYI)
{
"name": "I'm a monkey",
"sakuraName": "monkey",
"url": "http:\image.tingxins.cnsakuramonkey.zip"
}
sakuraName est votre nom de thème. Et url est une adresse URL distante du thème Sakura. (Remarque: Si le champ Sakuraname s'est passé nul, le nom du thème correspondant sera par défaut au nom du package téléchargé.)
Lorsque le thème distant a été téléchargé, nous pouvons changer le thème comme celui-ci:
[TXSakuraManager shiftSakuraWithName:sakuraName type:TXSakuraTypeSandBox];
À propos de certains excitants pour vous. Sakurakit fournit également une API que vous pouvez utiliser pour télécharger le thème distant. Et prend en charge le rappel Block & Delegate . Très génial, non? Et bien sûr, vous pouvez également personnaliser votre propre opération de téléchargement pour le thème distant.
Parlons-en maintenant.
Si vous souhaitez télécharger un thème Sakura. Vous pouvez appeler l'API de bloc de téléchargement de tâches comme celle-ci. Afficher le code d'utilisation:
[[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
} ];
Dans cet exemple, l'objet de sakuraModel est conforme à TXSakuraDownloadProtocol . Vous pouvez consulter SakuradeMo_OC pour plus de détails dans DownloadSakuraController .
Si vous souhaitez télécharger un thème Sakura. Vous pouvez appeler l'API du délégué de la tâche de téléchargement comme ceci:
[[TXSakuraManager manager] tx_sakuraDownloadWithInfos:sakuraModel delegate:self];
Implémentez les méthodes de délégué dont vous avez besoin.
// 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;
Vous pouvez consulter Sakurademo_OC pour plus de détails dans AppDelegate .
Si vous ne souhaitez pas utiliser l'API pour télécharger le thème distant fourni par Sakurakit , vous pouvez personnaliser votre propre opération de téléchargement pour le thème Sakura.
Affichez le code que vous voulez:
// `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);
}];
Q: Pourquoi chaque thème a-t-il son propre profil?
R: Parce que chaque thème, à côté du nom des icônes, est le même et que différents thèmes de couleur d'arrière-plan, la taille de la police peut ne pas être la même. Ainsi, chaque thème devrait avoir son propre profil, à moins que vous ne vouliez simplement faire du thème que pour les icônes.
Q: Pourquoi le nom Sakura devrait-il être cohérent avec le nom de profil du thème correspondant?
R: Ce n'est qu'une convention pour nous. Lors du changement de thème, Sakurakit sera à travers le nom de thème pour trouver le thème dans le chemin local ou sur le chemin du bac à sable, ce qui rend le thème et le nom de profil de la même manière, vous réduirez une charge de travail inutile.
Q: Quelle est la différence entre les thèmes du paquet et du bac à sable?
R: En fait. Thème du paquet, nous avons appelé le thème local. Thème distant également appelé Sandbox Theme.
Q: Sakurakit a-t-il une version écrite dans Swift?
R: Non. Va bientôt arriver. Si vous en avez vraiment besoin maintenant. Voici un exemple d'utilisation de Swift avec Sakurakitoc. (SakurakitocforsWiftDemo)
Absolument , vous pouvez contribuer à ce projet tout le temps si vous le souhaitez.
Si vous avez besoin d'aide ou de poser une question générale , juste @tingxins dans Weibo ou Twitter, bien sûr, vous pouvez accéder à mon blog .
Si vous avez trouvé un bug , ouvrez simplement un problème.
Si vous avez une demande de fonctionnalité , ouvrez simplement un problème.
Si vous souhaitez contribuer , fourrez ce référentiel, puis soumettez une demande de traction.
SakuraKit est disponible sous la licence du MIT. Voir le fichier de licence pour plus d'informations.
Bienvenue pour suivre mon compte officiel de WeChat.