我已经将问题跟踪为locationInView:在UITapGestureRecognizer上总是给我CGPoint(0,-67)的纵向和(0,268)横向。 (如果我不把它作为UITapGestureRecognizer投射,偶尔会得到(0,180)风景。
iOS 5 Simulator中不存在此问题。它通常发生在iOS 6 Simulator中,几乎90%的时间发生在iOS 6设备中。
我现在的猜测是,当它调用动作方法时,手势识别器不再有效了......但这并没有意义,因为这意味着我们总是需要在委托方法中调用locationInView :.
详细说明:
我想做的事情: 识别MKMapView上的Tap手势,隐藏该点以协调并将其显示为注释
我做了什么: 在手势识别器的动作方法中..
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:
和{{1它给出了正确的CGPoint。
我的问题是......这是预期的行为吗?或者我搞砸了什么?否则,这意味着我需要在其中一个委托方法中触发我的动作,因为我确实需要手势识别器的正确位置。尽管如此,这个选项听起来不是很正确。
答案 0 :(得分:2)
对不起麻烦的人,我找到了原因。
我只是将locationInView:
留在了performBlock:
NSManagedObjectContext
中,这很清楚,因为UIGestureRecognizer是一个UI用户,iOS中的规则#1只是“UI内容”属于主线。“这立即解释了locationInView:
的不一致行为以及为什么它更有可能在早期阶段取得成功。
经验教训,再次:将“手势识别器”读作UIGestureRecognizer
。的 “UI”即可。