Ios UITapGestureRecognitor为locationInView提供无效值:

Ios UITapGestureRecognitor为locationInView提供无效值:,ios,Ios,我发现问题出在locationInView上:在UITapGestureRecognitor上,纵向和横向的CGPoint分别为(0,-67)和(0268)。(如果我不将其转换为UITapgestureRecognitor,我偶尔会在横向中获得(0180) 这个问题在iOS 5模拟器中并不存在。它经常发生在iOS 6模拟器中,几乎90%的时间发生在iOS 6设备中 我现在的猜测是,手势识别器在调用action方法时不再有效。但这没有意义,因为这意味着我们总是需要在委托方法中调用locationI

我发现问题出在locationInView上:在UITapGestureRecognitor上,纵向和横向的CGPoint分别为(0,-67)和(0268)。(如果我不将其转换为UITapgestureRecognitor,我偶尔会在横向中获得(0180)

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

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

详情:

我想做什么: 识别MKMapView上的点击手势,转换该点以进行协调,并将其显示为注释

我所做的: 在手势识别器的动作方法中

CLLocationCoordinate2D coordinate = [self.mapView convertPoint:[(UITapGestureRecognizer *)sender locationInView:self.mapView] toCoordinateFromView:self.mapView];
我确实进行了内省,以确保发件人确实是一个UITapgestureRecognitor

CLLocationCoordinate2D coordinate = [self.mapView convertPoint:[(UITapGestureRecognizer *)sender locationInView:self.mapView] toCoordinateFromView:self.mapView];
我还尝试为
(BOOL)手势识别器返回
YES
(UIGestureRecognitor*)手势识别器应与手势识别器同时识别:(UIGestureRecognitor*)其他手势识别器
,但这没有帮助

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

发生了什么: 坐标始终稍微向左偏远

更新:

因此..我已使用
中的所有代理方法进行了测试。上述动作方法和
–手势识别器:shouldReceiveTouch:
手势识别器为locationInView:提供了无效的位置(0,-64)。(如上所述为0,-67,但几分钟前我将Xcode更新为最新版本后变为0,-64,lol)然而,在
-手势识别器应开始:
-手势识别器:应与手势识别器同时识别:
中,它给出了正确的CGPoint


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

抱歉,伙计们,我已经找到了原因

我只是把
locationInView:
放在了
NSManagedObjectContext
performBlock:
中,这一点很清楚,因为UIgestureRecognitizer是一个UI东西,iOS中的规则1是“UI内容只属于主线程”这立即解释了
locationInView:
的不一致行为,以及为什么它更可能在早期阶段成功

再次总结经验教训:将“手势识别器”读作
UI手势识别器
“UI”