所以我对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.1
和0.5
之间的值,则可能会有效。但是一旦我去0.6
或更高,它就不起作用了。 Obj-C引擎盖下发生的事情我不知道?
另外,我知道我应该在我的处理程序函数中检查状态,所以除非那样能解决这个问题,否则我不会为此而烦恼。在深入研究细节之前,我只想先让骨头工作。
谢谢!
P.S。,使用OS X 10.8.2和Xcode 4.5.1(4G1004)。
答案 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;
}