1. 程式人生 > IOS開發 >iOS UIActivityIndicatorView基本使用

iOS UIActivityIndicatorView基本使用

在安卓系統中,Loading指示器系統為我們提供了ProgressDialog,後面被廢棄了,推薦直接使用ProgressBar來顯示,但風格和設計師要求的往往衝突,都需要我們自定義。而iOS提供了UIActivityIndicatorView控制元件來表示Loading狀態,而且還蠻好看的。

iOS-UIActivityIndicatorView示例.png

指示器建立

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
複製程式碼