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