ActivityIndicatorView в навигационной панели продолжает анимацию после ViewDidLoad - PullRequest
0 голосов
/ 03 февраля 2012

У меня проблема с продолжением анимации представления индикатора активности после завершения загрузки страницы. Проблема возникает только на страницах UIWebView, которые уже были посещены.

Я также использую MBProgressHUD, и это прекращает анимацию после ViewDidLoad, как и ожидалось.

Страница загружается почти мгновенно, а затем начинается анимация в навигационной панели. Это похоже на то, как если бы страница была извлечена из кэша устройства, а затем приложение пытается ее загрузить и загрузить.

Вращатель прекращает анимацию только при посещении другого контроллера вида.

Кто-нибудь еще сталкивался с проблемами, подобными этому?

EDIT

- (void)showNetworkActivity {
    [self performSelector:@selector(showNetworkActivityWithDelay) withObject:nil afterDelay:0.5];
}

- (void)showNetworkActivityWithDelay {
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
}

- (void)hideNetworkActivity {
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

}

Хорошо работает, когда я убираю задержку.

Я унаследовал код, поэтому не уверен, нужна ли задержка. Есть ли веская причина для задержки показа networkActivityIndicator?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2012

Здесь решение.

Попробуйте вызвать [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; напрямую.

executeSelector: withObject: afterDelay: планирует таймер в том же потоке для вызова селекторапосле прошедшей задержки.

Я не вижу причин использовать задержку в этих примерах.Фактически, если вы используете его, селектор showNetworkActivityWithDelay вызывается после задержки, и вы не можете сразу увидеть его на экране.

Очевидно, что вы можете продолжать оборачивать логику индикатора активности предыдущими методами, такими какследующее (но это не обязательно):

- (void)showNetworkActivity {
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
}

- (void)hideNetworkActivity {
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}
0 голосов
/ 03 февраля 2012

Похоже, вы не настроили UIWebViewDelegate. Установите делегата в заголовке / реализации, затем начните анимацию индикатора в UIWebViewDelegate webViewDidStartLoad, затем прекратите анимацию в webViewDidFinishLoad и webViewDidFailLoadWithError.

...