2013-04-10 2 views
1

Я работаю и iPhone приложение, и у вас есть проблема с распознающим жестом.UIGestureRecognizer на преобразованном слое

Я добавил UITapGestureRecognizer на представление, затем я преобразую слой, связанный с этим представлением, с помощью CABasicAnimation. После этого преобразования распознаватель жестов работает только в области, занимаемой представлением перед преобразованием.

Надеется, что это небольшое описание моей проблемы понятно ..

Вот код:

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myViewTapped:)]; 
[self.myView addGestureRecognizer:tapGestureRecognizer]; 

CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"position.y"]; 
[animation setFromValue:[NSNumber numberWithFloat:0]]; 
[animation setToValue:[NSNumber numberWithFloat: - 100]]; 
[animation setDuration:.3]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithControlPoints:.55 :-0.25 :.30 :1.4]]; 
animation.additive = YES; 
animation.removedOnCompletion = NO; 
animation.fillMode = kCAFillModeForwards; 
[self.myView.layer addAnimation:animation forKey:nil]; 

Как я могу справиться с этой проблемой?

Спасибо!

ответ

1

Вы анимируете только графическую часть представления (CALayer), а не часть, отвечающую за взаимодействие с пользователем (сам UIView). Ваш код перемещает слой и заставляет его утонуть в другом месте, но не меняйте рамку (или границу + центр).

У вас есть 3 варианта (ну, может быть, больше, просто я думаю, что из них 3):

1) использовать UIView на основе анимации [UIView animation...]

2) STRUCT с вами кодом, но и relocare мнения после анимации (но это может вызвать проблемы, так как ваш слой также будет перемещен).

3) использовать анимацию, но положить жест распознаватель на родителя (больше) точки зрения, а затем проверить события там ...

+0

Спасибо за вашу помощь, я не могу использовать анимацию на основе UIView, потому что Мне нужно использовать настраиваемую кривую ослабления (знаете ли вы, как это сделать?) Я нашел это решение: Я установил ViewController как делегат CABasicAnimation, удалил свойство additive, а затем в методе animationDidStop, I добавлена ​​эта строка кода: self.bottomView.layer.position = CGPointMake (self.bottomView.layer.position.x, [((NSNumber *) ((CABasicAnimation *) anim) .toValue) floatValue]); - Я знаю лучшее решение, если у кого-то есть – hugo

Смежные вопросы