Sakurakit ist eine leichte und leistungsstarke Bibliothek für die Anwendung zum Umschalten von Themen oder Skins, inspiriert von Swifttheme und DKnightversion . Es bietet Ketten- und Funktionsprogrammierung, die für Ihre Codes lesbarer ist.
中文介绍
Für die Demo schauen Sie sich den Sakurademo_OC an, ein iOS -Beispielprojekt im Arbeitsbereich. Sie müssen nach dem Herunterladen pod install ausführen.
sakura bedeutet theme wie folgt. Nun, Sakura für Ihre Apps.
Es gibt drei Möglichkeiten, Sakurakit in Ihrem Projekt zu verwenden:
Mit Cocoapods
Handbuch
Mit Karthago
Cocoapods ist ein Abhängigkeitsmanager für Objective-C, der den Prozess der Verwendung von Bibliotheken von Drittanbietern in Ihren Projekten automatisiert und vereinfacht.
Podfile
platform :ios, '8.0'
pod 'SakuraKit'
Laden Sie Repos Reißverschluss herunter und ziehen Sie einfach alle Dateien in den Sakurakit -Ordner in Ihre Projekte.
Karthago ist ein dezentraler Abhängigkeitsmanager, der Ihre Abhängigkeiten erstellt und Ihnen binäre Rahmenbedingungen bietet.
Sie können Carthago mit Homebrew mit dem folgenden Befehl installieren:
$ brew update
$ brew install carthage
Um Sakurakit mit Carthago in Ihr Xcode -Projekt zu integrieren, geben Sie es in Ihrem Cartfile an:
github "tingxins/SakuraKit"
Führen Sie Karthago aus, um die Frameworks zu erstellen und das Framework von Sakurakit.Framework in Ihr Xcode -Projekt zu ziehen.
Hier finden Sie ein Beispiel: Konfigurieren Sie Skins für UIButton als Beispiel.
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
button.sakura
.backgroundColor(@"Home.buttonBackgroundColor")
.titleColor(@"Home.buttonTitleColor", UIControlStateNormal);
Offensichtlich, wie die Code zeigt. Es konfiguriert nur backgroundColor & titleColor von Haut für eine Taste. Wenn Sie das Thema oder die Haut für Ihre Apps wechseln möchten. Nennen Sie diese API einfach TXSakuraManager :
// name: name of a theme or skin.
// type: TXSakuraTypeMainBundle or TXSakuraTypeSandBox
+ (BOOL)shiftSakuraWithName:(TXSakuraName *)name type:(TXSakuraType)type;
Für Codezeilen oben. Möglicherweise werden Sie von einigen Literalen wie Home.buttonTitleColor Home.buttonBackgroundColor verwirrt. Machen Sie sich keine Sorgen, wir werden uns darauf konzentrieren, wie ein Profil für Sakura Schritt für Schritt eingerichtet werden kann.
Konzentrieren wir uns nun auf das Profil. Kurz gesagt, Profil ist eine einfache Möglichkeit, Theme oder Haut für Ihre Anwendungseinstellung in einem Projekt zu verwalten. (Tatsächlich ist das Sakura -Profil einfach gerne Ihre App lokalisiert.)
Sakurakit unterstützt sowohl .json- als auch .plist -Dateiformat. Für .json -Dateibeispiel. Möglicherweise sollten Sie so konfigurieren:
{
"Home":{
"buttonBackgroundColor":"#BB503D",
"buttonTitleColor":"#4AF2A1"
}
}
Wie oben zeigen wir, dass Literale von Home.buttonBackgroundColor und Home.buttonTitleColor nur ein KeyPath für Wörterbuch sind. Sakurakit holt immer den Wert von Profil -Switching -Thema oder Haut für Ihre App, wie z. B. Farbe/Ikonname/text/fontsize.eg
Vorsichtsmaßnahmen:
In Ihrem App -Bundle gibt es Bündelthemen. Wir haben auch lokales Thema genannt. Wir sollten immer ein Standardthema für App konfigurieren. Natürlich kann Sakurakit in den folgenden Schritten Multi -Bundle -Themen für Ihre App hinzufügen:
Erstellen Sie zunächst [ SakuraName ] .json Profil. Stellen Sie sicher, dass der SakuraName Ihr Themenname ist. Wenn Sie beispielsweise ein neues Bundle -Thema hinzufügen möchten, das typewriter benannt ist, sollte das entsprechende Profil typewriter.json genannt werden.
Konfigurieren Sie als Nächstes die Symbole für das typewriter . Und der Name der Ikonen muss von einem anderen lokalen Thema unterschieden werden. Zum Beispiel. Wenn ein Symbol namens cm2_btm_icn_account im Standardthema namens CM2_BTM_ICN_ACTOUNT ist, sollte das entsprechende Symbol in typewriter -Theme wie dieses cm2_btm_icn_account_xxx bezeichnet werden.
Nach Schritt 1 & 2. sollten Sie alle lokalen Sakura -Themen in AppDelegate registrieren. ( Standardthema kann ignoriert werden.)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Coding ...
[TXSakuraManager registerLocalSakuraWithNames:@[@"typewriter"]];
// Coding ...
return YES;
}
Zu diesem Zeitpunkt haben wir alle Bundle -Themen konfiguriert. Wir können jetzt jederzeit zu diesen Themen wechseln. Zum Beispiel. Wenn Sie auf ein bestimmtes Bundle -Thema wechseln möchten, das typewriter benannte. Rufen Sie einfach API so an:
[TXSakuraManager shiftSakuraWithName:@"typewriter" type:TXSakuraTypeMainBundle];
Sandbox -Themen mit komprimiertem Paket (.zip) mit einem Ordner, der Profil und Symbole enthält. Und wir haben auch ein Remote -Thema genannt. Der Benutzer kann über das Netzwerk vom Server heruntergeladen werden. Der Server kann Multi -Themen dynamisch hochladen, und dann kann der Benutzer von App heruntergeladen werden.
Über den Vorschlag des Remote -Themendatenformates geben Sie ein Beispiel: (FYI)
{
"name": "I'm a monkey",
"sakuraName": "monkey",
"url": "http:\image.tingxins.cnsakuramonkey.zip"
}
sakuraName ist Ihr Themenname. Und url ist eine Remote -URL -Adresse des Sakura -Themas. (Hinweis: Wenn das Feld Sakuraname NIL übergeht, wird der Name des entsprechenden Themas standardmäßig zum Namen des heruntergeladenen Pakets standardmäßig.)
Wenn das Remote -Thema heruntergeladen wurde, können wir das Thema wie folgt wechseln:
[TXSakuraManager shiftSakuraWithName:sakuraName type:TXSakuraTypeSandBox];
Über einige aufregende für dich. Sakurakit bietet auch eine API, mit der Sie das Remote -Thema herunterladen können. Und unterstützt sowohl Block als auch Delegate -Callback. Sehr toll, oder? Natürlich können Sie auch Ihren eigenen Download -Operation für das Remote -Thema anpassen.
Reden wir jetzt darüber.
Wenn Sie ein Sakura -Thema herunterladen möchten. Sie können die Download -Task -Block -API so aufrufen. Zeigen Sie den Code des Anwendungsfalls an:
[[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
} ];
In diesem Beispiel entspricht das Objekt von sakuraModel an TXSakuraDownloadProtocol . Weitere Informationen im DownloadSakuraController finden Sie in Sakurademo_OC.
Wenn Sie ein Sakura -Thema herunterladen möchten. Sie können die Download -Task -Delegate -API wie folgt aufrufen:
[[TXSakuraManager manager] tx_sakuraDownloadWithInfos:sakuraModel delegate:self];
Implementieren Sie Delegiermethoden, die Sie benötigen.
// 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;
Weitere Informationen in AppDelegate finden Sie in sakurademo_oc.
Wenn Sie keine API verwenden möchten, um das Remote -Thema, das Sakurakit bereitzustellen, herunterzuladen, können Sie Ihren eigenen Download -Operation für Sakura -Thema anpassen.
Zeigen Sie den gewünschten Code:
// `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);
}];
F: Warum hat jedes Thema sein eigenes Profil?
A: Weil jedes Thema neben dem Namen der Symbole gleich und unterschiedliche Themen -Hintergrundfarbe ist, ist die Schriftgröße möglicherweise nicht gleich. Jedes Thema sollte also sein eigenes Profil haben, es sei denn, Sie möchten nur ein Thema für Symbole machen.
F: Warum sollte der Name Sakura mit dem Profilnamen des entsprechenden Themas übereinstimmen?
A: Dies ist nur eine Konvention für uns. Wenn Sie das Thema wechseln, wird Sakurakit den Themennamen über das Thema in lokaler oder im Sandbox -Pfad finden und sowohl Themen- als auch Profilnamen gleich machen, werden Sie eine unnötige Workload reduzieren.
F: Was ist der Unterschied zwischen Bündel und Sandkastenthemen?
A: Eigentlich. Bündelsthema, wir haben das lokale Thema genannt. Remote -Thema auch als Sandbox -Thema genannt.
F: Haben Sakurakit eine Version, die in Swift geschrieben hat?
A: Nein. Will wird bald kommen. Wenn Sie es jetzt wirklich brauchen. Hier ist ein Beispiel für die Verwendung von Swift mit Sakurakitoc. (Sakurakitocforswiftdemo)
Absolut , Sie können ständig zu diesem Projekt beitragen, wenn Sie möchten.
Wenn Sie Hilfe benötigen oder allgemeine Fragen stellen , können Sie natürlich auf mein Blog zugreifen.
Wenn Sie einen Fehler gefunden haben , öffnen Sie einfach ein Problem.
Wenn Sie eine Funktionsanforderung haben , öffnen Sie einfach ein Problem.
Wenn Sie einen Beitrag leisten möchten , geben Sie dieses Repository auf und senden Sie dann eine Pull -Anfrage.
SakuraKit ist im Rahmen der MIT -Lizenz erhältlich. Weitere Informationen finden Sie in der Lizenzdatei.
Willkommen, um meinem offiziellen Bericht über Wechat zu folgen.