我无法弄清楚出了什么问题。下面是我的代码,它调用委托方法一次然后停止。
我该怎么办?我没有能够找到使用这些委托方法的示例代码。所有我发现的是使用不同代表的滑动和水龙头的手势识别器。
到目前为止代码:
-(void)initTouchesRecognizer{
DLog(@"");
recognizer = [[UIGestureRecognizer alloc] init];
[self addGestureRecognizer:recognizer];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
DLog(@"");
NSSet *allTouches = [event allTouches];
for (UITouch *touch in allTouches)
{
}
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
DLog(@"");
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
[self touchesEnded:touches withEvent:event];
}
我从initwithrect调用initTouchesRecognizer作为我的图像视图。
我从根本上做错了什么?
答案 0 :(得分:0)
UIGestureRecognizer是一个抽象类,您不应该将它直接添加到您的视图中。您需要使用继承自UIGestureRecognizer的具体子类,例如UITapGestureRecognizer或UIPanGestureRecognizer。您也可以创建自己的具体子类,但这通常不是必需的。
以下是向您的视图添加UIPanGestureRecognizer的示例(在您的视图类代码中,通常将手势添加到控制器的视图中):
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(mySelector:)];
[self addGestureRecognizer:panGesture];
在这种情况下,当用户在此视图中平移时,将调用选择器。如果您添加了UITapGestureRecognizer,则在用户点按时会调用选择器。
另外,我发现Paul Hagerty的斯坦福大学讲座很棒,这里有一个关于手势识别器的讲座: https://itunes.apple.com/ca/course/6.-views-gestures-january/id593208016?i=132123597&mt=2
您还应该了解,您发布的方法都不是委托方法,也没有与您在代码中添加的UIGestureRecognizer有任何关系。这些是UIResponder(UIView继承的类)的实例方法,你要覆盖它们。抽象的UIGestureRecognizer也有具有相同名称的实例方法,但它不是在你的类中调用的UIGestureRecognizer方法。
答案 1 :(得分:0)
无需添加手势识别器。通过覆盖touchesMoved,touchesEnded和touchesBegan方法,我能够在屏幕上跟踪用户的手指。
根本不要打电话给:
-(void)initTouchesRecognizer
代码,我最初发布的代码将起作用。