UIGestureRecognizer示例代码

时间:2013-02-16 19:43:46

标签: iphone ios uigesturerecognizer

我无法弄清楚出了什么问题。下面是我的代码,它调用委托方法一次然后停止。

我该怎么办?我没有能够找到使用这些委托方法的示例代码。所有我发现的是使用不同代表的滑动和水龙头的手势识别器。

到目前为止

代码:

-(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作为我的图像视图。

我从根本上做错了什么?

2 个答案:

答案 0 :(得分:0)

UIGestureRecognizer是一个抽象类,您不应该将它直接添加到您的视图中。您需要使用继承自UIGestureRecognizer的具体子类,例如UITapGestureRecognizer或UIPanGestureRecognizer。您也可以创建自己的具体子类,但这通常不是必需的。

以下是向您的视图添加UIPanGestureRecognizer的示例(在您的视图类代码中,通常将手势添加到控制器的视图中):

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(mySelector:)];
[self addGestureRecognizer:panGesture];

在这种情况下,当用户在此视图中平移时,将调用选择器。如果您添加了UITapGestureRecognizer,则在用户点按时会调用选择器。

您可以查看Apple文档了解更多信息: http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizer_basics/GestureRecognizer_basics.html#//apple_ref/doc/uid/TP40009541-CH2-SW2

另外,我发现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

代码,我最初发布的代码将起作用。