UIView TouchSbegan не отвечает во время анимации - PullRequest
7 голосов
/ 30 ноября 2010

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

Вот мой код анимации.

1 Ответ

9 голосов
/ 13 декабря 2010

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

В инициализации вашего анимационного представления установите для userInteractionEnabled значение NO. Таким образом, сенсорные события обрабатываются суперпредставлением.

self.userInteractionEnabled = NO;

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

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    CGPoint point = [[touches anyObject] locationInView:self.view];
    CGPoint presentationPosition = [[animatingView.layer presentationLayer] position];

    if (point.x > presentationPosition.x - 10 && point.x < presentationPosition.x + 10
        && point.y > presentationPosition.y - 10 && point.y < presentationPosition.y + 10) {
        [animatingView touchesBegan:touches withEvent:event];
    }
}
...