iphone - 拖动注解 View 导致多次触发拖动状态委托(delegate)方法

标签 iphone objective-c ios mkannotation mkannotationview

这个有点晦涩。

这个 MKMapViewDelegate 有一个方法可以告诉你何时开始和完成拖动注释 View 。我是这样实现的:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState {

    if (oldState == MKAnnotationViewDragStateStarting && newState == MKAnnotationViewDragStateEnding)
    {
        NSLog(@"Ending drag");
    }

    if (newState == MKAnnotationViewDragStateStarting)
    {
        NSLog(@"Beginning drag");
    }
}

这类作品。但是,当我停止拖动注释并再次拖动时,上述方法会触发两次,然后触发 3 次等等。所以控制台显示:

Beginning drag
Ending drag

Beginning drag
Beginning drag
Ending drag
Ending drag

Beginning drag
Beginning drag
Beginning drag
Ending drag
Ending drag
Ending drag

Beginning drag
Beginning drag
Beginning drag
Beginning drag
Ending drag
Ending drag
Ending drag
Ending drag

关于造成这种情况的原因有什么想法吗?

最佳答案

我似乎通过添加来解决这个问题:

[annotationView setDragState:MKAnnotationViewDragStateNone];

在 if 语句的“结束拖动”部分。

关于iphone - 拖动注解 View 导致多次触发拖动状态委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6557173/

相关文章:

ios - 下载数据并显示

iphone - 图标上的 aap 名称类似于 iphone 中的应用程序名称

java - Linux 服务器上的 HTTP 直播

objective-c - 使用自动引用计数释放 self 的新模式是什么?

ios - Swift: "nil while unwrapping an Optional value"不是零

javascript - 检测 iPad 方向变化

objective-c - 将 NSNumber 转换为 int 时遇到问题

ios - 使 iOS 应用程序出现在移动数据中,位于 'use mobile data for' 下

ios - ipad:应用程序崩溃不会产生异常?

iphone - 如何将此 if 条件更改为 switch 语句?