点击自定义标注后MKMapKit regionDidChangeAnimated停止

我正在用这里解释的代码(Jacob的一个)实现一个自定义的MKAnnotationView标注,当选择Annotation时,它实际上会放置另一个Custom AnnotationView:

MKAnnotationView - 锁定自定义注释视图以固定位置更新

一切正常,但我有一些奇怪的行为。 点击自定义标注后,它将关闭标注,但regionDidChangeAnimated委托方法之后不会再被调用。

我错过了什么? 我可以像往常一样平移地图,但不会调用该委托方法。 虽然如果一个放大或缩小它确实被调用。

在为我放置的AnnotationView添加自定义CallOut之前,这从未发生过。

Thx提前。

问候,艾伦//


我从你提到的链接下载了XCode项目,并能够重现错误。 以下答案有一个解决方法,适用于我

在Pan上MKMapView不会调用regionDidChangeAnimated

为了方便起见,我想重申一下这个解决方案,以及我如何在上述项目中应用它

CustomCalloutViewController.h添加UIGestureRecognizerDelegate

@interface CustomCalloutViewController : UIViewController 
<MKMapViewDelegate, UIGestureRecognizerDelegate>

在方法viewDidLoad CustomCalloutViewController.m中,在[super viewDidLoad];之前添加[super viewDidLoad];

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];
}

然后在CustomCalloutViewController.m添加以下内容

#pragma mark -
#pragma mark Gesture Recognizers

- (void)pinchGestureCaptured:(UIPinchGestureRecognizer*)gesture{
    if(UIGestureRecognizerStateEnded == gesture.state){
        ///////////////////[self doWhatYouWouldDoInRegionDidChangeAnimated];
    }
}

- (void)panGestureCaptured:(UIPanGestureRecognizer*)gesture{
    if(UIGestureRecognizerStateEnded == gesture.state){


        NSLog(@"panGestureCaptured ended");
        // *************** Here it is *********************
        ///////////////////[self doWhatYouWouldDoInRegionDidChangeAnimated];
        // *************** Here it is *********************
    }
}

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
    return YES;
}

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:   (UITouch *)touch{
    return YES;
}

编辑:我在这里找到了另一个解决方法(在底部也提到了上述解决方法)。 我没有尝试,但听起来很有希望。 我在这里重复一遍:

我的解决方法很简单:在视图控制器中,在viewDidAppear:中创建MKMapView,并在viewDidDisappear:中将其销毁。 我意识到对于那些使用Interface Builder的人来说这不是一个友好的解决方法,但在我看来,它是最干净的,也许是在应用程序中节省内存的最佳方式。

链接地址: http://www.djcxy.com/p/67277.html

上一篇: MKMapKit regionDidChangeAnimated stops after tapping custom callout

下一篇: Customized callout bubble MKMapView