Si pellizca para acercar o alejar la aplicación Apple Maps mientras rastrea la ubicación del dispositivo, se ignora el componente "panorámica" del gesto de pellizco y el indicador de ubicación azul permanece fijo en el centro del pantalla. Este no es el caso cuando se usa un simple MKMapView
.Mantener la coordenada central mientras pellizca MKMapView
Suponiendo que ya tengo la ubicación del usuario, ¿cómo podría lograr este efecto? Intenté restablecer la coordenada central en los métodos regionDid/WillChangeAnimated:
del delegado, pero solo se llaman al inicio y al final del gesto. También traté de agregar una subclase UIPinchGestureRecognizer
que restablece la coordenada central cuando se mueven los toques, pero esto dio como resultado fallas técnicas en la representación.
Editar: Para aquellos que estén interesados, las siguientes obras para mí.
// CenterGestureRecognizer.h
@interface CenterGestureRecognizer : UIPinchGestureRecognizer
- (id)initWithMapView:(MKMapView *)mapView;
@end
// CenterGestureRecognizer.m
@interface CenterGestureRecognizer()
- (void)handlePinchGesture;
@property (nonatomic, assign) MKMapView *mapView;
@end
@implementation CenterGestureRecognizer
- (id)initWithMapView:(MKMapView *)mapView {
if (mapView == nil) {
[NSException raise:NSInvalidArgumentException format:@"mapView cannot be nil."];
}
if ((self = [super initWithTarget:self action:@selector(handlePinchGesture)])) {
self.mapView = mapView;
}
return self;
}
- (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
return NO;
}
- (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
return NO;
}
- (void)handlePinchGesture {
CLLocation *location = self.mapView.userLocation.location;
if (location != nil) {
[self.mapView setCenterCoordinate:location.coordinate];
}
}
@synthesize mapView;
@end
Después, simplemente añadirlo a su MKMapView
:
[self.mapView addGestureRecognizer:[[[CenterGestureRecognizer alloc] initWithMapView:self.mapView] autorelease]];
Esto dio como resultado los mismos problemas de representación que se mencionaron anteriormente: el centro de la vista de mapa alterna con frecuencia entre la ubicación del usuario y dónde se ubicaría si los reconocedores de gestos siguieran su curso. Quizás he entendido mal tu respuesta? He publicado la implementación de mi subclase 'UIPanGestureRecognizer' aquí: http://pastie.org/1934011 –
¡Eso funcionó! Me alegra que la solución fuera tan simple. Gracias, Scott. –