我已经找到了locationInView的问题:在UITapGestureRecognizer上总是给我(0,-67)的肖像和风景的CGPoint (0,268)。(如果我不把它塑造成UITapGestureRecognizer,我偶尔会看到(0,180)的风景。
此问题在iOS 5模拟器中不存在。这种情况经常发生在iOS 6模拟器中,几乎90%的时间发生在iOS 6设备中。
我现在猜到,手势识别器在调用action方法时不再有效。但这没有意义,因为这意味着我们总是需要在委托方法中调用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>
中的所有委托方法进行了测试。在上面的action方法和– gestureRecognizer:shouldReceiveTouch:
中,手势识别器给出了locationInView:的无效位置(0,-64)。(如前所述,它是0,-67,但在几分钟前我将Xcode更新到最新版本lol之后,变成了0,-64 )。然而,在– gestureRecognizerShouldBegin:
和– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
中,它给出了正确的CGPoint。
我的问题是。这就是你想要的行为吗?还是我搞砸了什么?否则,就意味着我需要在一个委托方法中启动我的操作,因为我确实需要手势识别器的正确位置。但是这个选项听起来不太正确..。
发布于 2013-01-29 17:14:25
对不起,伙计们,我已经找到原因了。
我只是把locationInView:
放在performBlock:
of a NSManagedObjectContext
中,这很明显,因为UIGestureRecognizer是UI的东西,iOS中的规则#1是"UI内容只属于主线程“。这立即解释了locationInView:
的不一致行为,以及为什么它更有可能在早期阶段成功。
教训,再次:阅读“手势识别器”为UIGestureRecognizer
。"UI"。
https://stackoverflow.com/questions/14588067
复制相似问题