Sakurakitは、 SwiftThemeとDknightversionに触発された、テーマやスキンを切り替えるための適用のための軽量で強力なライブラリです。チェーンと機能のプログラミングを提供します。これは、コードにより読みやすくなります。
中文介绍
デモについては、ワークスペースのiOS例プロジェクトであるsakurademo_ocをご覧ください。ダウンロード後にpod installを実行する必要があります。
sakura次のようにthemeを意味します。さて、あなたのアプリのためにさくら。
あなたのプロジェクトでsakurakitを使用する3つの方法があります:
ココアポッドを使用します
マニュアル
カルタゴの使用
Cocoapodsは、Objective-Cの依存マネージャーであり、プロジェクトでサードパーティライブラリを使用するプロセスを自動化および簡素化します。
Podfile
platform :ios, '8.0'
pod 'SakuraKit'
Repoのzipをダウンロードして、 Sakurakitフォルダー内のすべてのファイルをプロジェクトにドラッグするだけです。
Carthageは、依存関係を構築し、バイナリフレームワークを提供する分散型依存関係マネージャーです。
次のコマンドを使用して、HomeBrewでCarthageをインストールできます。
$ brew update
$ brew install carthage
SakurakitをCarthageを使用してXcodeプロジェクトに統合するには、Cartfileで指定します。
github "tingxins/SakuraKit"
Carthageを実行してフレームワークを構築し、 Sakurakit.Framework 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のプロフィールはアプリのローカル化が好きです。)
Sakurakitは、.json&.plist形式のファイルの両方をサポートしています。 .jsonファイルの例の場合。このように構成を行う必要があります。
{
"Home":{
"buttonBackgroundColor":"#BB503D",
"buttonTitleColor":"#4AF2A1"
}
}
上記のように、 Home.buttonBackgroundColorとHome.buttonTitleColorのリテラルは辞書のKeyPathです。 sakurakitは、色/iconname/text/fontsize.egなど、アプリのテーマまたはスキンのプロファイルの切り替えから常に値を取得します。
予防:
バンドルテーマはアプリバンドルに存在します。また、ローカルテーマとも呼ばれます。常にアプリのデフォルトテーマを構成する必要があります。もちろん、 Sakurakitは、次の手順に従ってアプリにマルチバンドルテーマを追加できます。
最初に、[ SakuraName ] .jsonプロファイルを作成します。 SakuraNameがあなたのテーマ名であることを確認してください。たとえば、 typewriterという名前の新しいバンドルテーマを追加する場合は、対応するプロファイルにTypewriter.jsonという名前にする必要があります。
次に、 typewriterテーマのアイコンを構成します。アイコンの名前は、他のローカルテーマと区別する必要があります。例えば。デフォルトテーマのcm2_btm_icn_accountという名前のアイコンの場合、 typewriterテーマの対応するアイコンには、このcm2_btm_icn_account_xxxのように名前が付けられます。
ステップ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は、SakuraテーマのリモートURLアドレスです。 (注:SakuranameフィールドがNILを通過した場合、対応するテーマの名前はダウンロードされたパッケージの名前にデフォルトになります。)
リモートテーマがダウンロードされたら、このようなテーマを切り替えることができます。
[TXSakuraManager shiftSakuraWithName:sakuraName type:TXSakuraTypeSandBox];
あなたにとってエキサイティングなことについて。 Sakurakitは、リモートテーマのダウンロードに使用できる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);
}];
Q:各テーマに独自のプロファイルがあるのはなぜですか?
A:アイコンの名前の横にある各テーマは同じであり、異なるテーマの背景色であるため、フォントサイズは同じではないかもしれません。そのため、アイコンのみをテーマにしたい場合を除き、各テーマには独自のプロファイルが必要です。
Q:Sakuraの名前が、対応するテーマのプロファイル名と一致するのはなぜですか?
A:これは私たちにとっての慣習にすぎません。テーマを切り替えると、Sakurakitはテーマ名を介してローカルまたはサンドボックスパスでテーマを見つけ、テーマとプロファイルの両方の名前を同じようにすると、不要なワークロードを減らします。
Q:バンドルテーマとサンドボックスのテーマの違いは何ですか?
A:実際。バンドルテーマでは、ローカルテーマを呼びました。サンドボックステーマとも呼ばれるリモートテーマ。
Q:SakurakitにはSwiftで書かれたバージョンがありますか?
A:いいえ。あなたが本当にそれを本当に必要としているなら。 SakurakitocでSwiftを使用する例は次のとおりです。 (sakurakitocforswiftdemo)
絶対に、あなたが望むなら、あなたは常にこのプロジェクトに貢献することができます。
助けが必要な場合や一般的な質問をする場合は、もちろん、WeiboまたはTwitterの@tingxinsだけです。もちろん、私のブログにアクセスできます。
バグが見つかった場合は、問題を開いてください。
機能リクエストがある場合は、問題を開くだけです。
貢献したい場合は、このリポジトリをフォークしてから、プルリクエストを送信します。
SakuraKit MITライセンスの下で入手できます。詳細については、ライセンスファイルを参照してください。
WeChatの私の公式アカウントをフォローしてください。