MKMapView 没有在 Pan 上调用 regionDidChangeAnimated
Posted
技术标签:
【中文标题】MKMapView 没有在 Pan 上调用 regionDidChangeAnimated【英文标题】:MKMapView Not Calling regionDidChangeAnimated on Pan 【发布时间】:2012-02-02 22:27:13 【问题描述】:我有一个带有 MKMapView 和代码的应用程序,每次地图更改位置时都会调用该代码(在 regionDidChangeAnimated 中)。当应用程序最初加载时,在显式更新地图坐标的平移(滑动)、捏合、点击和按钮上调用 regionDidChangeAnimated。加载其他视图并返回地图后,仅在点击和显式更新地图的按钮时才调用 regionDidChangeAnimated。平移地图和捏不再调用 regionDidChangeAnimated。
我看过这个*** post 并没有解决这个问题。 devforums 和 iphonedevsdk 上的论坛帖子也不起作用。有谁知道是什么导致了这个问题?我没有向 MKMapView 添加任何子视图。
【问题讨论】:
【参考方案1】:我最初不想这样做,但到目前为止它似乎没有任何问题(取自有问题的 devforums 帖子):
将 UIGestureRecognizerDelegate 添加到您的标题中。 现在添加版本号检查...如果我们在 ios 4 上,我们可以这样做:
if (NSFoundationVersionNumber >= 678.58)
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGestureCaptured:)];
pinch.delegate = self;
[mapView addGestureRecognizer:pinch];
[pinch release];
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureCaptured:)];
pan.delegate = self;
[mapView addGestureRecognizer:pan];
[pan release];
添加处理手势的委托方法:
#pragma mark -
#pragma mark Gesture Recognizers
- (void)pinchGestureCaptured:(UIPinchGestureRecognizer*)gesture
if(UIGestureRecognizerStateEnded == gesture.state)
///////////////////[self doWhatYouWouldDoInRegionDidChangeAnimated];
- (void)panGestureCaptured:(UIPanGestureRecognizer*)gesture
if(UIGestureRecognizerStateEnded == gesture.state)
///////////////////[self doWhatYouWouldDoInRegionDidChangeAnimated];
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
return YES;
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch: (UITouch *)touch
return YES;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
return YES;
【讨论】:
是的,我在使用 iOS 4 和 iOS 5 时遇到了问题,并且两者都适用。以上是关于MKMapView 没有在 Pan 上调用 regionDidChangeAnimated的主要内容,如果未能解决你的问题,请参考以下文章
当我调用 setCoordinate 时,MKMapView 没有更新
MKMapView - 未调用 rendererForOverlay