Появление / исчезновение во время поворота интерфейса - PullRequest
5 голосов
/ 03 сентября 2010

Когда мой интерфейс iPhone вращается, я хотел бы сделать постепенное появление / исчезновение для определенного UIView UIViewController ... Как ...

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];
    theView.alpha = 0;
    [UIView commitAnimations];
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{   
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];
    theView.alpha = 1;
    [UIView commitAnimations];  
}

Но анимация не заканчивается до начала вращения (мы можем видеть, как вид начинает изменять размер сам) ...

Есть ли способ отложить начало вращения?

"длительность" - это продолжительность вращающейся анимации, верно?

Ответы [ 2 ]

7 голосов
/ 02 октября 2012

Я обнаружил, что выполнение текущего цикла выполнения в течение того же промежутка времени, что и в предыдущей анимации, фактически задерживает вращение.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [UIView animateWithDuration:0.25 animations:^{
        theview.alpha = 0.0;
    }];

    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.25]];
}
0 голосов
/ 03 мая 2012

Ваша проблема связана с тем, что к моменту вызова willRotateToInterfaceOrientation: вращаемое представление уже имеет свой набор свойств ориентации, и блок анимации, обрабатывающий вращение, также готов к работе в отдельном потоке. С документация :

Этот метод вызывается из блока анимации, используемого для поворота представления. Вы можете переопределить этот метод и использовать его для настройки дополнительных анимаций, которые должны появляться во время поворота представления.

Я бы предложил переопределить shouldAutorotateToInterfaceOrientation: метод для запуска анимации перед возвратом YES для поддерживаемых ориентаций:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
      // Return YES for supported orientations
      if (interfaceOrientation == (UIDeviceOrientationPortrait || UIDeviceOrientationPortraitUpsideDown) {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.3];
        theView.alpha = 0;
        [UIView commitAnimations];
      } else {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.3];
        theView.alpha = 1;
        [UIView commitAnimations];  
      } 
      return YES;
}

Это должно обеспечить запуск анимации до того, как вы установите ориентацию UIViewController, и запустите анимацию вращения. Возможно, вам придется добавить небольшую задержку, чтобы получить нужный эффект в зависимости от аппаратной скорости устройства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...