Ответ 1
Я нашел эти методы очень полезными:
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
У меня есть представление, которое содержит два представления. Один из этих представлений содержит две кнопки и некоторые текстовые метки. Другой, с альфой, установленным на 0.25, имеет UIActivityIndicatorView
, чтобы сообщить пользователю, что приложение работает, и он должен подождать, пока он не закончится. Если пользователь прикасается к кнопке, когда UIActivityIndicatorView
вращается, когда UIActivityIndicatorView
останавливается, приложение запоминает действие пользователя и отвечает на него. Как я могу отказаться от пользовательского взаимодействия, которое происходит во время вращения UIActivityIndicatorView
?
Спасибо за чтение.
P.D.: Как говорится в этой теме, я предпочитаю не использовать какое-либо модальное решение.
Редакция:
В настоящее время я использую этот код, и он не работает правильно.
- (void)viewDidAppear:(BOOL)animated {
// The view appears with an UIActivityIndicatorView spinning.
[self showResults]; // The method that takes a long time to finish.
[self.activityIndicator stopAnimating];
// When the showResults method ends, the view shows the buttons to the user.
[self.activityIndicatorView setHidden:YES];
[self.menuButton setEnabled:YES];
[self.menuButton setUserInteractionEnabled:YES];
[self.playButton setEnabled:YES];
[self.playButton setUserInteractionEnabled:YES];
[self.view setUserInteractionEnabled:YES];
[self.interactionView setUserInteractionEnabled:YES];
}
Я нашел эти методы очень полезными:
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
[_button setUserInteractionEnabled:NO];
Чтобы отключить его, просто установите YES, когда вы хотите, чтобы пользователь нажал его.
BOOL i_am_ready_to_submit = NO;
-(void)action_finished{
[self.activityIndicator stopAnimating];
i_am_ready_to_submit = YES;
}
-(IBAction)submit_button{
if(i_am_ready_to_submit){
[self submit];
}
}
Чтобы отключить событие касания в представлении,
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
Чтобы включить событие касания в представлении
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
просто добавьте
[self.view setUserInteractionEnabled:NO];
перед
[self.activityIndicator startAnimating];
и снова его можно использовать после
[self.activityIndicator stopAnimating];
[self.view setUserInteractionEnabled:YES];
В Swift 3.0 Отключить взаимодействие: -
UIApplication.shared.beginIgnoringInteractionEvents()
Чтобы восстановить взаимодействие: -
UIApplication.shared.endIgnoringInteractionEvents()
Использовать SVProgressHUD WrapperClass У него есть так много вариантов, чтобы показать ActivityIndicator
Исходный код Нажмите здесь!
[SVProgressHUD showWithMaskType: SVProgressHUDMaskTypeBlack];
использовать инструкцию выше, чтобы отключить фоновые штрихи
[Отклонение SVProgressHUD]
Чтобы включить фоновые штрихи.
@IBAction func yourButtonPressed(sender: UIButton) {
if self.activityIndicator.isAnimating() {
//remember the action user asked of you using the sender
} else {
//do your stuff
return
}
yourButtonPressed(yourButton)
}
или использовать код self.activityIndicator.animationDidStop, чтобы определить, когда запускать ваши вещи.
A быстрое решение: добавьте прозрачный или псевдо прозрачный вид, который охватывает весь экран. Добавьте свой индикатор активности поверх этого представления. Когда закончится период ожидания, удалите оба вида. Получите вдохновение.
Лучшее решение, потому что вы не можете скрыть весь экран во всех ситуациях, это управлять состоянием приложения (игнорировать действия, когда приложение "занято" ) и отключать/включать соответствующие кнопки и другие элементы управления в зависимости от в каждом состоянии приложения.
Вы можете отключить/включить UIButtons на основе отображаемого UIActivityIndicatorView
или нет. Или, если вы просто хотите "отказаться от пользовательского взаимодействия", пока отображается счетчик, в методе обработчика кнопок:
- (void)buttonTapped:(id)sender {
if ([spinner superview] != nil && [spinner isAnimating]) {
return;
}
// ... the rest of your code
}
В этом примере предполагается, что когда вы скрываете UIActivityIndicatorView
, вы вызываете один из:
[spinner removeFromSuperview];
или
[spinner stopAnimating];
Хотя ответ отвечает в более раннем ответе, как и для добавления в целях информации "[self.activityIndicatorView setHidden: YES]; нет необходимости вызывать этот метод явно, потому что startAnimating/stopAnimating уже позаботится об этом. Я предполагаю, что вы используете значение по умолчанию свойства" hidesWhenStopped".