你如何初始化UIGestureRecognizer?

时间:2012-08-12 20:40:50

标签: iphone ios uigesturerecognizer

我想在我的按钮上添加手势识别器,以便在用户滑过按钮框架时可以运行代码。如果滑动向上,向右,向左或向下按下,我也希望此代码不同。

-(void)viewDidLoad
{
    [super viewDidLoad];
    UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame=CGRectMake(0, 0, 100, 100);
    [self.view addSubview:button];
    UIGestureRecognizer *swipe=[[UIGestureRecognizer alloc]initWithTarget:button action:@selector(detectSwipe)];
    [button addGestureRecognizer:swipe];
}

那么,我做initWithTarget:action:的事情是否正确?现在我这样做了如何实现detectSwipe方法?

这是关于如何实施detectSwipe

的想法
          -(IBAction)detectSwipe:(UIButton *)sender
        {
      /* I dont know how to put this in code but i would need something like, 
if (the swipe direction is forward and the swipe is > sender.frame ){ 
[self ForwardSwipeMethod];
    } else if //same thing for right
    else if //same thing for left
    else if //same thing for down

        }

4 个答案:

答案 0 :(得分:5)

不,这不正确。手势识别器的目标不是按钮,它是在检测到手势时调用动作方法的对象(否则它将如何知道哪个对象调用该方法?在OO中,方法调用/消息发送需要显式方法名称实例或类)。

所以你很可能想要

recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];

您也不直接创建UIGestureRecognizer的实例,但如果是具体的子类,则在本例中创建一个UISwipeGestureRecognizer。

分配识别器后,将其附加到您想要识别的视图:

[button addGestureRecognizer:recognizer];

然后在didSwipe:方法中,您可以使用手势识别器的属性来确定滑动的大小/距离/其他属性。

You better read some docs next time.

答案 1 :(得分:2)

除了手势识别器的目标之外你没事。目标是一个接收给定选择器消息的对象,因此initWithTarget:调用应接受self作为参数,除非您在按钮的子类中实现detectSwipe方法。

答案 2 :(得分:2)

您可能希望使用UISwipeGestureRecognizer。通常不应该使用UIGestureRecognizer,除非你是它的子类。您的代码应类似于以下内容。

UISwipeGestureRecognizer *swipe=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(detectSwipe)];
swipe.direction = UISwipeGestureRecognizerDirectionRight;
[button addGestureRecognizer:swipe];

答案 3 :(得分:1)

H2CO3的答案已经完成。只是不要忘记你在选择器的末尾错过了冒号“:”!它应该是这样的:@selector(detectSwipe:)

冒号“:”是因为您的方法有一个参数:(UIButton *)sender