【问题标题】:UITapGestureRecognizer giving invalid values for locationInView:UITapGestureRecognizer 为 locationInView 提供无效值:
【发布时间】:2013-01-29 16:56:49
【问题描述】:

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

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

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

详情:

我想要做什么: 识别 MKMapView 上的 Tap 手势,隐藏该点以协调并将其显示为注释

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

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

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

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

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

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

更新:

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

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

【问题讨论】:

    标签: ios


    【解决方案1】:

    麻烦各位了,我已经找到原因了。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 2021-11-29
      • 2012-09-19
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      相关资源
      最近更新 更多