Sakurakit , adalah perpustakaan yang ringan dan kuat untuk aplikasi untuk beralih tema atau kulit, terinspirasi oleh Swifttheme dan DknightVersion . Ini menyediakan rantai dan pemrograman fungsional, yang lebih mudah dibaca untuk kode Anda.
中文介绍
Untuk demo, lihatlah Sakurademo_oc, proyek contoh iOS di ruang kerja. Anda perlu menjalankan pod install setelah diunduh.
sakura berarti theme sebagai berikut. Sekarang, Sakura untuk aplikasi Anda.
Ada tiga cara untuk menggunakan sakurakit dalam proyek Anda:
Menggunakan cocoapods
Manual
Menggunakan Carthage
Cocoapods adalah manajer ketergantungan untuk Objective-C, yang mengotomatiskan dan menyederhanakan proses penggunaan pustaka pihak ke-3 dalam proyek Anda.
Podfile
platform :ios, '8.0'
pod 'SakuraKit'
Unduh Zip Repo, dan cukup seret semua file di folder Sakuraktit ke proyek Anda.
Carthage adalah manajer ketergantungan terdesentralisasi yang membangun ketergantungan Anda dan memberi Anda kerangka kerja biner.
Anda dapat menginstal carthage dengan homebrew menggunakan perintah berikut:
$ brew update
$ brew install carthage
Untuk mengintegrasikan Sakurakit ke dalam proyek XCode Anda menggunakan Carthage, tentukan di cartfile Anda:
github "tingxins/SakuraKit"
Jalankan Carthage untuk membangun kerangka kerja dan seret kerangka kerja Sakurakit.Framework ke dalam proyek XCODE Anda.
Berikut adalah contohnya, konfigurasikan kulit untuk UIButton sebagai contoh berikut.
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
button.sakura
.backgroundColor(@"Home.buttonBackgroundColor")
.titleColor(@"Home.buttonTitleColor", UIControlStateNormal);
Jelas, seperti yang ditunjukkan kode. Ini hanya mengkonfigurasi backgroundColor & titleColor kulit untuk tombol. Jika Anda ingin beralih tema atau kulit untuk aplikasi Anda. Sebut saja API ini Gunakan TXSakuraManager :
// name: name of a theme or skin.
// type: TXSakuraTypeMainBundle or TXSakuraTypeSandBox
+ (BOOL)shiftSakuraWithName:(TXSakuraName *)name type:(TXSakuraType)type;
Untuk baris kode di atas. Anda mungkin bingung oleh beberapa literal, seperti Home.buttonBackgroundColor atau Home.buttonTitleColor . Jangan khawatir, kami akan fokus pada cara mengatur profil untuk Sakura langkah demi langkah nanti.
Sekarang, mari kita fokus pada profil. Singkatnya, profil adalah cara sederhana untuk mengelola tema atau kulit untuk pengaturan aplikasi Anda dalam suatu proyek. (Sebenarnya, profil Sakura hanya suka melokalisasi aplikasi Anda.)
Sakurakit mendukung format file .json & .plist. Untuk contoh file .json. Anda dapat melakukan konfigurasi seperti ini:
{
"Home":{
"buttonBackgroundColor":"#BB503D",
"buttonTitleColor":"#4AF2A1"
}
}
Seperti yang ditunjukkan di atas, kita dapat mengetahui bahwa literal Home.buttonBackgroundColor ButtonbackgroundColor dan Home.buttonTitleColor hanyalah KeyPath untuk kamus. Sakurakit selalu mengambil nilai dari tema switching profil atau kulit untuk aplikasi Anda, seperti warna/iconname/teks/fontsize.EG
Tindakan pencegahan:
Tema bundel ada di bundel aplikasi Anda. Kami juga menyebut tema lokal . Kita harus selalu mengonfigurasi tema default untuk aplikasi. Tentu saja, Sakurakit dapat menambahkan tema multi -bundel untuk aplikasi Anda mengikuti langkah -langkah ini:
Pertama, buat [ SakuraName ] .json profil. Pastikan bahwa SakuraName adalah nama tema Anda. Misalnya, jika Anda ingin menambahkan tema bundel baru yang bernama typewriter , maka profil yang sesuai harus bernama Typewriter.json .
Selanjutnya, konfigurasikan ikon untuk typewriter tema. Dan nama ikon perlu dibedakan dengan tema lokal lainnya. Misalnya. Jika ikon bernama cm2_btm_icn_account dalam tema default , maka ikon yang sesuai dalam tema typewriter harus dinamai seperti cm2_btm_icn_account_xxx ini.
Setelah Langkah 1 & 2. Anda dapat mendaftarkan semua tema Sakura lokal di AppDelegate. (Tema default dapat diabaikan.)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Coding ...
[TXSakuraManager registerLocalSakuraWithNames:@[@"typewriter"]];
// Coding ...
return YES;
}
Pada titik ini, kami telah mengkonfigurasi semua tema bundel. Kami dapat beralih ke tema -tema ini kapan saja. Misalnya. Jika Anda ingin beralih ke tema bundel tertentu yang bernama typewriter . Panggil saja API seperti ini:
[TXSakuraManager shiftSakuraWithName:@"typewriter" type:TXSakuraTypeMainBundle];
Tema kotak pasir, menggunakan paket terkompresi (.zip) dengan folder, yang berisi profil & ikon . Dan kami juga menyebut tema jarak jauh . Pengguna dapat mengunduh melalui jaringan dari server. Server dapat mengunggah dinamis multi tema, dan kemudian pengguna dapat mengunduh dari aplikasi.
Tentang Saran Format Data Tema Jarak Jauh, Berikan contoh: (FYI)
{
"name": "I'm a monkey",
"sakuraName": "monkey",
"url": "http:\image.tingxins.cnsakuramonkey.zip"
}
sakuraName adalah nama tema Anda. Dan url adalah alamat URL jarak jauh dari tema Sakura. (Catatan: Jika bidang Sakuraname melewati NIL, nama tema yang sesuai akan default dengan nama paket yang diunduh.)
Ketika tema jarak jauh telah diunduh, kita dapat beralih tema seperti ini:
[TXSakuraManager shiftSakuraWithName:sakuraName type:TXSakuraTypeSandBox];
Tentang beberapa menarik bagi Anda. Sakuraktit juga menyediakan beberapa API yang dapat Anda gunakan untuk mengunduh tema jarak jauh. Dan mendukung Callback Block & Delegate . Sangat mengagumkan, kan? Dan tentu saja, Anda juga dapat menyesuaikan operasi unduhan Anda sendiri untuk tema jarak jauh.
Mari kita bicarakan sekarang.
Jika Anda ingin mengunduh tema Sakura. Anda dapat menghubungi API blok tugas unduhan seperti ini. Tunjukkan kode penggunaan:
[[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
} ];
Dalam contoh ini, objek sakuraModel sesuai dengan TXSakuraDownloadProtocol . Anda dapat memeriksa sakurademo_oc untuk detail lebih lanjut dalam DownloadSakuraController .
Jika Anda ingin mengunduh tema Sakura. Anda dapat menghubungi API Delegasi Tugas Unduh seperti ini:
[[TXSakuraManager manager] tx_sakuraDownloadWithInfos:sakuraModel delegate:self];
Menerapkan metode delegasi yang Anda butuhkan.
// 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;
Anda dapat memeriksa sakurademo_oc untuk detail lebih lanjut di AppDelegate .
Jika Anda tidak ingin menggunakan API untuk mengunduh tema jarak jauh yang disediakan Sakurakit , Anda dapat menyesuaikan operasi unduhan Anda sendiri untuk tema Sakura.
Tunjukkan kode yang Anda inginkan:
// `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);
}];
T: Mengapa setiap tema memiliki profil sendiri?
A: Karena setiap tema, di samping nama ikon sama, dan warna latar belakang tema yang berbeda, ukuran font mungkin tidak sama. Jadi setiap tema harus memiliki profil sendiri, kecuali jika Anda hanya ingin membuat tema hanya untuk ikon.
T: Mengapa nama Sakura harus konsisten dengan nama profil tema yang sesuai?
A: Ini hanya konvensi untuk kita. Saat beralih tema, Sakurakit akan melalui nama tema untuk menemukan tema di jalur lokal atau di jalur pasir, membuat nama tema dan profil yang sama, Anda akan mengurangi beberapa beban kerja yang tidak perlu.
T: Apa perbedaan antara tema bundel dan kotak pasir?
A: Sebenarnya. Tema bundel, kami menyebut tema lokal. Tema jarak jauh juga disebut tema Sandbox.
T: Apakah Sakuritur memiliki versi yang ditulis dalam Swift?
A: Tidak. Akan segera hadir. Jika Anda benar -benar membutuhkannya sekarang. Berikut adalah contoh untuk menggunakan Swift dengan Sakurakitoc. (Sakurakitocforswiftdemo)
Tentu saja, Anda dapat berkontribusi pada proyek ini sepanjang waktu jika Anda mau.
Jika Anda memerlukan bantuan atau mengajukan pertanyaan umum , hanya @tingxins di Weibo atau Twitter, tentu saja, Anda dapat mengakses blog saya.
Jika Anda menemukan bug , cukup buka masalah.
Jika Anda memiliki permintaan fitur , cukup buka masalah.
Jika Anda ingin berkontribusi , garpu repositori ini, dan kemudian kirimkan permintaan tarik.
SakuraKit tersedia di bawah lisensi MIT. Lihat file lisensi untuk info lebih lanjut.
Selamat datang untuk mengikuti akun resmi saya tentang WeChat.