0

我正在我的应用程序上制作一个侧边栏,以便当您向右滑动它打开时,我在我制作的名为侧边栏的对象中使用此代码:

_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 上寻找方法时,它正在寻找 self.superview 上的“刷卡”方法,但我希望在 self.superview 上检测到手势。

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

4

2 回答 2

2

改变这个:

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

到:

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

调用initWithTarget:action:指定获取有关手势事件的类。“目标”必须实现“动作”方法。

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

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

于 2013-06-06T23:01:59.537 回答
0

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

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

然后执行swiped操作:

-(void)swiped:(UIGestureRecognizer *)gestureRecognizer {
//enter code here
}
于 2013-06-06T23:01:17.113 回答