Взаимодействие пользователя с блоками завершения uiview и анимации - PullRequest
6 голосов
/ 03 марта 2011

У меня есть следующий код:

[UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction
     animations:^{
         imageView.bounds = endBounds;
     }
     completion:^(BOOL finished) {
         [UIView animateWithDuration:2.0 delay:0.5 options:UIViewAnimationOptionAllowUserInteraction
              animations:^{
                  imageView.bounds = startBounds;
              }
              completion:^(BOOL finished) {
                      [imageView removeFromSuperview];
              }];
     }];

Дополнительно у меня есть:

[imageView setUserInteractionEnabled:YES];

и набор распознавателя жестов касания, который будет обрабатывать нажатие пользователем на imageView.Пока происходит первая анимация, распознаватель жестов срабатывает, как я и ожидал.Но если я попытаюсь нажать imageView во время связанной анимации из блока завершения, ничего не произойдет, даже если я установил соответствующую опцию.

У кого-нибудь есть мысли?Я погуглил и не могу найти ответ.

Ответы [ 3 ]

27 голосов
/ 07 апреля 2011

При использовании новых блоков анимации, если вы хотите, чтобы взаимодействие с пользователем было включено во время анимации, вы должны установить его в маске параметров. Например:

[UIView animateWithDuration:1.0 
                      delay:0 
                    options:UIViewAnimationOptionAllowUserInteraction 
                 animations:^{ myView.alpha = 0.5; } 
                 completion:NULL];
5 голосов
/ 07 марта 2011

Я нашел решение:

Я обертываю UIImageView в UIView (я подкласс UIView) с теми же границами / центральной точкой, что и изображение.Затем я прикрепляю распознаватель жестов к обертке, а не к изображению.Поскольку прямоугольник / центральная точка границ оболочки никогда не меняются на протяжении анимации, она всегда доступна в качестве цели жеста.

Это работает довольно хорошо.

-j

0 голосов
/ 03 марта 2011

Видите ли вы такое же поведение, если используете:

+ [UIView setAnimationDidStopSelector:]

вместо использования блоков?

...