2010-04-14 96 views
0

我正試圖在iPhone應用程序中創建一個活動指示器。問題是,我不能讓它出現在實際的任務之前,我希望它已經完成顯示。關於iPhone的操作順序,有沒有什麼特別的東西?如何讓UIView即時顯示?

這裏是我的問題的代碼(在我的應用程序委託):

-(BOOL)showProgressView: (NSString *) message { 
self.progress = [[UIView alloc] initWithFrame:window.frame]; 

UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"squircle.png"]]; 
[img setAlpha:0.5]; 
[img setFrame:CGRectMake(94, 173, 133, 133)]; 


UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(51.5, 51.5, 30, 30)]; 
spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge; 

[img addSubview:spinner]; 

[self.progress addSubview:img]; 


[spinner startAnimating]; 
[img release]; 
[spinner release]; 

[window addSubview:self.progress]; 

return YES; 

}

然後我把這個代碼:

if ([appDelegate showProgressView:@"Loading..:"]) 
{ 

    //My actual code loads data and stuff here but that is not important 
      //drawCtrl is a UIViewController subclass that is instantiated here 


    UINavigationController *navController = [appDelegate navigationController]; 
    [navController pushViewController:drawCtrl animated:YES]; 


    [drawCtrl release]; 
} 

的問題是,我的活動指示燈直到新的視圖控制器被推入navController的堆棧纔會出現。我能以某種方式控制它嗎?

在此先感謝!

-Mats

回答

1

您需要定期打電話給你的加載方法通過一個定時器。 UI更改需要通過事件循環才能看到。我通常在我設置在AppDelegate中的定時器中完成此操作,它每隔n秒調用一次「methodThatTakesSomeTime」,「methodThatTakesSomeTime」方法在指定的時間片上執行一些工作,然後退出,通常與定時器大致相同觸發時間。這給了事件循環時間刷新用戶界面,並給你的方法時間來做它的東西。

在保持「methodThatTakesSomeTime」狀態的狀態方面做了一些調整,以便它可以繼續前進,但這就是它的要求。