我在 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;