4

MKMapView でパンと「スクロールの終わり」をキャプチャしようとしています。ジェスチャ レコグナイザを使用すると、パン操作を簡単に行うことができます。ただし、MKMapView は iOS 6 で UIScrollViewDelegate を実装していないようです。これにより、MKMapView の最大ズーム レベルを制限する方法はありますか? うまくいかない。

考え?理想的には、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 には十分なものがありません。

4

1 に答える 1

10

Answering myself. I implemented all of MKMapViewDelegate's methods and it seems that

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

is called on pan, and

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

is called as soon as deceleration stops (and not before).

于 2013-01-01T08:25:37.937 に答える