在我的FirstViewController
中,有一个IBAction
来电话SecondViewController
。
SecondViewController
中的 ViewDidLoad
从服务器加载数组,因此FirtsViewController
和SecondViewController
之间的转换时间太长。
我希望UIActivityIndicatorView
放在FirstViewController
中,它会在IBAction
推送时生成动画,并在视图之间的转换完成时停止。
¿有些想法?
谢谢大家。
祝你好运
答案 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]
}