После iOS 8 изменение моей реализации на UIAlertController вместо UIAlertView дает мне некоторые головные боли.UIAlertController увольнение медленное
Увольнение занимает целую секунду, прежде чем пользовательский интерфейс станет отзывчивым после нажатия кнопки. Это означает, что пользователи думают, что что-то не так.
Я единственный, кто страдает от этого? Это в нескольких приложениях, и для реализации это просто так просто. Я попробовал это в новом пустом проекте.
- (IBAction)showAlertView {
[[[UIAlertView alloc] initWithTitle:@"test" message:@"test" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] show];
}
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSLog(@"this is fast");
}
-(IBAction)showAlert {
UIAlertController *controller = [UIAlertController alertControllerWithTitle:@"test" message:@"test" preferredStyle:UIAlertControllerStyleAlert];
[controller addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"this is slow");
}]];
[self presentViewController:controller animated:NO completion:nil];
}
Нажатие кнопки дает около 1-секундной задержки, прежде чем что-либо будет напечатано на консоли. Презентация предупреждения не откладывается вообще.
Редактировать: Ближе к времени это, вероятно, больше похоже на 700 мс, поэтому не полная секунда, но все еще слишком длинная для чего-то, что должно быть мгновенным.
Медленный отклик пользовательского интерфейса часто вызван выполнением задач пользовательского интерфейса на фоновом потоке. Вы представляете это предупреждение из асинхронного обработчика завершения? У UIAlertController нет никакой общей проблемы. – Paulw11
Это всего лишь код, как есть. Ничего не запускается ни в каких явных потоках. Я мог бы привязать код выше к IBAction и нажать кнопку, чтобы представить контроллер, он все равно будет медленным. Это было так каждый раз, когда я использовал его во всех приложениях. Я очень смущен. – nickdnk
Похоже, что он ждет увольнения во многом так же, как это происходит, если убрать диспетчер просмотра анимированный (например, покройте вертикаль). Без анимации при увольнении вы получаете такую же задержку, о которой я говорю. – nickdnk