CAAnimation - пользовательский ввод отключен - PullRequest
0 голосов
/ 28 августа 2011

Я пытаюсь оживить кнопку. Когда я это делаю (используя button.layer addAnimation) кнопка отключается. Есть ли способ разрешить взаимодействие с пользователем при анимации? Я также попытался обернуть все в блок, используя animateWithDuration, передавая параметр UIViewAnimationOptionAllowUserInteraction, но он все равно не работает.

РЕДАКТИРОВАТЬ: Это странно. Если я щелкну в верхнем углу (где я разместил свою кнопку), это вызовет событие. Это почти как кадр кнопки не следует за анимацией.

РЕДАКТИРОВАТЬ: я закончил тем, что создал событие, которое запускается каждые 0,1 секунды, и устанавливает button.frame равным кадру [[button.layer presentationLayer]]. Это, казалось, сделало трюк.

Ответы [ 5 ]

1 голос
/ 20 июня 2015

лучшее решение - изменить положение слоя после вызова анимации:

[button.layer addAnimation:animation forKey:@"animation"];

 button.layer.position = endPosition;
1 голос
/ 29 августа 2011

Используйте следующий метод UIView с UIViewAnimationOptionAllowUserInteraction в параметре UIViewAnimationOptions:

+ (void) animateWithDuration: (NSTimeInterval) время задержки: (NSTimeInterval) параметры задержки: (UIViewAnimationOptions v Опции анимации:)(void)) завершение анимации: (void (^) (BOOL закончено)) завершение

0 голосов
/ 27 мая 2013

Я хотел, чтобы кнопка была увеличена. Поэтому я уменьшаю слой до начала анимации:

layer.transform = CATransform3DScale (layer.transform, 0.01, 0.01, 0.01);

// some animation code

После анимации я уменьшил масштаб.

// some animation code
CATransform3D endingScale = CATransform3DScale (layer.transform, 100, 100, 100);
// some animation code

[layer addAnimation:animation forKey:@"transform"];

layer.transform = endingScale;

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

0 голосов
/ 09 августа 2012

Мне показалось, что стрельба на турнире была немного хакерской .
Однако ваше упоминание о [[button.layer presentationLayer] frame] привело меня на правильный путь: -)

Итак, прикрепив распознаватель жестов к суперпредставлению движущегося вида, я могу сделать следующее обнаружение:

CGPoint tapLocation = [gestureRecognizer locationInView:self.view];

for (UIView* childView in self.view.subviews)
{
    CGRect frame = [[childView.layer presentationLayer] frame];
    if (CGRectContainsPoint(frame, tapLocation))
    {
        ....
    }
}
0 голосов
/ 31 августа 2011

Я закончил тем, что создал событие, которое запускается каждые 0,1 секунды и устанавливает button.frame равным button.layer

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