Ответ 1
Кажется, это ошибка в iOS6
и ниже и исправлена в iOS7
.
Я столкнулся с какой-то странной проблемой.
По какой-то причине я отключу анимацию во время изменения ориентации в контроллере просмотра с помощью [UIView setAnimationsEnabled:NO];
Но когда присутствует предупреждение, и если я изменяю ориентацию, это дает странный результат.
Приложенный снимок экрана - это когда я изменяю ориентацию на пейзаж.
Обратите внимание: Я использую стандартный UIAlertView
, и это оверлей по умолчанию, который отображается, когда присутствует вид предупреждения, и здесь нет настройки.
В соответствии с documentation
If you disable animations, code inside subsequent animation blocks is still executed but no animations actually occur. Thus, any changes you make inside an animation block are reflected immediately instead of being animated.
Поэтому он не должен влиять на изменение размера оверлея по умолчанию. Is it a restriction in disabling animation !??
Я не понимаю, почему я так люблю. Может ли кто-нибудь помочь в решении этого вопроса.
Кажется, это ошибка в iOS6
и ниже и исправлена в iOS7
.
Когда вы устанавливаете [UIView setAnimationsEnabled:NO];
, UIAlertView
не меняет размер на Overlay View (я думаю, что это ошибка).
При желании вы можете ограничить ориентацию, когда на экране отображается предупреждение, как показано ниже.
Создайте переменную BOOL
в файле .h.
BOOL shouldRotate;
инициализируйте его YES
в viewDidload
.
И всякий раз, когда вы показываете оповещение в это время, сделайте shouldRotate = NO;
И реализуем делегат UIAlertView
следующим образом:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
shouldRotate = YES;
}
Надеюсь, вам помогут.
Изменить:. Как вы хотите и анимацию и вращение с представлением предупреждения
На самом деле это взлом, но работает,
alert
- объект UIAlertView
, объявленный в файле .h.
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
if (UIInterfaceOrientationPortrait == UIInterfaceOrientationIsPortrait(fromInterfaceOrientation)) {
UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0];
imgView.frame = CGRectMake(0.0, 0.0, 480.0, 320.0);
}
else{
UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0];
imgView.frame = CGRectMake(0.0, 0.0, 320.0, 480.0);
}
}
Еще одна возможность справиться с этой ошибкой - это отбросить программный вид предупреждения до поворота и отобразить новый после завершения вращения.
Это будет автоматически работать для любого устройства iOS независимо от размера экрана.