【问题标题】:Why AnnotationView didChangeDragState have called many times?为什么 AnnotationView didChangeDragState 调用了很多次?
【发布时间】:2012-08-05 12:08:07
【问题描述】:

我是 iOS 新手。我使用了这个答案中的代码:https://stackoverflow.com/a/3999583/1572234

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView 
didChangeDragState:(MKAnnotationViewDragState)newState 
fromOldState:(MKAnnotationViewDragState)oldState 
{
if (newState == MKAnnotationViewDragStateEnding)
   {
    NSLog(@"didChangeDragState");
   }
}

- (void) mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotationView
{
if ([[annotationView.annotation title] isEqualToString:@"2nd"]||[[annotationView.annotation title] isEqualToString:@"3rd"])
   {
    NSLog(@"didSelectAnnotationView");
   }
}

但是在我尝试拖动 pin 3 次后,我在调试区看到了这个:

 2012-08-05 14:47:06.962 TestApp[1692:11603] didSelectAnnotationView
 2012-08-05 14:47:11.825 TestApp[1692:11603] didChangeDragState
 2012-08-05 14:47:16.269 TestApp[1692:11603] didSelectAnnotationView
 2012-08-05 14:47:20.205 TestApp[1692:11603] didChangeDragState
 2012-08-05 14:47:20.207 TestApp[1692:11603] didChangeDragState
 2012-08-05 14:47:24.033 TestApp[1692:11603] didSelectAnnotationView
 2012-08-05 14:47:26.811 TestApp[1692:11603] didChangeDragState
 2012-08-05 14:47:26.814 TestApp[1692:11603] didChangeDragState
 2012-08-05 14:47:26.816 TestApp[1692:11603] didChangeDragState

我只需要一次调用 NSLog(@"didChangeDragState"),每次我拖动图钉时,我错过了什么?请帮忙。

【问题讨论】:

  • Ending 状态应该只在 pin 掉落时发生一次,但在此之前 pin 可能会经历多个状态。您确定日志消息来自发布的代码吗?试试这个:NSLog(@"didChangeDragState, title=%@, os=%d, ns=%d", annotationView.annotation.title, oldState, newState);ns=4 应该只在引脚掉落时出现。

标签: ios xcode android-mapview


【解决方案1】:

这是 ios 中的一个老错误。一年多前我向苹果报告过,但他们说他们无法重现它...... 我添加了自己的修复:

 if (newState == MKAnnotationViewDragStateEnding)
{
    CLLocationCoordinate2D droppedAt = annotationView.annotation.coordinate;
    //drmap1 and drmap2 initialized to 0 before

    double d1=drmap1-droppedAt.latitude;
    double d2=drmap2-droppedAt.longitude;
    if(d1<0.000001&&d1>=-0.000001&&d2<0.000001&&d2>=-0.000001) return; //V1.2a fix a bug in ios

    drmap1=droppedAt.latitude;
    drmap2=droppedAt.longitude;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多