2011-12-16 98 views
1

在我的FirstViewController中,有一个IBAction调用SecondViewControllerViewControllers之间的UIActivityIndi​​catorView

SecondViewController在他的ViewDidLoad从服务器加载数组,因此FirtsViewControllerSecondViewController之间的转换时间很长。

我想在FirstViewController中放一个UIActivityIndicatorView它会在IBAction y按下时动画,当视图之间的转换完成时停止。

¿某些想法?

谢谢大家。

此致敬礼

回答

2

您应该异步加载数据。例如:

// second view controller 
- (void)viewDidLoad 
{ 
    // show loading activity (e.g. UIActivityIndicatorView) 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     [self loadDataFromServer]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      // hide loading activity and refresh view with loaded data 
     }); 
    ); 
} 
0

用单独的方法编写服务器调用。在第二个View控制器的viewDidLoad中,在后台线程上调用此服务器方法。并开始显示带有活动指标的视图。与此同时,在服务器方法中,一旦调用完成,就调用隐藏活动指示符的主线程上的回调方法,并在第二个视图控制器上显示所需的内容。

1

为此,您必须在firstViewController或secondViewController上添加活动指示器。

或者另一种选择是把一个计时器来加载这样第二视图控制器,

-(void)viewDidLoad  
{  
    timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(firstAPICall) userInfo:nil repeats:NO];  
} 

从上面的代码行中的画面会立即导航和,然后从服务器加载数据。使用“firstAPIcall”方法。

0

你可以像这样文件

@interface SecondViewController 
{ 
    UIActivityIndicatorView *activityView; 
} 

@property (nonatomic, retain) UIActivityIndicatorView *activityView; 

@end 

在.m文件

@synthesize activityView; 

- (void) viewDidLoad 
{ 
    self.activityView = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(125, 80, 30, 30)]; 
      self.activityView.hidesWhenStopped = YES ; 
    [self addSubview:activityView]; 
    activityView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge; 
    [activityView startAnimating]; 

    [self performSelector:@selector(getData) withObject:nil afterDelay:0.1]; 

} 

- (void) getData 
{ 
    // code for server call 
    . 
    . 
    // as downloading get complited 

    [self.activityView stopAnimating] 
} 
相关问题