0

所以我对 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 引擎盖下发生了什么?

另外,我知道我应该在我的处理函数中检查状态,所以除非这能解决这个问题,否则不要为它堆砌我。在深入研究细节之前,我只想让基本的工作先工作。

谢谢!

PS,使用 OS X 10.8.2 和 Xcode 4.5.1 (4G1004)。

4

1 回答 1

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;
}
于 2013-04-06T13:54:15.600 回答