Настройка SwipeGestureRecognizer, требуется уточнение
мне не хватает чего-то простого здесь, Пожалуйста, помогите мне понять, что.
мой контроллер настройка
UIGestureRecognizer *swipe = [[UIGestureRecognizer alloc]
initWithTarget:gameView action:@selector(handleSwipeFrom:)];
[gameView addGestureRecognizer:swipe];
на GameView настройка
@interface GameView : UIView<UIGestureRecognizerDelegate>
далее он заявляет
- (IBAction) handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer;
и устанавливает его как
- (IBAction)handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer {
NSLog(@" .............. Swipe detected!! ...................");
}
на раскадровка ссылки UIGestureRecognizer
С IBACtion
и настроен следующим образом:
Я немного обеспокоен тем, что UIGestureRecognizer
появляются под контроллером, а не вид, как показано, но я не могу его исправить.
когда приложение построено, swipes, однако, не распознаются.
пожалуйста, предложите, что мне здесь не хватает, и иду ли я правильным путем о настройке вещей.
3 ответов
вы настраиваете два отдельных распознавателя жестов. Один в коде, который, вероятно, ничего не делает, другой в раскадровке, который, вероятно, не имеет цели.
в коде вы должны инициализировать распознаватель жестов салфетки следующим образом:
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:gameView action:@selector(handleSwipeFrom:)];
// And assuming the "Up" direction in your screenshot is no accident
swipe.direction = UISwipeGestureRecognizerDirectionUp;
или, Конечно, вы можете подключить распознаватель салфетки в раскадровке. Это легко сделать, щелкнув правой кнопкой мыши на распознавателе жестов и подключив SentActions к handleSwipeFrom:
метод, или аналогично вы можете перетащить из инспектор соединений справа (как показано на скриншоте) к именованной функции. На изображении вы можете видеть, что у меня есть Sent Actions
подключен к методу swipeTarget:
.
но в настоящее время у вас есть два неполных распознавателя.
-(void)addSwipeEvent:(UIView*)subView{
UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)];
recognizer.numberOfTouchesRequired = 1;
recognizer.delegate = self;
[subView addGestureRecognizer:recognizer];
[recognizer release];
UISwipeGestureRecognizer *leftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)];
leftRecognizer.direction=UISwipeGestureRecognizerDirectionLeft;
leftRecognizer.numberOfTouchesRequired = 1;
leftRecognizer.delegate = self;
[subView addGestureRecognizer:leftRecognizer];
[leftRecognizer release];
UISwipeGestureRecognizer *downRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)];
downRecognizer.direction=UISwipeGestureRecognizerDirectionDown;
downRecognizer.numberOfTouchesRequired = 1;
donwRecognizer.delegate = self;
[subView addGestureRecognizer:downRecognizer];
[downRecognizer release];
UISwipeGestureRecognizer *upRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)];
upRecognizer.direction=UISwipeGestureRecognizerDirectionUp;
upRecognizer.numberOfTouchesRequired = 1;
upRecognizer.delegate = self;
[subView addGestureRecognizer:upRecognizer];
[upRecognizer release];
}
- (void) SwipeRecognizer:(UISwipeGestureRecognizer *)sender {
if ( sender.direction == UISwipeGestureRecognizerDirectionLeft ){
NSLog(@" *** SWIPE LEFT ***");
}
if ( sender.direction == UISwipeGestureRecognizerDirectionRight ){
NSLog(@" *** SWIPE RIGHT ***");
}
if ( sender.direction== UISwipeGestureRecognizerDirectionUp ){
NSLog(@" *** SWIPE UP ***");
}
if ( sender.direction == UISwipeGestureRecognizerDirectionDown ){
NSLog(@" *** SWIPE DOWN ***");
}
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UIView class]])
{
return YES;
}
return NO;
}
UISwipeGestureRecognizer *swipe = [[UISwipGestureRecognizer alloc]
initWithTarget:gameView action:@selector(handleSwipeFrom:)];
[gameView addGestureRecognizer:swipe];
- (IBAction)handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer {
NSLog(@" .............. Swipe detected!! ...................");
}
тогда просто отмените то, что вы сделали в IB. Если вы делаете это в коде, а затем сделать это в IB тоже вы просто дублирование работы, и, возможно, удвоение раз салфетки обрабатывается