Захватить все основные жесты на одном экране
Я хочу захватить все основные жесты. например, я хочу иметь возможность отслеживать, когда пользователь нажимает один раз, дважды - один раз, один раз - одним пальцем, дважды - двумя пальцами, когда он зажимает, когда он вращает пальцы, когда он тащит один палец, когда он тащит два пальца,
Я знаю, как выполнять все эти функции, проблема в том, что я не хочу запускать два события. Например, когда пользователь ущипнул, я не знаю, какое событие перетаскивания запустить. Кроме того, когда пользователь тащит один палец, я не хочу, чтобы функция касания сработала.
это то, что я до сих пор:
-(void)singleTap:(NSIndexPath *)event
{
}
-(void)doubleTapMethod:(id)event
{
if(enableTap==NO){
enableMove=YES;
return;
}
NSLog(@"double tap with number of fingers = %i",TouchesCount);
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
enableTap=YES;
enableMove=NO;
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];
TapCount = touch.tapCount;
X=location.x;
Y=location.y;
NSData *data = [ @"SSSSS" dataUsingEncoding:NSUTF8StringEncoding];
[udpSocket sendData:data toHost:IP port:Port withTimeout:-1 tag:1];
switch (TapCount) {
case 1:
[self performSelector:@selector(singleTap:) withObject:nil afterDelay: delay];
break;
case 2:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(singleTap:) object:nil];
[self performSelector:@selector(doubleTapMethod:) withObject:nil afterDelay:delay];
break;
case 3:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doubleTapMethod:) object:nil];
//[self performSelector:@selector(tripleTapMethod) withObject:nil afterDelay:delay];
break;
case 4:
//[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(tripleTapMethod) object:nil];
//[self quadrupleTap];
break;
default:
break;
}
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
enableTap=NO;
if(enableMove==NO)
return;
NSLog(@"touches moved %i",TapCount);
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];
NSData *data = [ [NSString stringWithFormat:@"%i,%i", ((int)location.x)-X,((int)location.y)-Y] dataUsingEncoding:NSUTF8StringEncoding];
[udpSocket sendData:data toHost:IP port:Port withTimeout:-1 tag:1];
}
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
TouchesCount = touches.count;
return;//here
NSData *data = [ @"EEEEEE" dataUsingEncoding:NSUTF8StringEncoding];
[udpSocket sendData:data toHost:IP port:Port withTimeout:-1 tag:1];
}
Я знаю, что мне не хватает реализации, но я не хочу продолжать работать над этим, пока не буду уверен, что нахожусь на пути записи. например, может быть, я должен вместо этого использовать класс UITapGestureRecognizer и сделать что-то вроде:
UITapGestureRecognizer * r = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewWasDoubleTapped:)];
[r setNumberOfTapsRequired:2];
[r setNumberOfTouchesRequired:2];
[[self view] addGestureRecognizer:r];
1 ответ
Да! Вы должны определенно использовать распознаватели жестов для этой цели. Есть распознаватель жестов для всего, что вы упомянули в своем первоначальном посте.