我想在我的按钮上添加手势识别器,以便在用户滑过按钮框架时可以运行代码。如果滑动向上,向右,向左或向下按下,我也希望此代码不同。
-(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
}
答案 0 :(得分:5)
不,这不正确。手势识别器的目标不是按钮,它是在检测到手势时调用动作方法的对象(否则它将如何知道哪个对象调用该方法?在OO中,方法调用/消息发送需要显式方法名称和实例或类)。
所以你很可能想要
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];
您也不直接创建UIGestureRecognizer的实例,但如果是具体的子类,则在本例中创建一个UISwipeGestureRecognizer。
分配识别器后,将其附加到您想要识别的视图:
[button addGestureRecognizer:recognizer];
然后在didSwipe:方法中,您可以使用手势识别器的属性来确定滑动的大小/距离/其他属性。
答案 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