Sakurakit ، مكتبة خفيفة الوزن وقوية للتطبيق على تبديل السمات أو الجلود ، مستوحاة من Swifttheme و Dknightversion . يوفر السلسلة والبرمجة الوظيفية ، وهذا أكثر قابلية للقراءة لرموزك.
中文介绍
للتجريبي ، ألقِ نظرة على Sakurademo_oc ، وهو مشروع مثال iOS في مساحة العمل. ستحتاج إلى تشغيل pod install بعد التنزيل.
sakura يعني theme على النحو التالي. الآن ، ساكورا لتطبيقاتك.
هناك ثلاث طرق لاستخدام Sakurakit في مشروعك:
باستخدام Cocoapods
يدوي
باستخدام قرطاج
CocoApods هو مدير التبعية لـ Objective-C ، والذي يتم أتمتة عملية استخدام المكتبات الطرف الثالثة في مشاريعك وتبسيطها.
Podfile
platform :ios, '8.0'
pod 'SakuraKit'
قم بتنزيل Zip's repo ، وقم فقط اسحب جميع الملفات في مجلد Sakurakit إلى مشاريعك.
Carthage هو مدير التبعية اللامركزي الذي يبني تبعياتك ويوفر لك الأطر الثنائية.
يمكنك تثبيت قرطاج مع Homebrew باستخدام الأمر التالي:
$ brew update
$ brew install carthage
لدمج Sakurakit في مشروع Xcode الخاص بك باستخدام قرطاج ، حدده في Cartfile:
github "tingxins/SakuraKit"
قم بتشغيل carthage لبناء الأطر وسحب إطار عمل Sakurakit.framework إلى مشروع XCode الخاص بك.
فيما يلي مثال ، قم بتكوين Skins لـ UIButton كمثال يتبع.
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
button.sakura
.backgroundColor(@"Home.buttonBackgroundColor")
.titleColor(@"Home.buttonTitleColor", UIControlStateNormal);
من الواضح ، كما يظهر الكود. إنه مجرد تكوين backgroundColor & titleColor of Skin للحصول على زر. إذا كنت ترغب في تبديل السمة أو الجلد لتطبيقاتك. فقط استدعاء واجهة برمجة التطبيقات هذه استخدم TXSakuraManager :
// name: name of a theme or skin.
// type: TXSakuraTypeMainBundle or TXSakuraTypeSandBox
+ (BOOL)shiftSakuraWithName:(TXSakuraName *)name type:(TXSakuraType)type;
لخطوط الكود أعلاه. قد تكون في حيرة من قبل بعض الحرفيين ، مثل Home.buttonBackgroundColor أو Home.buttonTitleColor . لا تقلق ، سنركز على كيفية إعداد ملف تعريف لساكورا خطوة بخطوة لاحقًا.
الآن ، دعونا نركز على الملف الشخصي. باختصار ، يعد الملف الشخصي طريقة بسيطة لإدارة السمة أو الجلد لإعداد التطبيق الخاص بك في المشروع. (في الواقع ، فإن ملف تعريف ساكورا يحب فقط توطين تطبيقك.)
يدعم Sakurakit كل من .json & .plist format of file. لـ .JSON FILE مثال. يجب عليك التكوين مثل هذا:
{
"Home":{
"buttonBackgroundColor":"#BB503D",
"buttonTitleColor":"#4AF2A1"
}
}
كما هو موضح أعلاه ، يمكننا أن نعرف أن حرفي Home.buttonBackgroundColor و Home.buttonTitleColor هو مجرد KeyPath للقاموس. ساكوراكيت دائما يجلب القيمة من موضوع تبديل الملف الشخصي أو الجلد لتطبيقك ، مثل اللون/iconname/text/fontsize.eg
احتياطات:
توجد سمات حزمة في حزمة التطبيق. كما أطلقنا على الموضوع المحلي . يجب علينا دائمًا تكوين سمة افتراضية للتطبيق. بالطبع ، يمكن لـ Sakurakit إضافة سمات حزمة متعددة لتطبيقك باتباع هذه الخطوات:
أولاً ، إنشاء [ SakuraName ] .json profile. تأكد من أن SakuraName هو اسم السمة الخاص بك. على سبيل المثال ، إذا كنت ترغب في إضافة سمة حزمة جديدة اسمها typewriter ، فيجب تسمية ملف التعريف المقابل للآلة الآلي .
بعد ذلك ، قم بتكوين الرموز لموضوع typewriter . واسم الرموز بحاجة إلى التمييز مع موضوع محلي آخر. على سبيل المثال. إذا كان أيقونة تسمى cm2_btm_icn_account في السمة الافتراضية ، فيجب تسمية الرمز المقابل في سمة typewriter مثل cm2_btm_icn_account_xxx .
بعد الخطوة 1 و 2. يجب عليك تسجيل جميع موضوع Sakura المحلي في AppDelegate. (يمكن تجاهل السمة الافتراضية .)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Coding ...
[TXSakuraManager registerLocalSakuraWithNames:@[@"typewriter"]];
// Coding ...
return YES;
}
في هذه المرحلة ، قمنا بتكوين جميع موضوعات الحزمة. يمكننا التبديل إلى هذه الموضوعات في أي وقت الآن. على سبيل المثال. إذا كنت ترغب في التبديل إلى سمة حزمة محددة أطلق عليها اسم typewriter . فقط استدعاء API مثل هذا:
[TXSakuraManager shiftSakuraWithName:@"typewriter" type:TXSakuraTypeMainBundle];
سمات صندوق الرمل ، باستخدام حزمة مضغوطة (.zip) مع مجلد ، والذي يحتوي على ملف تعريف وأيقونات . ودعا أيضا موضوع البعيد . يمكن للمستخدم التنزيلات عبر الشبكة من الخادم. يمكن للخادم تحميل Dynamic Multi Senths ، ثم يمكن للمستخدم التنزيلات من التطبيق.
حول اقتراح تنسيق بيانات السمة عن بُعد ، أعط مثالاً: (FYI)
{
"name": "I'm a monkey",
"sakuraName": "monkey",
"url": "http:\image.tingxins.cnsakuramonkey.zip"
}
sakuraName هو اسم السمة الخاص بك. وعنوان url هو عنوان URL عن بعد لموضوع Sakura. (ملاحظة: إذا تم تمرير حقل Sakuraname NIL ، فسيقوم اسم السمة المقابلة بالتخلف عن اسم الحزمة التي تم تنزيلها.)
عند تنزيل السمة عن بُعد ، يمكننا تبديل السمة مثل هذا:
[TXSakuraManager shiftSakuraWithName:sakuraName type:TXSakuraTypeSandBox];
عن بعض المثير بالنسبة لك. يوفر Sakurakit أيضًا بعض واجهة برمجة التطبيقات التي يمكنك استخدامها لتنزيل السمة عن بُعد. ويدعم كلاً من رد Block Delegate . رائع جدا ، أليس كذلك؟ وبالطبع ، يمكنك أيضًا تخصيص عملية التنزيل الخاصة بك للموضوع عن بُعد.
لنتحدث عن ذلك الآن.
إذا كنت ترغب في تنزيل موضوع ساكورا. يمكنك استدعاء API Task Block API مثل هذا. إظهار رمز الاستخدام:
[[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
} ];
في هذا المثال ، يتوافق كائن sakuraModel مع TXSakuraDownloadProtocol . يمكنك الاطلاع على Sakurademo_oc لمزيد من التفاصيل في DownloadSakuraController .
إذا كنت ترغب في تنزيل موضوع ساكورا. يمكنك استدعاء API مندوب تنزيل Task مثل هذا:
[[TXSakuraManager manager] tx_sakuraDownloadWithInfos:sakuraModel delegate:self];
تنفيذ أساليب المندوب التي تحتاجها.
// 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;
يمكنك التحقق من Sakurademo_oc لمزيد من التفاصيل في AppDelegate .
إذا كنت لا ترغب في استخدام API لتنزيل السمة عن بُعد التي قدمها Sakurakit ، فيمكنك تخصيص عملية التنزيل الخاصة بك لموضوع Sakura.
أظهر الرمز الذي تريده:
// `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);
}];
س: لماذا كل موضوع لديه ملف تعريفه الخاص؟
ج: لأن كل سمة ، بجانب اسم الرموز هي نفسها ، وقد لا يكون حجم الخطوط المختلفة للموضوعات ، حجم الخط هو نفسه. لذلك يجب أن يكون لكل موضوع ملفه الشخصي الخاص ، إلا إذا كنت ترغب فقط في جعل موضوع الرموز فقط.
س: لماذا يجب أن يكون اسم ساكورا متسقًا مع اسم ملف تعريف السمة المقابلة؟
ج: هذه مجرد اتفاقية بالنسبة لنا. عند تبديل السمة ، سيقوم Sakurakit من خلال اسم السمة للعثور على السمة في مسار صندوق الرمل المحلي أو في مسار Sandbox ، مما يجعل كل من السمة واسم الملف الشخصي متماثلين ، سوف تقلل من عبء العمل غير الضروري.
س: ما هو الفرق بين موضوعات الحزمة وعلبة الرمل؟
ج: في الواقع. موضوع الحزمة ، ودعا الموضوع المحلي. موضوع عن بعد يسمى أيضا Sandbox موضوع.
س: هل لدى Sakurakit نسخة كتبها Swift؟
ج: لا. سوف يأتي قريبا. إذا كنت حقا بحاجة إليها الآن. إليك مثال على استخدام Swift مع Sakurakitoc. (Sakurakitocforswiftdemo)
بالتأكيد ، يمكنك المساهمة في هذا المشروع طوال الوقت إذا كنت ترغب في ذلك.
إذا كنت بحاجة إلى مساعدة أو طرح سؤال عام ، فقط Tingxins في Weibo أو Twitter ، بالطبع ، يمكنك الوصول إلى مدونتي .
إذا وجدت خطأ ، فما عليك سوى فتح مشكلة.
إذا كان لديك طلب ميزة ، فما عليك سوى فتح مشكلة.
إذا كنت ترغب في المساهمة ، شوك هذا المستودع ، ثم إرسال طلب سحب.
SakuraKit متاح تحت رخصة معهد ماساتشوستس للتكنولوجيا. انظر ملف الترخيص لمزيد من المعلومات.
مرحبًا بك لمتابعة حسابي الرسمي لـ WeChat.