8

我添加了 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”这样的一键拖动

4

4 回答 4

19

解决这个问题。^^

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

所以在初始化时选择了 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];
}
于 2011-02-22T02:09:39.300 回答
4

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

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

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

于 2013-08-08T01:24:33.037 回答
0

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

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

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

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

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

于 2012-08-03T03:47:43.517 回答
-4

要拖动图钉,您需要点击并按住,而不是双击。

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

于 2011-02-22T01:28:06.337 回答