移動(dòng)端項(xiàng)目的開發(fā)離不開loading控件,通常為了能快速在項(xiàng)目中實(shí)現(xiàn)loading效果我們有幾個(gè)主流的開源庫可以選擇:
MBProgressHUD、SVProgressHUD等
然后抹锄,為了能讓整體項(xiàng)目的loading效果顯得更加貼切我就想創(chuàng)建一個(gè)loading控件,希望此控件能夠比較方便的開啟、停止loading效果,而且能易于集成和更換logo。
為了達(dá)到這個(gè)目的然眼,我創(chuàng)建了一個(gè)名為ZYLoading的控件艾船,下面就為大家分享一下我這個(gè)控件的原理以及使用方法。
原理分析
此控件的核心思想是利用runtime機(jī)制給分類增加成員屬性,通過給UIView擴(kuò)展開啟屿岂、停止loading的方法践宴,從而實(shí)現(xiàn)任何UIView的實(shí)例都能方便的開啟、停止loading動(dòng)畫
#import "UIView+ZYLoadingView.h"
#import <objc/runtime.h>
static char LoadingViewKey;
@implementation UIView (ZYLoadingView)
#pragma mark - Setter
// 將創(chuàng)建的ZYLoadingView實(shí)例關(guān)聯(lián)到分類
- (void)setLoadingView:(ZYLoadingView *)loadingView {
[self willChangeValueForKey:@"LoadingViewKey"];
objc_setAssociatedObject(self, &LoadingViewKey, loadingView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self didChangeValueForKey:@"LoadingViewKey"];
}
// 獲取關(guān)聯(lián)的ZYLoadingView
- (ZYLoadingView *)loadingView {
return objc_getAssociatedObject(self, &LoadingViewKey);
}
// 開啟動(dòng)畫
- (void)beginLoading {
if (!self.loadingView) {
self.loadingView = [[ZYLoadingView alloc] initWithFrame:self.bounds];
}
[self addSubview:self.loadingView];
[self.loadingView startAnimation];
}
// 停止動(dòng)畫
- (void)endLoading {
if (self.loadingView) {
[self.loadingView stopAnimation];
}
}
@end
使用方法
通過一組圖片組合成動(dòng)畫
// 通過枚舉選擇圖片組合動(dòng)畫
ZYLoadingConfigInstance.loadingType = ZYLoadingAnimateImages;
// 圖片名稱
ZYLoadingConfigInstance.animateImageName = @"zy_loading_";
// 圖片尺寸
ZYLoadingConfigInstance.loopImageSize = CGSizeMake(37, 13);
// 動(dòng)畫過渡時(shí)長
ZYLoadingConfigInstance.duration = 1.f;
通過一張圖旋轉(zhuǎn)形成動(dòng)畫
// 通過枚舉選擇通過旋轉(zhuǎn)圖片展現(xiàn)loading動(dòng)畫
ZYLoadingConfigInstance.loadingType = ZYLoadingLoopImage;
// 圖片名稱
ZYLoadingConfigInstance.loopImage = [UIImage imageNamed:@"loading_circle"];
// 圖片尺寸
ZYLoadingConfigInstance.loopImageSize = CGSizeMake(60, 60);
// 動(dòng)畫過渡時(shí)長
ZYLoadingConfigInstance.duration = 0.25f;
通過一張圖片旋轉(zhuǎn)爷怀,另一張圖片漸隱漸顯組合成動(dòng)畫
// 通過枚舉選擇通過旋轉(zhuǎn)圖片展現(xiàn)loading動(dòng)畫 ZYLoadingConfigInstance.loadingType = ZYLoadingLoopImage;
// 圖片名稱
ZYLoadingConfigInstance.loopImage = [UIImage imageNamed:@"loading_circle"];
// 圖片尺寸
ZYLoadingConfigInstance.loopImageSize = CGSizeMake(60, 60);
// logo圖片名稱
ZYLoadingConfigInstance.logoImage = [UIImage imageNamed:@"loading_zhangyu"];
// logo圖片尺寸
ZYLoadingConfigInstance.logoImageSize = CGSizeMake(40, 40);
// 動(dòng)畫過渡時(shí)長
ZYLoadingConfigInstance.duration = 0.25f;
開啟阻肩、停止動(dòng)畫
// 開啟動(dòng)畫
[self.view beginLoading];
// 停止動(dòng)畫
[self.view endLoading];
你也可以直接參考github上的ZYLoading