Sakurakit是一个轻巧且功能强大的图书馆,可用于切换主题或皮肤,灵感来自SwiftTheme和dknightversion 。它提供链条和功能性编程,这对于您的代码更可读。
中文介绍
对于演示,请看一下工作区中的iOS示例项目Sakurademo_oc。下载后,您需要运行pod install 。
sakura的意思是以下theme 。现在,樱花为您的应用程序。
您的项目中有三种使用Sakurakit的方法:
使用Cocoapods
手动的
使用迦太基
Cocoapods是Objective-C的依赖项管理器,它可以自动化并简化项目中使用第三方库的过程。
Podfile
platform :ios, '8.0'
pod 'SakuraKit'
下载Repo的邮政编码,然后只需将所有文件拖到Sakurakit文件夹中即可到达您的项目。
迦太基是一个分散的依赖管理器,可建立您的依赖关系并为您提供二进制框架。
您可以使用以下命令使用Homebrew安装迦太基:
$ brew update
$ brew install carthage
要使用迦太基将Sakurakit集成到您的Xcode项目中,请在您的Cartfile中指定:
github "tingxins/SakuraKit"
运行迦太基以构建框架并将sakurakit.framework框架拖到Xcode项目中。
这是一个示例,为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 file格式。对于.json文件示例。您可能应该这样进行配置:
{
"Home":{
"buttonBackgroundColor":"#BB503D",
"buttonTitleColor":"#4AF2A1"
}
}
如上所述,我们可以知道, Home.buttonBackgroundColor和Home.buttonTitleColor只是字典的KeyPath 。 Sakurakit始终从个人资料切换主题或您的应用中获取价值,例如color/iconName/text/fontsize.eg
防范措施:
捆绑主题存在于您的应用程序捆绑包中。我们还称之为本地主题。我们应该始终为应用程序配置默认主题。当然, Sakurakit可以按照以下步骤为您的应用添加多捆主题:
首先,创建[ SakuraName ] .json配置文件。确保SakuraName是您的主题名称。例如,如果要添加一个名为typewriter的新捆绑主题,则应将相应的配置文件命名为Typewriter.json 。
接下来,为typewriter主题配置图标。图标的名称需要与其他本地主题区分。例如。如果在默认主题中名为cm2_btm_icn_account的图标,则应该像此cm2_btm_icn_account_xxx中命名typewriter主题中的相应图标。
在第1和2步之后。您可以在AppDelegate中注册所有本地Sakura主题。 (默认主题可以忽略。)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Coding ...
[TXSakuraManager registerLocalSakuraWithNames:@[@"typewriter"]];
// Coding ...
return YES;
}
此时,我们已经配置了所有捆绑主题。我们现在可以随时切换到这些主题。例如。如果您想切换到指定的typewriter的指定捆绑主题。只需这样称呼API:
[TXSakuraManager shiftSakuraWithName:@"typewriter" type:TXSakuraTypeMainBundle];
沙盒主题,使用包含配置文件和图标的文件夹的压缩软件包(.zip)。我们还称为远程主题。用户可以通过服务器通过网络下载。服务器可以上传多个主题动态,然后用户可以从应用程序下载。
关于远程主题数据格式建议,举一个例子:(fyi)
{
"name": "I'm a monkey",
"sakuraName": "monkey",
"url": "http:\image.tingxins.cnsakuramonkey.zip"
}
sakuraName是您的主题名称。 url是樱花主题的远程URL地址。 (注意:如果Sakuraname字段通过了NIL,则相应主题的名称默认为下载软件包的名称。)
下载远程主题后,我们可以切换这样的主题:
[TXSakuraManager shiftSakuraWithName:sakuraName type:TXSakuraTypeSandBox];
关于您的一些令人兴奋的事情。 Sakurakit还提供了一些API,您可以使用这些API下载远程主题。并支持Block和Delegate回调。很棒,对吧?当然,您还可以为远程主题自定义自己的下载操作。
让我们现在谈谈。
如果您想下载樱花主题。您可以这样调用下载任务块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 。您可以在DownloadSakuraController中查看Sakurademo_oc,以获取更多详细信息。
如果您想下载樱花主题。您可以这样调用下载任务委托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;
您可以在AppDelegate中查看Sakurademo_oc,以获取更多详细信息。
如果您不想使用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将通过主题名称在本地或沙箱路径中找到主题,使主题和个人资料名称相同,您将减少一些不必要的工作量。
问:捆绑包和沙盒主题有什么区别?
答:实际上。捆绑主题,我们称之为本地主题。远程主题也称为沙盒主题。
问:Sakurakit有一个用Swift编写的版本吗?
答:不。如果您现在真的需要它。这是将Swift与Sakurakitoc一起使用的示例。 (Sakurakitocforswiftdemo)
绝对,如果您愿意,您可以一直为该项目做出贡献。
如果您需要帮助或提出一般性问题,则只需在微博或Twitter中的@tingxins ,您就可以访问我的博客。
如果您发现一个错误,只需打开一个问题即可。
如果您有功能请求,请打开问题。
如果您想贡献,请提供此存储库,然后提交拉动请求。
SakuraKit可根据MIT许可获得。有关更多信息,请参见许可证文件。
欢迎遵循我对微信的官方帐户。