1

我已经找到了 locationInView 的问题:在 UITapGestureRecognizer 上总是给我纵向的 (0,-67) 和横向的 (0,268) 的 CGPoint。(如果我不将其转换为 UITapGestureRecognizer,我偶尔会在风景中得到 (0,180)。

这个问题在 iOS 5 Simulator 中不存在。它经常发生在 iOS 6 模拟器中,几乎 90% 的时间发生在 iOS 6 设备中。

我现在的猜测是手势识别器在调用动作方法时不再有效..但这没有意义,因为这意味着我们总是需要在委托方法中调用 locationInView:..

细节:

我正在尝试做的事情: 识别 MKMapView 上的点击手势,隐藏该点以协调并将其显示为注释

我做了什么: 在手势识别器的动作方法中..

CLLocationCoordinate2D coordinate = [self.mapView convertPoint:[(UITapGestureRecognizer *)sender locationInView:self.mapView] toCoordinateFromView:self.mapView];

我确实进行了自省以确保发件人确实是 UITapGestureRecognizer..

我也尝试过返回YES(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer但这无济于事。

应该发生什么: 坐标应该与地图上点击的点相对应。

发生了什么: 坐标总是稍微偏左一点。

更新:

所以..我已经测试了所有的委托方法<UIGestureRecognizerDelegate>。在上面的动作方法和– gestureRecognizer:shouldReceiveTouch:手势识别器中都为 locationInView: 提供了无效的位置 (0,-64)。(如上所述,它是 0,-67,但在几分钟前我将 Xcode 更新到最新版本后变为 0,-64,哈哈)但是,– gestureRecognizerShouldBegin:– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:给出了正确的 CGPoint。

我的问题是..这是预期的行为吗?还是我搞砸了什么?否则,这意味着我需要在其中一种委托方法中触发我的操作,因为我确实需要手势识别器的正确位置。不过,这个选项听起来不太正确。

4

1 回答 1

2

麻烦各位了,我已经查明原因了。

我只是留locationInView:在了performBlock:a 中NSManagedObjectContext,这很清楚,因为 UIGestureRecognizer 是 UI 的东西,而 iOS 中的规则 #1 是“UI 的东西只属于主线程”。这立即解释了 的不一致行为locationInView:以及为什么它更有可能在早期阶段成功。

再次吸取教训:将“手势识别器”阅读为UIGestureRecognizer. “用户界面”

于 2013-01-29T17:14:25.247 回答