2013-05-13 164 views
0

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

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

- (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协议参考有写道:“gestureRecognizerShouldBegin”中的iOS 3.2及更高版本,但是当我在Xcode中使用ALT还有另外一个信息它仅在iOS6和更高版本中可用,为什么?该方法不在iOS5中调用。 所以在handleLongPressGestureRecognizer的beggining我写道:

- (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

在UIGestureRecognizerDelegate协议参考有写道:“gestureRecognizerShouldBegin”中的iOS 3.2及更高版本,但是当我在Xcode中使用ALT还有另一种信息,它仅适用于iOS6的,后来

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

  • 有一个新的iOS 6 UIView方法gestureRecognizerShouldBegin。它优先考虑,并在UIView自己的手势响应(例如UIButton的可打字性)和更高级别的手势识别器(附加到超级视图)之间起中介作用。

  • 有一个手势识别代表消息gestureRecognizerShouldBegin:一直在那里。

+0

感谢您的回复。 那么我应该怎么做才能调用这个方法呢?现在不叫它。 – malgorzata 2013-05-16 11:48:59

+0

我似乎忘记了情节。 “使这种方法被称为”是什么意思? – matt 2013-05-16 16:49:32