怎么能拖动MKPinAnnotationView引脚只有一个水龙头?

时间:2011-02-21 16:42:54

标签: iphone ios4 mkmapview mkpinannotationview

我添加了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];
}

好的我可以拖针。

但有一个问题是它不仅仅是一次点击。总是需要第二次点击。

当我第一次点击引脚被选中但无法拖动时。当我再次点击时,它是可用的拖动。

怎么了?我想只需要一次点击拖动,如“Map.app”

4 个答案:

答案 0 :(得分:17)

重新解决这个问题。 ^^

我认为对于拖针,已经选择了引脚。

初始化时选择了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];
}

答案 1 :(得分:4)

此处的答案不考虑您先敲击图钉并在之后取消选择,然后拖动问题将返回,因为mapView取消选择注释视图。我来到了一个新的解决方案,那就是选择刚刚取消选择的注释视图:

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

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

答案 2 :(得分:0)

更新:不,我错了。我有时候还需要一个以上的水龙头。这是我错误的答案:

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

  

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

     

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

在我这样做之前,我几乎总是不得不轻敲两次,然后按住。在这之后,我还没有第二次点击。

答案 3 :(得分:-3)

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

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