0

我在 iOS5 上的手势有一个非常奇怪的问题。我有一个继承自 UIControl 的类。我实现了两个 GestureRecognizer:UITapGestureRecognizer 和 UILongPressGestureRecognizer。此类的对象应该是可拖动的,但只能在下载后进行。此外,当用户停止持有对象时,它应该回到原来的位置。

点击手势后,对象应该开始下载:

- (void) handleTapGestureRecognizer:(UITapGestureRecognizer*)recognizer
{
   [self loadingFiles:recognizer];
}

长按手势用于拖动对象,但放置对象后应返回其中心。

所以,我已经像这样实现了 UIGestureRecognizerDelegate:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
  shouldRecognizeSimultaneouslyWithGestureRecognizer:
  (UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
   if([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]])
   {
     [self loadingFiles:gestureRecognizer];
     return self.isLoaded;
   }
   else return YES;
}

在 UIGestureRecognizerDelegate Protocol Reference 中写到“gestureRecognizerShouldBegin”在 iOS 3.2 及更高版本中可用,但是当我在 Xcode 中使用 ALT 时,还有另一个信息表明它仅在 iOS6 及更高版本中可用,为什么?iOS5 中不调用该方法。所以在 handleLongPressGestureRecognizer 开始时,我写道:

- (void)handleLongPressGestureRecognizer: (UILongPressGestureRecognizer *)recognizer
{
   if (!self.isLoaded)
  {
     [self loadingFiles:recognizer];
     return;
  }
  else 
 {
     (...)
 }

}

在 iOS6 上一切正常,但在 iOS5 上,当我拿着对象并尝试移动它时,它在下载过程中没有移动(这很好),但在此之后它正在改变中心并冻结在最后一个我留下手指的地方。

我将不胜感激任何线索如何解决这个问题。

编辑:答案

好的,我找到了答案。也许这不是最好的解决方案,但它正在工作:在“handleLongPressGestureRecognizer”方法开头调用的方法“loadingFiles”中,我输入:

- (BOOL) loadingFiles:(UIGestureRecognizer*)recognizer
{
   if (!_isSelectable ||! self.isLoaded)
   {
      longPressGestureRecognizer.enabled = NO;
      (...)
   }
}

并且标志 isLoaded 更改为 YES 的地方有:

longPressGestureRecognizer.enabled = YES;
4

1 回答 1

0

在 UIGestureRecognizerDelegate 协议参考中写到“gestureRecognizerShouldBegin”在 iOS 3.2 及更高版本中可用,但是当我在 Xcode 中使用 ALT 时,还有另一个信息表明它仅在 iOS6 及更高版本中可用

不,你混淆了两个不同的东西。

  • 有一个新的 iOS 6 UIView 方法gestureRecognizerShouldBegin。它优先,并在 UIView 自己的手势响应(例如 UIButton 的可点击性)和更高级别的手势识别器(附加到超级视图)之间进行调解。

  • 有一个手势识别器委托消息gestureRecognizerShouldBegin:一直存在。

于 2013-05-13T17:52:19.057 回答