Анимация блока UIView с обработчиком завершения и установкой скрытых UIViews

Меня интересуют новые анимации блоков в iOS 4. То есть синтаксис

  [UIView animateWithDuration:.25 delay:0 options:UIViewAnimationOptionAllowUserInteraction  animations:^
        {
              someview.alpha = 0

        } completion::^(BOOL finished) 
             {
                 focusAndExposureBox.hidden = true;
           }];

У меня есть случай, когда я использую распознаватели жестов и анимирую представление в конце жеста. У меня есть обработчик завершения, который устанавливает для некоторых видов скрытое значение (по соображениям производительности мне нужно это сделать). Часто взаимодействие блокируется из-за установки скрытого свойства. Мое предыдущее решение — использовать предыдущий стиль анимации с обработчиком animationDidStop.

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:.25];
someview.alpha = 0;
[UIView commitAnimations];

Однако я хотел бы использовать более новый стиль, если это возможно, потому что он имеет более чистый метод выполнения действий после завершения анимации и рекомендуется Apple. Итак, в настоящее время я использую этот хакер:

 [UIView animateWithDuration:1 delay:0 
      options:UIViewAnimationOptionAllowUserInteraction animations:^{

           someview.alpha = 0;

       } completion:^(BOOL finished) {


[someview performSelector:@selector(setHidden:) withObject:[NSNumber numberWithBool:true] afterDelay:1];

            }];

Кто-нибудь знает способ предотвратить блокировку в этом случае?


person akaru    schedule 17.02.2011    source источник


Ответы (1)


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

person Frank    schedule 17.02.2011
comment
Вы имеете в виду делегатов распознавания жестов или что-то еще? - person akaru; 19.02.2011