Ho scaricato il progetto XCode dal link che lei ha citato e stato in grado di riprodurre l'errore. La risposta seguente è una soluzione che ha funzionato per me
MKMapView Not Calling regionDidChangeAnimated on Pan
Per comodità voglio ripetere la soluzione e come ho applicato al progetto di cui
In CustomCalloutViewController.h
aggiungere UIGestureRecognizerDelegate
@interface CustomCalloutViewController : UIViewController
<MKMapViewDelegate, UIGestureRecognizerDelegate>
in CustomCalloutViewController.m
nel metodo viewDidLoad
add prima [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];
}
Poi ancora nel CustomCalloutViewController.m
aggiungere il seguente
#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;
}
Edit: ho trovato un'altra soluzione here (tutti giù in fondo la soluzione precedente è menzionato, anche). Non ho provato, ma sembra promettente. Ripeto qui:
La mia soluzione è semplice: Nel tuo controller della vista, creare il MKMapView in viewDidAppear :, e distruggerlo in viewDidDisappear :. Mi rendo conto che questa soluzione non è amichevole per chi utilizza Interface Builder, ma, a mio avviso, è il modo più pulito e probabilmente il modo migliore per risparmiare memoria nella tua app.
In realtà ho scoperto che questo accade sul progetto originale che tutti utilizzano come modello sull'emulatore iOS 5.1, quindi non è il mio codice. Proverò a sostituire il didSelectView con gli osservatori e vedere cosa succede. –
Anche questo problema si verifica, sembra che si verifichi quando si fa clic sul pin e si tiene premuto mentre si carica un nuovo set di pin. – ThePower