使用 Alerts 警告訊息製作等待畫面,顧名思義就是在 Alerts View 中加入 Progress View 與 ActivityIndicator View,告知使用者目前系統的執行狀態和進度,在按下「顯示讀取視窗」的按鈕之後隨即跳出 Alerts View,並在 Progress View 進度到達 100% 時自動關閉 Alerts View。至於要如何來呈現,請看以下示範。
由於元件在其他文章都已經做過介紹,所以如果有任何問題可以參考以下四篇文章。
首先在 @interface 區段宣告三個變數,方便接下來在程式中控制它們。
UIAlertView *alertView;
UIProgressView *progressView;
NSTimer *timer;
接著在按鈕事件中鍵入以下程式碼。
- (IBAction)onLoadingButton:(id)sender {
//設定alertView的標題
alertView = [[[UIAlertView alloc]initWithTitle:@"存取中請稍後...." message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:nil]autorelease];
[alertView show];
//設定indicator位置並加入alertView
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
indicator.center = CGPointMake(alertView.bounds.size.width / 2, alertView.bounds.size.height - 50);
[indicator startAnimating];
[alertView addSubview:indicator];
//設定progressView的大小與位置並加入alertView
progressView = [[[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar]autorelease];
progressView.frame = CGRectMake(15, indicator.center.y + 20, 250, 8);
[alertView addSubview:progressView];
[indicator release];
//設定Timer 每秒五次
float theInterval = 1.0 / 5.0;
timer = [NSTimer scheduledTimerWithTimeInterval:theInterval target:self selector:@selector(running) userInfo:nil repeats:YES];
}
上述程式碼中,由於 ActivityIndicator View 只是一個動畫,並沒有需要特別控制它,所以就不在 @interface 區段做宣告,並使用 autorelease 來做記憶體釋放,隨著 Alerts View 消失 ActivityIndicator View 也會跟著消失。
最後就是被計時器 Timer 所觸發的 running 函式。
- (void)running {
if (progressView.progress != 1.0) {
progressView.progress = progressView.progress + 0.1;
}
else {
//結束顯示alertView與計時器
[alertView dismissWithClickedButtonIndex:0 animated:YES];
[timer invalidate];
timer = nil;
}
}
如果只是結束顯示 Alerts View 而沒有將 Timer 暫停,將會在下一次按下按鈕觸發 Timer 時導致程式 crash。
沒有留言:
張貼留言