在安卓系統(tǒng)中归薛,Loading指示器系統(tǒng)為我們提供了ProgressDialog谍憔,后面被廢棄了,推薦直接使用ProgressBar來顯示主籍,但風格和設計師要求的往往沖突习贫,都需要我們自定義。而iOS提供了UIActivityIndicatorView控件來表示Loading狀態(tài)千元,而且還蠻好看的苫昌。
iOS-UIActivityIndicatorView示例.png
指示器創(chuàng)建
UIActivityIndicatorView就是一個View,我們將它實例化后幸海,添加到ViewController的View即可祟身。
- 指示器樣式
指示器alloc后屋厘,需要通過initWithActivityIndicatorStyle進行初始化,需要傳入一個樣式枚舉月而,枚舉值有以下3種:
typedef NS_ENUM(NSInteger, UIActivityIndicatorViewStyle) {
UIActivityIndicatorViewStyleWhiteLarge,//大號汗洒,白色
UIActivityIndicatorViewStyleWhite,//小號,白色
UIActivityIndicatorViewStyleGray,//小號父款,灰色
};
- 指示器創(chuàng)建
懶加載的方式溢谤,初始化指示器,并且給指示器設置在控制器的中間顯示憨攒,注意世杀,默認只有一個菊花在轉,黑色背景和圓角需要自己設置肝集。
@interface ViewController ()
@property(nonatomic, strong) UIActivityIndicatorView *activityIndicator;
@end
@implementation ViewController
/**
* 懶加載初始化UIActivityIndicatorView
*/
- (UIActivityIndicatorView *)activityIndicator {
if (_activityIndicator == nil) {
/**
* 創(chuàng)建指示器瞻坝,并設置樣式
* UIActivityIndicatorViewStyleWhiteLarge,大號杏瞻,白色
* UIActivityIndicatorViewStyleWhite所刀,小號,白色
* UIActivityIndicatorViewStyleGray捞挥,小號浮创,灰色
*/
_activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
//設置指示器的位置和寬高
_activityIndicator.frame = CGRectMake(0, 0, 100, 100);
//設置在屏幕中心顯示
_activityIndicator.center = CGPointMake(self.view.center.x, self.view.center.y);
_activityIndicator.backgroundColor = [UIColor blackColor];
//將背景設置圓角
_activityIndicator.layer.cornerRadius = 8;
}
return _activityIndicator;
}
樣式拓展
- 菊花的圈圈可以設置顏色,iOS5時添加的Api
self.activityIndicator.color = [UIColor redColor];
基本使用
指示器為了代表Loading加載狀態(tài)砌函,所以就只有3個方法常用斩披,分別是:顯示、隱藏和判斷是否正在顯示讹俊。
- 顯示指示器
/**
* 顯示轉圈菊花
*/
- (void) showIndicator {
[self.activityIndicator startAnimating];
}
- 隱藏指示器
/**
* 隱藏轉圈菊花
*/
- (void) hideIndicator {
[self.activityIndicator stopAnimating];
}
- 判斷是否正在顯示
/**
* 是否正在顯示
*/
- (BOOL) isShowIndicator {
return [self.activityIndicator isAnimating];
}
示例
@interface ViewController ()
@property(nonatomic, strong) UIActivityIndicatorView *activityIndicator;
@end
@implementation ViewController
//...省略上面提到的Api
/**
* 點擊屏幕空白處垦沉,顯示指示器,1.5秒后隱藏
*/
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
//正在顯示仍劈,忽略
if ([self isShowIndicator]) {
return;
}
[self showIndicator];
[self performSelector:@selector(hideIndicator) withObject:nil afterDelay:1.5];
}
@end