Sakurakit 은 Swifttheme 과 Dknightversion 에서 영감을 얻은 테마 나 스킨을 전환하기위한 가볍고 강력한 라이브러리입니다. 체인 및 기능적 프로그래밍을 제공하므로 코드에 더 읽을 수 있습니다.
中文介绍
데모 의 경우 작업 공간의 iOS 예제 프로젝트 인 Sakurademo_oc를 살펴보십시오. 다운로드 후 pod install 실행해야합니다.
sakura 다음과 같은 theme 의미합니다. 이제 앱을 위해 사쿠라.
프로젝트에서 Sakurakit을 사용하는 세 가지 방법이 있습니다.
코코 포드 사용
수동
카르타고 사용
Cocoapods는 Objective-C의 종속성 관리자로 프로젝트에서 3 자 라이브러리를 사용하는 프로세스를 자동화하고 단순화합니다.
포드 파일
platform :ios, '8.0'
pod 'SakuraKit'
Repo의 zip을 다운로드하고 Sakurakit 폴더의 모든 파일을 프로젝트로 드래그하십시오.
Carthage는 종속성을 구축하고 이진 프레임 워크를 제공하는 분산 형 종속 관리자입니다.
다음 명령을 사용하여 Homebrew로 Carthage를 설치할 수 있습니다.
$ brew update
$ brew install carthage
Carthage를 사용하여 Sakurakit을 Xcode 프로젝트에 통합하려면 Cartfile에 지정하십시오.
github "tingxins/SakuraKit"
Carthage를 실행하여 프레임 워크를 구축하고 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 프로필은 앱을 현지화하는 것을 좋아합니다.)
Sakurakit은 .json & .plist 형식의 파일을 모두 지원합니다. .json 파일 예제. 다음과 같이 구성해야 할 수도 있습니다.
{
"Home":{
"buttonBackgroundColor":"#BB503D",
"buttonTitleColor":"#4AF2A1"
}
}
위에서 볼 수 있듯이, 우리는 Home.buttonBackgroundColor 의 리터럴이라는 것을 알 수 있습니다. ButtonbackgroundColor와 Home.buttonTitleColor 사전의 KeyPath 입니다. Sakurakit은 항상 Color/Iconname/Text/Fontsize와 같은 앱의 프로필 전환 테마 또는 스킨에서 값을 가져옵니다.
지침:
번들 테마는 앱 번들에 있습니다. 우리는 또한 지역 테마를 불렀습니다. 우리는 항상 앱의 기본 테마를 구성해야합니다. 물론 Sakurakit은 다음 단계에 따라 앱에 멀티 번들 테마를 추가 할 수 있습니다.
먼저 [ SakuraName ] .json 프로파일을 만듭니다. SakuraName 이 테마 이름인지 확인하십시오. 예를 들어, typewriter 이름이 지정된 새로운 번들 테마를 추가하려면 해당 프로필의 이름을 typewriter.json 으로 지정해야합니다.
다음으로 typewriter 테마에 대한 아이콘을 구성하십시오. 아이콘 이름은 다른 로컬 테마와 구별해야합니다. 예를 들어. 기본 테마에서 cm2_btm_icn_account 라는 아이콘을 사용하는 경우 typewriter 테마의 해당 아이콘을이 cm2_btm_icn_account_xxx 처럼 이름을 지정해야합니다.
1 단계와 2 단계 후. AppDelegate에 모든 지역 사쿠라 테마를 등록해야합니다. ( 기본 테마는 무시할 수 있습니다.)
- (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를 제공합니다. Block & Delegate Callback을 모두 지원합니다. 아주 굉장해? 물론 원격 테마를 위해 자신의 다운로드 작업을 사용자 정의 할 수도 있습니다.
지금 그것에 대해 이야기합시다.
사쿠라 테마를 다운로드하려면 이와 같이 다운로드 작업 블록 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 : 사쿠라 이름이 해당 테마의 프로필 이름과 일치 해야하는 이유는 무엇입니까?
A : 이것은 우리를위한 컨벤션 일뿐입니다. 테마를 전환 할 때 Sakurakit은 테마 이름을 통해 로컬 또는 샌드 박스 경로에서 테마를 찾아 테마와 프로필 이름이 동일하게 만들어 주면 불필요한 워크로드가 줄어 듭니다.
Q : 번들과 샌드 박스 테마의 차이점은 무엇입니까?
A : 사실. 번들 테마, 우리는 로컬 테마를 불렀습니다. 원격 테마는 샌드 박스 테마라고도합니다.
Q : Sakurakit에는 Swift로 작성된 버전이 있습니까?
A : 아니요. 곧 올 것입니다. 당신이 지금 정말로 필요하다면. 다음은 Sakurakitoc과 Swift를 사용하는 예입니다. (Sakurakitocforswiftdemo)
물론, 원한다면 항상이 프로젝트에 기여할 수 있습니다.
도움이 필요하거나 일반적인 질문이 있으면 Weibo 또는 Twitter의 @TingSins 만 있으면 내 블로그 에 액세스 할 수 있습니다.
버그를 찾았 다면 문제를여십시오.
기능 요청이있는 경우 문제를 열십시오.
기여하려면 이 저장소를 포크 한 다음 풀 요청을 제출하십시오.
SakuraKit MIT 라이센스에 따라 제공됩니다. 자세한 내용은 라이센스 파일을 참조하십시오.
WeChat에 대한 공식 계정을 따라 오신 것을 환영합니다.