【问题标题】:How can drag MKPinAnnotationView pin only one tap?MKPinAnnotationView 怎么可以一键拖动?
【发布时间】:2011-07-01 10:00:57
【问题描述】:

我添加了 MKPinAnnotationView 和 setDragAble。 我的代码在这里

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    MKPinAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"];
    [annotationView setDraggable:YES];
    annotationView.pinColor = MKPinAnnotationColorPurple;
    return [annotationView autorelease];
}

好的,我可以拖动别针。

但一个问题是它不只是轻轻一按。总是需要第二次点击。

当我第一次点击 pin 被选中但无法拖动时。当我再次点击时,它可以拖动。

怎么了?我想要像“Map.app”这样的一键拖动

【问题讨论】:

    标签: iphone ios4 mkmapview mkpinannotationview


    【解决方案1】:

    解决这个问题。 ^^

    我认为对于拖动针,针已被选中。

    所以在初始化时选择了 MKPinAnnotationView。

    我的新代码。

    - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
        MKPinAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"];
        [annotationView setDraggable:YES];
        annotationView.pinColor = MKPinAnnotationColorPurple;
        [annotationView setSelected:YES animated:YES];
        return [annotationView autorelease];
    }
    

    【讨论】:

    • 我今天遇到了同样的问题,并提出了几乎相同的解决方案,除了我在委托的mapView:didAddAnnotationViews: 方法中调用了-[mapView selectAnnotation:]。似乎也能正常工作。
    • @DanielDickison 是的,这对我有用。上面的答案似乎不起作用。
    【解决方案2】:

    这里的答案不考虑当你先点击一个图钉然后取消选择它,然后拖动问题将返回,因为 mapView 取消选择注释视图。我遇到了一个新的解决方案,那就是选择刚刚被取消选择的注释视图:

    -(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
    {
        [view setSelected:YES];
    }
    

    这将使您摆脱所有的挫败感。它的美妙之处在于,这就是你所需要的!您根本不需要将引脚设置为选中状态。

    【讨论】:

    • 完美!这最终以我期望的方式解决了问题。这是 Swift 3 版本:func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) { view.isSelected = true }
    【解决方案3】:

    更新:不,我错了。我有时仍然需要不止一次点击。这是我的错误答案:

    我今天遇到了这个问题。这似乎是因为我没有正确更改拖动状态,如 -setDragState:animated 的文档中所示:(忽略 -dragState 的文档,它从不调用 setDragState:)。

    为响应这些更改,您对此方法的自定义实现应执行以下操作:

    当拖动状态变为 MKAnnotationViewDragStateStarting 时,将状态设置为 MKAnnotationViewDragStateDragging。如果您执行动画以指示拖动的开始,并且动画参数为 YES,请在更改状态之前执行该动画。 当状态更改为 MKAnnotationViewDragStateCanceling 或 MKAnnotationViewDragStateEnding 时,将状态设置为 MKAnnotationViewDragStateNone。如果在拖动结束时执行动画,并且动画参数为 YES,则应在更改状态之前执行该动画。

    在我这样做之前,我几乎总是必须点击两次,然后按住。完成此操作后,我还没有再次点击。

    【讨论】:

    • 应该将其编辑为“无”还是完全删除?
    【解决方案4】:

    要拖动图钉,您需要长按,而不是双击。

    如果不使用私有 API,您将无法更改此行为,这很可能会导致您的应用被拒绝。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多