我正在我的应用程序上创建一个侧边栏,这样当你向右滑动它打开时,我在我做的名为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?这两件事有什么区别?
答案 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
}