UILongPressGesture minimumPressDuration

时间:2012-10-05 06:03:41

标签: objective-c mapkit uigesturerecognizer mkannotation

所以我对Objective-C比较新,而且我有可能错过一些相当明显的东西,所以如果是这样的话,请随意向我扔西红柿。这是我的问题:

我有一个iPhone单视图应用程序,由一个MapView组成。我在MapView上添加了一个长按手势识别器,以便注释/删除一个引脚。如果我没有指定minimumPressDuration ...

,这似乎有效
- (void)viewWillAppear:(BOOL)animated {
    UILongPressGestureRecognizer * longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
    [mapView addGestureRecognizer:longPressRecognizer];  // Actual map view handler is added to

    ...

}

-(void) handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer {
    NSLog (@"Did it work?!");
    // Some code here to make pins appear; omitted for simplicity in this question
}

正如预期的那样,当我长按地图时,在0.5秒(默认时间)之后,我将在地图上有1个引脚。如果我在我的手指周围移动,我会有一堆钉子。日志还打印​​出“它有效吗?!”很多次一遍又一遍。再次,预期。但是,当我向viewWillappear方法添加一条小行时(在消息传递mapView的addGestureRecognizer之前):

longPressRecognizer.minimumPressDuration = 1.0;

......手势不再有效。在那里我按住1秒钟,日志上没有任何内容。放手,尝试超过一秒......没事。没有引脚被丢弃,并且没有任何内容打印到日志中。为什么会这样?我无法理解为什么设置最小持续时间会打破这个。我的期望是它应该像以前一样运作 - 没有自定义的最小按压持续时间 - 唯一的区别是我需要按住1整秒而不是一半。

更新:如果我选择0.10.5之间的值,则可能会有效。但是一旦我去0.6或更高,它就不起作用了。 Obj-C引擎盖下发生的事情我不知道?

另外,我知道我应该在我的处理程序函数中检查状态,所以除非那样能解决这个问题,否则我不会为此而烦恼。在深入研究细节之前,我只想先让骨头工作。

谢谢!

P.S。,使用OS X 10.8.2和Xcode 4.5.1(4G1004)。

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。设置识别器的委托并转为同时识别后,此问题就解决了。以下是我的代码供您参考:

- (void)init
{
    UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(lockLongPress:)];
    longPressGestureRecognizer.minimumPressDuration = 1.0;
    longPressGestureRecognizer.delegate = self; 
    [targetView addGestureRecognizer:longPressGestureRecognizer];
}

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