UIActivityIndicatorView между ViewControllers - PullRequest
1 голос
/ 16 декабря 2011

В моем FirstViewController есть IBAction, который вызывает SecondViewController.

SecondViewController в его ViewDidLoad загружает массив с сервера, по этой причине время перехода между FirtsViewController и SecondViewController очень велико.

Я хотел бы вставить UIActivityIndicatorView в FirstViewController, который будет анимироваться при нажатии IBAction y, и остановиться после завершения перехода между видами.

¿Есть идеи?

Спасибо за все.

С уважением

Ответы [ 5 ]

2 голосов
/ 16 декабря 2011

Вы должны загрузить данные асинхронно.Что-то вроде:

// 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 голос
/ 16 декабря 2011

Для этого вам нужно добавить индикатор активности либо в первый ViewController, либо во второй ViewController.

Или другой вариант - установить таймер для загрузки второго контроллера вида, например:

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

Из приведенной выше строки кода экран будет сразу перемещаться, а затем загружать данные с сервера. Использование метода firstAPIcall.

0 голосов
/ 16 декабря 2011

вы можете сделать так:

В вашем SecondViewController 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]
}
0 голосов
/ 16 декабря 2011

Я бы порекомендовал поставить общий вид с индикатором активности, прежде всего вид, поэтому независимо от того, какой вид представлен, индикатор активности будет представлен всегда. Для этого вам нужно создать прозрачное представление с индикатором активности, об этом вы можете прочитать здесь: http://ramin.firoozye.com/2009/09/29/semi-modal-transparent-dialogs-on-the-iphone/

0 голосов
/ 16 декабря 2011

Запись вызова сервера отдельным методом. В viewDidLoad вашего второго контроллера View вызовите этот метод сервера в фоновом потоке. И начать показ просмотра с индикатором активности. Между тем, в методе сервера, после завершения вызова, вызовите метод обратного вызова в главном потоке, который скрывает индикатор активности и отображает необходимые данные на вашем втором контроллере представления.

...