en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

6.17.2011

使用 Alerts 警告訊息製作等待畫面

 

使用 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。






沒有留言:

張貼留言