无法让UISwipeGestureRecognizer工作

时间:2013-06-06 22:42:46

标签: ios objective-c swipe

我正在我的应用程序上创建一个侧边栏,这样当你向右滑动它打开时,我在我做的名为sidebar的对象中使用了这个代码:

_swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self.superview action:@selector(swiped)];

[_swipeRecognizer setDirection: UISwipeGestureRecognizerDirectionRight];

[self.superview addGestureRecognizer:_swipeRecognizer];

这当然会崩溃并抛出错误:

[UIView swiped]: unrecognized selector sent to instance 0x1fdbd0c0

因为我想在self.superview上寻找“swiped”方法,当我希望它在self上查找方法时,我希望在self.superview上检测手势。

我也很困惑,如果我设置initWithTarget那么为什么我要做addGestureRecognizer?这两件事有什么区别?

2 个答案:

答案 0 :(得分:2)

改变这个:

_swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self.superview action:@selector(swiped)];

为:

_swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swiped)];

initWithTarget:action:的调用指定了有关手势事件的类。 “目标”必须实施“行动”方法。

addGestureRecognizer:的调用指定了手势必须在哪个视图上发生。

在许多情况下,这些是相同的,但在您的情况下,它们是不同的。

答案 1 :(得分:0)

如果你想处理self中识别的手势,在第一行,你应该将self设置为接收者,而不是self.superview:

_swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swiped)];

然后实施swiped操作:

-(void)swiped:(UIGestureRecognizer *)gestureRecognizer {
//enter code here
}