ios – UIGestureRecognizer知道它被调用的对象是什么?

前端之家收集整理的这篇文章主要介绍了ios – UIGestureRecognizer知道它被调用的对象是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个UIGestureRecognizer,我想在两个不同的UIView上工作,这两个UIView都在UiViewController的相同视图层次结构中. UIGestureRecognizer的操作在每个上都是一样的,所以我希望调用相同的函数(很明显),我将在运行时告诉我正在处理哪些UIViews.但是怎么样?我看不出UIGestureRecognizer正在携带对象信息.我是否遗漏了文档中的行或者gestureRecognizer不知道它被附加到哪个对象上?似乎语言的意义在于它会知道.

或者,也许我误解了班级的意图,我不应该:

  1. UITapGestureRecognizer *dblTap =
  2. [[UITapGestureRecognizer alloc] initWithTarget: self
  3. action: @selector(handleDblTap:)];
  4. [viewA addGestureRecognizer: dblTap];
  5. [viewB addGestureRecognizer: dblTap];

然后期望能够:

  1. -(void)handleDblTap: (UIGestureRecognizer *)gestureRecognizer
  2. {
  3. if (viewA)...

如果事实上UIGestureRecognizer不支持同时附加到多个对象,那么,如果你知道为什么它不支持这个,你能教育我吗?谢谢您的帮助.

解决方法

标准是每个识别器一个视图.但您仍然可以有效地使用一种处理程序方法.

你会像这样实例化识别器:

  1. UITapGestureRecognizer *dblTapViewA = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)];
  2. [viewA addGestureRecognizer: dblTapViewA];
  3.  
  4. UITapGestureRecognizer *dblTapViewB = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)];
  5. [viewB addGestureRecognizer: dblTapViewB];

那么你的处理程序方法可能类似于:

  1. -(void)handleDblTap:(UITapGestureRecognizer *)tapRec{
  2. if (tapRec.view == viewA){
  3. // double tap view a
  4. } else if (tapRec.view == viewB) {
  5. // double tap view b
  6. }
  7. }

猜你在找的iOS相关文章