MBProgressHUD мигает после завершения и блокирует пользовательский интерфейс на 2 секунды

У меня проблемы с MBProgressHUD. Я загружаю некоторые изображения и JSON и пытаюсь показать статус.

Это на моем viewdidload:

HUD = [[MBProgressHUD alloc] initWithView:self.view];
HUD.labelText = @"Lade Bilder runter...";
HUD.mode = MBProgressHUDModeAnnularDeterminate;
HUD.detailsLabelText = @"Schritt 1 von 2";
HUD.yOffset = -10;
[self.view addSubview:HUD];
[HUD show:YES];
[self downloadImages];

showWhileExecuting не работает с NSOperationQueue. Понятия не имею почему. Таким образом, метод downloadImages использует NSOperationQueue для обработки загрузки с помощью AFNetworking. После завершения NSOperationQueue я вызываю finishedDownload.

Этот метод вызывает

[HUD hide:YES];

Это работает. HUD скрывается, но UITableView блокируется примерно на 2 секунды. После этих 2 секунд HUD вспыхивает и мгновенно скрывается. После этой вспышки я могу взаимодействовать с UITableView.

В чем проблема? Я очень ценю помощь.

Спасибо


person dozed    schedule 06.11.2012    source источник


Ответы (2)


Я бы попробовал переместить этот фрагмент кода в -viewDidAppear: вместо -viewDidLoad:. Определенно есть некоторые странные проблемы, когда суперпредставления не полностью расположены перед подпредставления выполняют анимацию.

person Keith Smiley    schedule 12.11.2012

Я бы сделал, как сказал другой ответ, и переместил вашу логику в viewDidLoad или viewDidAppear, чтобы предотвратить любые проблемы с запуском представления.

Кроме того, вам нужно дать потоку пользовательского интерфейса достаточно времени, чтобы отобразить HUD перед запуском сетевого вызова. Поскольку вам, очевидно, нужны данные, прежде чем вы сможете что-либо сделать в своем представлении, вы на правильном пути. Вам просто нужно дать HUD время, чтобы показать и скрыть.

HUD обычно блокирует пользовательский интерфейс во время отображения ... поэтому пользователь не сможет ничего делать с текущим видом (кнопки «Назад», другие кнопки), но сможет получить доступ к другим вещам, таким как элемент панели вкладок или все, что не связано с представлением, к которому вы добавили HUD.

Я бы на самом деле изменить ваш сетевой вызов.

Измените это:

[self downloadImages];

К этому:

[self performSelector:@selector(downloadImages) withObject:nil afterDelay:0.1];

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

person Bill Burgess    schedule 20.12.2012