ios - 检测结束拖动/缩放 MKMapView

标签 ios objective-c mkmapview mapkit mkmapviewdelegate

有没有办法确定 MKMapView拖动和缩放停止?

现在我添加了一个 UIPanGestureRecognizer用于拖动 MKMapView但我会收到gestureRecognizer.state == UIGestureRecognizerStateEnded即使 map 正在滚动,用户也会立即抬起手指。我试图弄清楚的是,本地图仍在移动和/或用户再次触摸 map 以再次拖动 map 时,如何防止为我的 map 注释加载服务器数据?仅本地图停止移动和缩放并且在预定时间内静止不动时,才应调用数据加载机制。

这是我到目前为止实现的:

- (void)viewDidLoad {
...
  UIPanGestureRecognizer* panRec = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didDragMap:)];
  [panRec setDelegate:self];
  [panRec setDelaysTouchesBegan:YES];
  [panRec setDelaysTouchesEnded:YES];
  [panRec setCancelsTouchesInView:YES];
  [self.mapView addGestureRecognizer:panRec];
}

而选择器方法didDragMap:
- (void)didDragMap:(UIGestureRecognizer*)gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
    _searchBar.text = @"";
    _filtered = NO;
    _crosshair.hidden = NO;
    [self removeAllAnnotationExceptOfOriginalLocation];
}
else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
    [self performSelector:@selector(delayAddressResolving:) withObject:nil afterDelay:1.0];
}

}

选择器方法 delayAddressResolving: 正在从服务器加载所需的数据以显示我的注释信息。

欢迎所有笔记!

最佳答案

使用以下 MKMapViewDelegate方法:

    - (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
    - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated

每次 map 区域发生变化时都会调用这些方法。

关于ios - 检测结束拖动/缩放 MKMapView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24382820/

相关文章:

iphone - MKMapView RegionDidChangeAnimated 并不总是被调用!

ios - 没有 Storyboard ,UICollectionView 无法工作

ios - 计算后 SKRoutingService 不缩放到路由

ios - 更改应用名称

ios - 删除对象作为某些 KVO 属性的观察者的最佳实践

ios - UIMenucontroller 与 uitableviewcell 上的 uitextview

iphone - 如何根据属性值加载不同的自定义引脚或标识符?

iphone - 防止 MKMapView 不断重新缩放并重新居中到用户位置

ios - 如何使用正则表达式删除字符串中间的新行

ios - 在不显示选项卡栏的情况下执行到另一个导航 Controller 的转场