ViewControllers之间的UIActivityIndi​​catorView

时间:2011-12-16 09:28:37

标签: iphone xcode uiactivityindicatorview

在我的FirstViewController中,有一个IBAction来电话SecondViewController

他的SecondViewController中的

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

我希望UIActivityIndicatorView放在FirstViewController中,它会在IBAction推送时生成动画,并在视图之间的转换完成时停止。

¿有些想法?

谢谢大家。

祝你好运

5 个答案:

答案 0 :(得分: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
        });
    );
}

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我建议在活动指示器上放置一个整体视图,在所有视图之上,因此无论呈现哪个视图,活动指示器都将始终显示。 为此,您需要创建一个带有活动指示符的透明视图,您可以在此处阅读: http://ramin.firoozye.com/2009/09/29/semi-modal-transparent-dialogs-on-the-iphone/

答案 4 :(得分:0)

你可以这样做:

在SecondViewController的viewDidLoad

on .h file

@interface SecondViewController 
{
    UIActivityIndicatorView *activityView;
}

@property (nonatomic, retain) UIActivityIndicatorView *activityView;

@end
<。>文件中的

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