Sakurakit , é uma biblioteca leve e poderosa para aplicar a troca de temas ou skins, inspirada no SwiftTheMe e Dknightversion . Sua programação de cadeia e funcional, que é mais legível para seus códigos.
中文介绍
Para a demonstração , dê uma olhada no sakurademo_oc, um projeto de exemplo do iOS no espaço de trabalho. Você precisará executar pod install após o download.
sakura MELIGH theme COMO AIMENTO. Agora, Sakura para seus aplicativos.
Existem três maneiras de usar o Sakurakit em seu projeto:
Usando cocoapods
Manual
Usando cartago
O Cocoapods é um gerente de dependência do Objective-C, que automatiza e simplifica o processo de uso de bibliotecas de terceiros em seus projetos.
Podfile
platform :ios, '8.0'
pod 'SakuraKit'
Faça o download do ZIP do Repo e apenas arraste todos os arquivos na pasta Sakurakit para seus projetos.
Cartago é um gerente de dependência descentralizado que cria suas dependências e fornece estruturas binárias.
Você pode instalar Cartago com Homebrew usando o seguinte comando:
$ brew update
$ brew install carthage
Para integrar o Sakurakit ao seu projeto Xcode usando Cartago, especifique -o no seu arquivo Cart:
github "tingxins/SakuraKit"
Execute o Cartago para construir as estruturas e arrastar a estrutura Sakurakit.Framework para o seu projeto Xcode.
Aqui está um exemplo, configure skins para UIButton como um exemplo a seguir.
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
button.sakura
.backgroundColor(@"Home.buttonBackgroundColor")
.titleColor(@"Home.buttonTitleColor", UIControlStateNormal);
Obviamente, como o código mostra. Ele está apenas configurando backgroundColor e titleColor of Skin para um botão. Se você deseja mudar o tema ou a pele para seus aplicativos. Basta chamar isso de API Use TXSakuraManager :
// name: name of a theme or skin.
// type: TXSakuraTypeMainBundle or TXSakuraTypeSandBox
+ (BOOL)shiftSakuraWithName:(TXSakuraName *)name type:(TXSakuraType)type;
Para linhas de código acima. Você pode ficar intrigado com alguns literais, como Home.buttonBackgroundColor ou Home.buttonTitleColor . Não se preocupe, focaremos em como configurar um perfil para Sakura passo a passo mais tarde.
Agora, vamos nos concentrar no perfil. Em resumo, o perfil é uma maneira simples de gerenciar o tema ou a pele para sua configuração de aplicativo em um projeto. (Na verdade, o perfil Sakura é apenas como localizar seu aplicativo.)
Sakurakit suporta o formato .json e .plist de arquivo. Para .json exemplo de arquivo. você pode fazer configurar assim:
{
"Home":{
"buttonBackgroundColor":"#BB503D",
"buttonTitleColor":"#4AF2A1"
}
}
Como mostra acima, podemos saber que os literais de Home.buttonBackgroundColor e Home.buttonTitleColor são apenas um KeyPath para o dicionário. Sakurakit sempre busca o valor do tema ou pele de troca de perfil para o seu aplicativo, como cor/iConname/text/fontsize.eg
Precauções:
Os temas do pacote existem em seu pacote de aplicativos. Também chamamos de tema local . Devemos sempre configurar um tema padrão para o aplicativo. Obviamente, Sakurakit pode adicionar temas de pacote múltiplo ao seu aplicativo seguindo estas etapas:
Primeiro, crie [ SakuraName ] .json Perfil. Certifique -se de que o SakuraName seja o nome do seu tema. Por exemplo, se você deseja adicionar um novo tema de pacote que nomeou typewriter , o perfil correspondente deve ser nomeado typewriter.json .
Em seguida, configure os ícones para o tema typewriter . E o nome dos ícones precisa ser distinguido com outro tema local. Por exemplo. Se um ícone chamado cm2_btm_icn_account no tema padrão , o ícone correspondente no tema typewriter deve ser nomeado como este cm2_btm_icn_account_xxx .
Após a etapa 1 e 2. Você pode registrar todo o tema local Sakura no AppDelegate. (O tema padrão pode ser ignorado.)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Coding ...
[TXSakuraManager registerLocalSakuraWithNames:@[@"typewriter"]];
// Coding ...
return YES;
}
Neste ponto, configuramos todos os temas de pacote. Podemos mudar para esses temas a qualquer momento. Por exemplo. Se você deseja mudar para um tema especificado de pacote que nomeou typewriter . Basta ligar para a API assim:
[TXSakuraManager shiftSakuraWithName:@"typewriter" type:TXSakuraTypeMainBundle];
Os temas de sandbox, usando o pacote compactado (.zip) com uma pasta, que contém perfil e ícones . E também chamamos de tema remoto . O usuário pode baixar através da rede do servidor. O servidor pode fazer upload de vários temas dinâmicos e, em seguida, o usuário pode baixar do aplicativo.
Sobre a sugestão de formato de dados do tema remoto, dê um exemplo: (FYI)
{
"name": "I'm a monkey",
"sakuraName": "monkey",
"url": "http:\image.tingxins.cnsakuramonkey.zip"
}
sakuraName é o nome do seu tema. E url é um endereço de URL remoto do tema Sakura. (Nota: se o campo de Sakuraname passou nil, o nome do tema correspondente será o padrão do nome do pacote baixado.)
Quando o tema remoto foi baixado, podemos mudar o tema como este:
[TXSakuraManager shiftSakuraWithName:sakuraName type:TXSakuraTypeSandBox];
Sobre alguns emocionantes para você. Sakurakit também fornece algumas API que você pode ser usado para baixar o tema remoto. E suporta o retorno de chamada de Block & Delegate . Muito incrível, certo? E, é claro, você também pode personalizar sua própria operação de download para tema remoto.
Vamos falar sobre isso agora.
Se você deseja baixar um tema Sakura. Você pode chamar a API do bloco de tarefas de download como esta. Mostre o código de uso de uso:
[[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
} ];
Neste exemplo, o objeto do sakuraModel está em conformidade com TXSakuraDownloadProtocol . Você pode conferir Sakurademo_oc para obter mais detalhes no DownloadSakuraController .
Se você deseja baixar um tema Sakura. Você pode chamar a API delegada da tarefa de download como esta:
[[TXSakuraManager manager] tx_sakuraDownloadWithInfos:sakuraModel delegate:self];
Implementar métodos de delegados que você precisa.
// 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;
Você pode conferir sakurademo_oc para obter mais detalhes no AppDelegate .
Se você não deseja usar a API para baixar o tema remoto que o Sakurakit forneceu, poderá personalizar sua própria operação de download para o tema Sakura.
Mostre o código que você deseja:
// `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);
}];
P: Por que cada tema tem seu próprio perfil?
R: Como cada tema, ao lado do nome dos ícones, é o mesmo, e os temas diferentes da cor de fundo, o tamanho da fonte pode não ser o mesmo. Portanto, cada tema deve ter seu próprio perfil, a menos que você queira apenas criar tema para ícones.
P: Por que o nome de Sakura deve ser consistente com o nome do perfil do tema correspondente?
A: Esta é apenas uma convenção para nós. Ao mudar o tema, Sakurakit, através do nome do tema, para encontrar o tema no caminho local ou no Sandbox, tornando o mesmo tema e o nome do perfil o mesmo, você reduzirá uma carga de trabalho desnecessária.
P: Qual é a diferença entre os temas de pacote e sandbox?
A: Na verdade. Tema do pacote, chamamos o tema local. Tema remoto também chamado de tema Sandbox.
P: Sakurakit tem uma versão escrita em Swift?
A: Não. Em breve. Se você realmente precisa disso agora. Aqui está um exemplo para usar o Swift com Sakurakitoc. (SakurakitocforswiftDemo)
Absolutamente, você pode contribuir para este projeto o tempo todo, se quiser.
Se você precisar de ajuda ou fazer uma pergunta geral , apenas @tingxins no Weibo ou no Twitter, é claro, você pode acessar meu blog .
Se você encontrou um bug , basta abrir um problema.
Se você tiver uma solicitação de recurso , basta abrir um problema.
Se você deseja contribuir , bifurque este repositório e envie uma solicitação de tração.
SakuraKit está disponível sob a licença do MIT. Consulte o arquivo de licença para obter mais informações.
Bem -vindo a seguir meu relato oficial do WeChat.