Iphone UIActivityIndicatorView在视图控制器之间

Iphone UIActivityIndicatorView在视图控制器之间,iphone,xcode,uiactivityindicatorview,Iphone,Xcode,Uiactivityindicatorview,在我的FirstViewController中,有一个调用SecondViewController的iAction SecondViewController在他的ViewDidLoad中从服务器加载一个数组,因此FirtsViewController和SecondViewController之间的转换时间很长 我想在FirstViewController中放置一个UIActivityIndicatorView,当iActiony按钮按下时,它将设置动画,并在视图之间的转换完成时停止 有什么想法吗

在我的
FirstViewController
中,有一个调用
SecondViewController
iAction

SecondViewController
在他的
ViewDidLoad
中从服务器加载一个数组,因此
FirtsViewController
SecondViewController
之间的转换时间很长

我想在
FirstViewController
中放置一个
UIActivityIndicatorView
,当
iAction
y按钮按下时,它将设置动画,并在视图之间的转换完成时停止

有什么想法吗

谢谢大家


向您致意

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

// 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
        });
    );
}

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

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

或者另一个选项是放置一个计时器来加载第二个视图控制器,如下所示

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

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

我建议将活动指示器置于整体视图之上,因此无论呈现哪个视图,活动指示器都将始终呈现。 为此,您需要创建一个带有活动指示器的透明视图,您可以在此处阅读:
您可以这样做:

在第二个ViewController的
viewDidLoad

在.h文件上

@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]
}