Запретить вращение на заставке в iOS - PullRequest
2 голосов
/ 12 мая 2011

У меня есть заставка. Я уменьшаю альфу от 100 до 0. Я хочу, чтобы shouldAutorotateToInterfaceOrientation возвращало YES только тогда, когда альфа равен 0. Я не могу заставить этот код работать:

if ( splashView.alpha == 0 )
{
    return YES;
} else {
    return NO;
}

Вместо этого,splashView.alpha всегда возвращает ноль.Есть идеи?

Ответы [ 4 ]

3 голосов
/ 15 мая 2011

Когда вы устанавливаете альфа на ноль, поворачиваясь и спрашивая представление о его альфе, вы получите ноль.Даже если анимация еще не закончена (разница между modelLayer и presentationLayer в Core Animation, если вы хотите понять, что происходит).

Чтобы получить то, что вы ищете, что-то подобное должно работать;

- (BOOL)shouldAutorotateToInterfaceOrientation:(...) {
  BOOL shouldAutoratate = NO;
  if(self.splashViewFaded) {
    shouldAutorotate = YES;
  }
  return shouldAutorotate;
}

Тогда в вашем appDidFinishLaunching методе (или там, где это имеет смысл) сделайте что-то вроде этого;

self.viewController.splashViewFaded = NO;
[UIView animateWithDuration:0.25 // or whatever
                      delay:0.0 // or whatever
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^() {
                                self.splashView.alpha = 0.0;
                            }
                 completion:^() {
                                self.viewController.splashViewFaded = YES;
                                [self.splashView removeFromSuperview];
                 }];

Слово для мудрых, я набрал это по памяти, так что оно, вероятно, победит 'Скомпилируйте, если вы копируете и вставляете, пожалуйста, прочитайте документы.

2 голосов
/ 15 мая 2011

Во время анимации значение, возвращаемое свойством alpha, не обязательно будет совпадать с мгновенной альфа-точкой представления.И далее, как только альфа достигнет 0, нет гарантии, что система повторно проверит результат shouldAutorotateToInterfaceOrientation:, поэтому ваш интерфейс может зависнуть в портретной ориентации, пока устройство не будет повернуто.

Сначала рассмотримдействительно ли это лучший план.Если пользователь держит устройство в горизонтальном или перевернутом положении, действительно ли лучше всего показывать заставку в горизонтальном или перевернутом положении относительно того, как он на него смотрит.Хотя я мог видеть это на iPhone, если ваш «заставка» совпадает с Default.png, так как он всегда отображается и в портретном режиме.

Но если вам нужно, лучший план был бы для вашего willAnimateRotationToInterfaceOrientation:duration:метод применения противовращения к представлению заставки, чтобы заставка работала в вертикальном положении независимо от ориентации остальной части приложения.См. Сохранение элементов управления в ландшафтном режиме, но подробности о включении uitabbar для переключения .

1 голос
/ 15 мая 2011

Вы должны просто использовать блочную анимацию:

[UIView animateWithDuration:2.0 
                 animations:^{
                     splashView.alpha = 0.0;
                 }
                 completion:^(BOOL finished){
                     return YES;
                 }];

Это запустит блок анимации и после завершения вернет YES для вашего метода.

1 голос
/ 12 мая 2011

Альфа-значение должно быть в диапазоне от 1,0 до 0,0, так что я думаю, что это может быть вашей проблемой.

...