iOS UIActivityIndicatorView基本使用
阿新 • • 發佈:2020-06-24
在安卓系統中,Loading指示器系統為我們提供了ProgressDialog,後面被廢棄了,推薦直接使用ProgressBar來顯示,但風格和設計師要求的往往衝突,都需要我們自定義。而iOS提供了UIActivityIndicatorView控制元件來表示Loading狀態,而且還蠻好看的。
指示器建立
UIActivityIndicatorView就是一個View,我們將它例項化後,新增到ViewController的View即可。
- 指示器樣式
指示器alloc後,需要通過initWithActivityIndicatorStyle進行初始化,需要傳入一個樣式列舉,列舉值有以下3種:
typedef NS_ENUM(NSInteger,UIActivityIndicatorViewStyle) {
UIActivityIndicatorViewStyleWhiteLarge,//大號,白色
UIActivityIndicatorViewStyleWhite,//小號,白色
UIActivityIndicatorViewStyleGray,//小號,灰色
};
複製程式碼
- 指示器建立
懶載入的方式,初始化指示器,並且給指示器設定在控制器的中間顯示,注意,預設只有一個菊花在轉,黑色背景和圓角需要自己設定。
@interface ViewController ()
@property(nonatomic,strong) UIActivityIndicatorView *activityIndicator;
@end
@implementation ViewController
/**
* 懶載入初始化UIActivityIndicatorView
*/
- (UIActivityIndicatorView *)activityIndicator {
if (_activityIndicator == nil) {
/**
* 建立指示器,並設定樣式
* UIActivityIndicatorViewStyleWhiteLarge,大號,白色
* UIActivityIndicatorViewStyleWhite,小號,白色
* UIActivityIndicatorViewStyleGray,小號,灰色
*/
_activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
//設定指示器的位置和寬高
_activityIndicator.frame = CGRectMake(0,100,100);
//設定在螢幕中心顯示
_activityIndicator.center = CGPointMake(self.view.center.x,self.view.center.y);
_activityIndicator.backgroundColor = [UIColor blackColor];
//將背景設定圓角
_activityIndicator.layer.cornerRadius = 8;
}
return _activityIndicator;
}
複製程式碼
- 設定指示器一開始先隱藏(預設一開始會顯示,並且不會轉動)
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.activityIndicator];
//設定旋轉結束時隱藏,預設為NO,進入介面時會顯示,並且菊花圈靜止不動,設定為YES,則一開始不顯示,停止時也會隱藏
self.activityIndicator.hidesWhenStopped = YES;
}
複製程式碼
樣式拓展
- 菊花的圈圈可以設定顏色,iOS5時新增的Api
self.activityIndicator.color = [UIColor redColor];
複製程式碼
基本使用
指示器為了代表Loading載入狀態,所以就只有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
複製程式碼