Tengo el siguiente problema:iOS - ¿Cómo limitar el MapView a una región específica?
Tengo un "mapa dibujado" (imagen) que agrego a MapView como una Superposición. No hay problema con eso ... pero tengo que limitar el MapView a la región de la Superposición, por lo que un usuario no puede desplazarse/alejarse fuera de esta región ... pero debería ser posible desplazarse/acercarse a los "límites". "de la superposición" significa que no puedo deshabilitar el zoom/desplazamiento para MapView.
¿Hay alguna idea/solución sobre este tema? La razón para usar MapView/-Kit es que necesito agregar varios POI al mapa personalizado. Esto puede volverse más complejo cuando solo se usa ImageView + ScrollView para presentar el mapa personalizado.
Investigué mucho sobre este tema, pero no encontré una buena solución.
¡Se agradece cualquier ayuda!
Best Regards, cristianos
Editar: Esta es nuestra solución: usted proporciona un superior izquierda y una parte inferior derecha se coordinan para limitar el mapa. El nivel de zoom (mínimo) también es limitado. Desactivé la desaceleración y puedes saltar un poco fuera del mapa (para un mejor rendimiento/ux). Agregué un borde gris de ~ 1km a la superposición para que el usuario no pueda ver el mapa mundial orignal de google.
LimitedMapView.h:
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface LimitedMapView : MKMapView <UIScrollViewDelegate>{
}
@property (nonatomic, assign) CLLocationCoordinate2D topLeftCoordinate;
@property (nonatomic, assign) CLLocationCoordinate2D bottomRightCoordinate;
@end
LimitedMapView.m:
#import "LimitedMapView.h"
@implementation LimitedMapView
@synthesize topLeftCoordinate, bottomRightCoordinate;
- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
if([super respondsToSelector:@selector(scrollViewDidZoom:)]) [super scrollViewDidZoom:scrollView];
if ([self region].span.latitudeDelta > 0.002401f || [self region].span.longitudeDelta > 0.003433f) {
CLLocationCoordinate2D center = self.centerCoordinate;
MKCoordinateSpan span = MKCoordinateSpanMake(0.002401f, 0.003433f);
self.region = MKCoordinateRegionMake(center, span);
}
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
if([super respondsToSelector:@selector(scrollViewDidEndDragging:)]) [super scrollViewDidEndDragging:scrollView willDecelerate:decelerate];
MKCoordinateRegion currentRegion = self.region;
bool changeRegionLong = YES;
bool changeRegionLat = YES;
// LONGITUDE
if((currentRegion.center.longitude - (currentRegion.span.longitudeDelta/2)) < self.topLeftCoordinate.longitude) {
currentRegion.center.longitude = (topLeftCoordinate.longitude + (currentRegion.span.longitudeDelta/2));
} else if((currentRegion.center.longitude + (currentRegion.span.longitudeDelta/2)) > self.bottomRightCoordinate.longitude) {
currentRegion.center.longitude = (bottomRightCoordinate.longitude - (currentRegion.span.longitudeDelta/2));
} else {
changeRegionLong = NO;
}
// LATITUDE
if((currentRegion.center.latitude + (currentRegion.span.latitudeDelta/2)) > self.topLeftCoordinate.latitude) {
currentRegion.center.latitude = (topLeftCoordinate.latitude - (currentRegion.span.latitudeDelta/2));
} else if((currentRegion.center.latitude - (currentRegion.span.latitudeDelta/2)) < self.bottomRightCoordinate.latitude) {
currentRegion.center.latitude = (bottomRightCoordinate.latitude + (currentRegion.span.latitudeDelta/2));
} else {
changeRegionLat = NO;
}
if(changeRegionLong || changeRegionLat) [self setRegion:currentRegion animated:YES];
}
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
[scrollView setContentOffset:scrollView.contentOffset animated:YES];
}
@end
añade mi solución. – cweinberger
Gracias por actualizar con la solución. Solo quería limitar el zoom máximo, y me encontré con un problema w/usando simplemente scrollViewDidZoom: a cualquier persona que esté por ahí, asegúrese de establecer su nuevo lapso en MENOS que el intervalo de verificación if, de lo contrario, la vista de mapa se atascaría al máximo enfocar. – Andrew
Una mejor solución escrita para swift está allí http://stackoverflow.com/a/31799617/2814964 – cl3m