我添加了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”
答案 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,您将无法更改此行为。