Sakurakit - это легкая и мощная библиотека для применения для переключения тем или шкур, вдохновленных Swifttheme и Dnightversion . Он обеспечивает цепочку и функциональное программирование, которое более читаемо для ваших кодов.
中文介绍
Для демонстрации взгляните на Sakurademo_oc, пример iOS -примера в рабочей области. Вам нужно будет запустить pod install после загрузки.
sakura означает theme следующей. Теперь Сакура за ваши приложения.
В вашем проекте есть три способа использовать Sakurakit :
Используя кокопод
Руководство
Используя Карфаген
Cocoapods является менеджером зависимостей для Objective-C, который автоматизирует и упрощает процесс использования 3-й личной библиотеки в ваших проектах.
Подфил
platform :ios, '8.0'
pod 'SakuraKit'
Загрузите ZIP Repo и просто перетащите все файлы в папке Sakurakit в свои проекты.
Карфаген - это децентрализованный менеджер зависимостей, который строит ваши зависимости и предоставляет вам двоичные рамки.
Вы можете установить Carthage с Homebrew, используя следующую команду:
$ brew update
$ brew install carthage
Чтобы интегрировать Sakurakit в ваш проект Xcode с помощью Carthage, укажите его в своем Cartfile:
github "tingxins/SakuraKit"
Запустите Карфаген, чтобы построить рамки и перетащить платформу 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 кожи для кнопки. Если вы хотите поменять тему или кожу для своих приложений. Просто назовите этот API, используйте TXSakuraManager :
// name: name of a theme or skin.
// type: TXSakuraTypeMainBundle or TXSakuraTypeSandBox
+ (BOOL)shiftSakuraWithName:(TXSakuraName *)name type:(TXSakuraType)type;
Для строк кода выше. Вы можете быть озадачены некоторыми литералами, такими как Home.buttonBackgroundColor или Home.buttonTitleColor . Не беспокойтесь, мы сосредоточимся на том, как настроить профиль для Sakura шаг за шагом.
Теперь давайте сосредоточимся на профиле. Короче говоря, профиль - это простой способ управления темой или кожей для настройки вашего приложения в проекте. (На самом деле, профиль Sakura просто любит локализацию вашего приложения.)
Sakurakit поддерживает оба формата файла .json & .plist. Для примера .json. Вы можете сделать так:
{
"Home":{
"buttonBackgroundColor":"#BB503D",
"buttonTitleColor":"#4AF2A1"
}
}
Как показано выше, мы можем знать, что литералы Home.buttonBackgroundColor Buttonbackgroundcolor и Home.buttonTitleColor - это просто KeyPath для словаря. Sakurakit всегда получает значение из темы переключения профиля или кожи для вашего приложения, например, Color/Iconname/Text/fontsize.eg
Меры предосторожности:
В вашем пакете приложения существуют пакет. Мы также назвали местную тему . Мы всегда должны настроить тему по умолчанию для приложения. Конечно, Sakurakit может добавить многочисленные темы для вашего приложения, выполнив эти шаги:
Во -первых, создайте профиль [ SakuraName ] .json. Будьте уверены, что SakuraName - это имя вашей темы. Например, если вы хотите добавить новую тему пакета, которая называется typewriter , то соответствующий профиль следует назвать Typewriter.json .
Далее настройте значки для темы 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) с папкой, которая содержит профиль и значки . И мы также назвали удаленную тему . Пользователь может загружать через сеть с сервера. Сервер может загружать динамические темы с несколькими темами, а затем пользователь может загружать из приложения.
О удаленном предложении формата данных, приведите пример: (К вашему сведению)
{
"name": "I'm a monkey",
"sakuraName": "monkey",
"url": "http:\image.tingxins.cnsakuramonkey.zip"
}
sakuraName - это ваше имя темы. И url - это удаленный адрес URL -адреса темы Sakura. (Примечание. Если поле Sakuraname прошло ноль, имя соответствующей темы по умолчанию будет по умолчанию на имя загруженного пакета.)
Когда удаленная тема была загружена, мы можем переключить тему, как это:
[TXSakuraManager shiftSakuraWithName:sakuraName type:TXSakuraTypeSandBox];
О каком -то захватывающем для вас. Sakurakit также предоставляет некоторые API, которые вы можете использовать для загрузки удаленной темы. И поддерживает обратный вызов Block и Delegate . Очень круто, верно? И, конечно, вы также можете настроить свою собственную операцию загрузки для удаленной темы.
Давайте поговорим об этом сейчас.
Если вы хотите скачать тему Sakura. Вы можете позвонить в API загрузки Block Block таким. Покажите код использования:
[[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 .
Если вы хотите скачать тему Sakura. Вы можете позвонить в API Delgate Delgate Delegate API, например:
[[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);
}];
В: Почему у каждой темы есть свой профиль?
A: Поскольку каждая тема, кроме названия значков, одинакова, и в разных темах цвет фона, размер шрифта не может быть одинаковым. Таким образом, каждая тема должна иметь свой собственный профиль, если вы просто не хотите создавать тему только для значков.
В: Почему имя Сакуры должно соответствовать имени профиля соответствующей темы?
A: Это только соглашение для нас. При переключении темы Sakurakit проведет имя темы, чтобы найти тему в локальном или в пути песочницы, сделав как тема, так и имя профиля одинаковой, вы уменьшите ненужную рабочую нагрузку.
В: В чем разница между темами пакета и песочницы?
A: На самом деле. Тема комплекта, мы назвали местную тему. Отдаленная тема также называется тема песочницы.
В: Есть ли у Sakurakit версия, написанная в Swift?
A: Нет. Скоро наступит. Если вам это действительно нужно сейчас. Вот пример для использования Swift с Sakurakitoc. (Sakurakitocforswiftdemo)
Абсолютно , вы можете внести свой вклад в этот проект все время, если хотите.
Если вам нужна помощь или задать общий вопрос , просто @tingxins в Weibo или Twitter, конечно, вы можете получить доступ к моему блогу .
Если вы нашли ошибку , просто откройте проблему.
Если у вас есть запрос на функцию , просто откройте проблему.
Если вы хотите внести свой вклад , разделите этот репозиторий, а затем отправьте запрос на привлечение.
SakuraKit доступен по лицензии MIT. Смотрите файл лицензии для получения дополнительной информации.
Добро пожаловать, чтобы следить за моим официальным отчетом о WeChat.