【问题标题】:Detecting panning + decelerate of MKMapView检测 MKMapView 的平移+减速
【发布时间】:2012-12-16 00:54:53
【问题描述】:

我正在尝试捕获 MKMapView 上的平移和“滚动结束”。使用手势识别器可以轻松实现平移。但是,MKMapView 似乎没有在 iOS 6 中实现 UIScrollViewDelegate。这使得Is there way to limit MKMapView maximum zoom level? 中的解决方案不起作用。

想法?理想情况下,我会像这样利用 UIScrollViewDelegate:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if ([super respondsToSelector:@selector(scrollViewDidEndDecelerating:)]) {
        [super scrollViewDidEndDecelerating:scrollView];
    }
    [self.myDelegate mapDidFinishPanning:self];
}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:    (BOOL)decelerate {
    if ([super respondsToSelector:@selector(scrollViewDidEndDragging:)]) {
        [super scrollViewDidEndDragging:scrollView];
    }

if(!decelerate) {
    [self.myDelegate mapDidFinishPanning:self];
}

}

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    if ([super respondsToSelector:@selector(scrollViewWillBeginDragging:)]) {
        [super scrollViewWillBeginDragging:scrollView];
    }
    [self.myDelegate mapDidBeginPanning:self];
}

在扩展 MKMapView 的类中

@interface MyMapView : MKMapView <UIScrollViewDelegate, UIGestureRecognizerDelegate>

但这在 iOS 6 中不起作用。我在 MKMapViewDelegate 中看不到任何足够的东西。

【问题讨论】:

  • 更新:MKMapViewDelegate 的几个方法似乎可以解决问题。

标签: uiscrollview ios6 mkmapview mapkit mkmapviewdelegate


【解决方案1】:

回答我自己。我实现了 MKMapViewDelegate 的所有方法,似乎

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

在 pan 上调用,并且

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

在减速停止后立即调用(而不是之前)。

【讨论】:

  • 此外,如果他们继续平移(即使它没有完全减速),也会调用 regionDidChange,所以我不得不使用一些基于时间的逻辑。
  • 你能给出一个基于时间的逻辑吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多