我试图了解手势识别器的工作原理,并尝试让手势识别器告诉我何时长时间触摸BEGINS以及即使触摸不动也会结束。
在viewDidLoad
中,我添加了一个名为game的子视图。
在游戏中,我已经实现了两种识别触摸的方法。一个有效,但没有做我想要的。另一个不起作用。
Method1 我刚添加了两种方法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Began");
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *) event {
NSLog(@"Ended");
}
这没有实例化手势识别器。有人可以告诉我为什么吗?
这个问题是- (void)touchedEnded:
只有在触摸移动时才会被调用,而如果触摸在它开始的同一位置结束则不会被调用。因此,如果我触摸并移动并放开,则会调用这两个函数。如果我触摸并按住并放开(不移动),则仅调用- (void)touchesBegan
。
方法2 我实例化了一个手势识别器:
@property (nonatomic, strong) UILongPressGestureRecognizer *lprg;
然后在我的设置中:
self.lprg = [UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
然后:
- (void)handleLongPress:(UILongPressGestureRecognizer *)recognizer {
NSLog(@"Handling");
switch (recognizer.state) {
case UIGestureRecognizerStateBegan:
// ...
}
}
但是这个我以编程方式实例化识别器的方法并不起作用。我从未在控制台中获得任何NSLog输出。
答案 0 :(得分:4)
UIResponder的所有子类(UIView都是)对touchesBegan做出回应,这就是为什么你不必做任何事情而你是免费获得的。然而,它远非手势识别器。在高级别的手势识别器跟踪很多事情,例如状态。当然你可以开始使用触摸,但想象一下,如果用三指长按,滑动或捏一下就可以了。事情变得很难看。安装手势识别器可以简化操作。
例如长按:
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] init];
longPress.numberOfTouchesRequired = 3;
[longPress addTarget:self action:@selector(longPressDetected:)];
[self.view addGestureRecognizer:longPress];
修改强>
实现委托:
在您的实现文件(.m)中添加@implemation行末尾的行。它应该看起来像
@implementation ViewController <UIGestureRecognizerDelegate>
然后在分配并初始化手势识别器后,将代理设置如下
longPress.delegate = self;
然后从https://developer.apple.com/library/ios/documentation/uikit/reference/UILongPressGestureRecognizer_Class/Reference/Reference.html实现所需数量的方法。例如,你可能会考虑这两个
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
return YES;
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
return YES;
}
答案 1 :(得分:1)
您必须使用此代码初始化手势
UILongPressGestureRecognizer *gesture1 = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(celllongpressed:)];
[gesture1 setDelegate:self];
[gesture1 setMinimumPressDuration:1];
[self addGestureRecognizer:gesture1];
和目标方法使用此
-(void)celllongpressed:(UIGestureRecognizer *)longPress
{
}