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