#iphone #objective-c #ipad #uigesturerecognizer #uipangesturerecognizer
#iPhone #objective-c #iPad #uigesturerecognizer #uipangesturerecognizer
Вопрос:
У меня есть объект типа изображения, который я перемещаю с помощью UIPanGestureRecognizer, и мне нужно прекратить распознавание UIPanGestureRecognizer, когда объект достигает определенного кадра.
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[templatePhotoPlaceholderView addGestureRecognizer:panRecognizer];
-(void)move:(UIPanGestureRecognizer *)gestureRecognizer
{
CGPoint translatedPoint = [gestureRecognizer translationInView:templatePhotoPlaceholderView];
if([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
_firstX = [imageview center].x;
_firstY = [imageview center].y;
}
translatedPoint = CGPointMake(_firstX translatedPoint.x, _firstY translatedPoint.y);
//NSLog(@" Move center point :%@", NSStringFromCGPoint(translatedPoint));
[imageview setCenter:translatedPoint];
}
Как я могу это сделать?
Ответ №1:
UIGestureRecognizers имеют свойство enabled. Документация:
Отключает распознаватель жестов, чтобы он не получал касания. Значение по умолчанию — ДА. Если вы измените это свойство на NO, в то время как средство распознавания жестов в данный момент распознает жест, средство распознавания жестов перейдет в состояние отмены.
Редактировать:
Просто установите для свойства enabled значение NO.
gestureRecognizer.enabled = NO;
Комментарии:
1. Привет, jbat. Можете ли вы дать мне какой-нибудь пример кода строки для этого. для остановки UIGestureRecognizers
Ответ №2:
Когда вам нужно запретить вашему UIPanGestureRecognizer распознавать жесты, вы просто помещаете эту строку кода (как сказал jbat100) в -(void)move:(UIPanGestureRecognizer *)gestureRecognizer
:
gestureRecognizer.enabled = NO;
после этой строки состояние вашего GestureRecognizer устанавливается как "UIGestureRecognizerStateCancelled"
затем просто добавьте пару строк в свою -(void)move:(UIPanGestureRecognizer *)gestureRecognizer
функцию:
if ([gestureRecognizer state] == UIGestureRecognizerStateCancelled) {
gestureRecognizer.enabled = YES;
}
и вы сможете работать с вашим распознавателем жестов
Редактировать:
Вот фрагмент кода:
- (void)move:(UIPanGestureRecognizer *)gestureRecognizer {
BOOL cancelPanGesture = YES;
if (cancelPanGesture) {
/*
After this line gesture recognizer will be disabled, state will be UIGestureRecognizerStateCancelled
and this method (move:) will fire one more time.
*/
gestureRecognizer.enabled = NO;
}
if (gestureRecognizer.state == UIGestureRecognizerStateCancelled) {
gestureRecognizer.enabled = YES;
}
}
Комментарии:
1. Ответ не имеет смысла, где именно
gestureRecognizer.enabled = YES;
должен быть написан. Если вы можете уточнить, это имело бы гораздо больше смысла.2. Мне это нравится. Это сохраняет состояние распознавателя, инкапсулированное в эту функцию, вместо того, чтобы помещать глупые
shouldCancelPan
переменные экземпляра в ваш код.3. используя этот метод, когда я достигаю определенной точки и устанавливаю recogniser.enabled = false, он переходит в отмененное состояние, в котором я снова включаю его, но жест не запускается, пока я не подниму палец и не начну снова.
Ответ №3:
Установите pangesture.delegate=self и реализуйте метод делегирования
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
//return NO when you reach the frame
}