我对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协议参考中,有人写道“在iOS 3.2及更高版本中可以使用”gestureRecognizerShouldBegin“,但是当我在Xcode中使用ALT时,还有其他信息只在iOS6及更高版本中可用,为什么?在iOS5中不调用该方法。 所以在handleLongPressGestureRecognizer的开头我写道:
- (void)handleLongPressGestureRecognizer: (UILongPressGestureRecognizer *)recognizer
{
if (!self.isLoaded)
{
[self loadingFiles:recognizer];
return;
}
else
{
(...)
}
}
在iOS6上一切都运行得很好,但是在iOS5上,当我拿着物体并尝试移动它时,它在下载过程中没有移动(这很好)但是在此之后它正在改变中心并冻结在我保留的最后一个地方我的手指。
我将很感激如何解决这个问题的任何线索。
编辑:ANSWER
好的,我找到了答案。也许这不是最好的解决方案,但它正在起作用: 在方法“loadingFiles”中,在“handleLongPressGestureRecognizer”方法的开头调用,我把:
- (BOOL) loadingFiles:(UIGestureRecognizer*)recognizer
{
if (!_isSelectable ||! self.isLoaded)
{
longPressGestureRecognizer.enabled = NO;
(...)
}
}
标志isLoaded的位置改为YES,有:
longPressGestureRecognizer.enabled = YES;
答案 0 :(得分:0)
在UIGestureRecognizerDelegate协议参考中,写了" gestureRecognizerShouldBegin"在iOS 3.2及更高版本中可用,但是当我在Xcode中使用ALT时,还有另一个信息,它仅在iOS6及更高版本中可用
不,你混淆了两件不同的事情。
有一个新的iOS 6 UIView方法gestureRecognizerShouldBegin
。它优先,并在UIView自己的手势响应(例如UIButton的可点击性)和更高级别的手势识别器(附加到超级视图)之间进行调解。
手势识别器委托消息gestureRecognizerShouldBegin:
一直存在。