J'ai une carte qui indique correctement, la seule chose que je veux faire maintenant est de définir le niveau de zoom lors du chargement. Est-il un moyen de faire cela?
Merci
J'ai une carte qui indique correctement, la seule chose que je veux faire maintenant est de définir le niveau de zoom lors du chargement. Est-il un moyen de faire cela?
Merci
Je me suis trouvé une solution, qui est très simple et fait le tour. Utiliser MKCoordinateRegionMakeWithDistance
afin de définir la distance en mètres à la verticale et à l'horizontale pour obtenir le niveau de zoom désiré. Et puis, bien sûr, lorsque vous mettez à jour votre emplacement, vous obtiendrez les coordonnées de droite, ou vous pouvez spécifier directement dans l' CLLocationCoordinate2D
au démarrage, si c'est ce que vous devez faire:
CLLocationCoordinate2D noLocation;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(noLocation, 500, 500);
MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits:viewRegion];
[self.mapView setRegion:adjustedRegion animated:YES];
self.mapView.showsUserLocation = YES;
Basé sur le fait que les lignes de longitude sont espacés de manière égale en tout point de la carte, il est très simple de mise en œuvre pour définir la centerCoordinate et zoomLevel:
@interface MKMapView (ZoomLevel)
@property (assign, nonatomic) NSUInteger zoomLevel;
- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
zoomLevel:(NSUInteger)zoomLevel
animated:(BOOL)animated;
@end
@implementation MKMapView (ZoomLevel)
- (void)setZoomLevel:(NSUInteger)zoomLevel {
[self setCenterCoordinate:self.centerCoordinate zoomLevel:zoomLevel animated:NO];
}
- (NSUInteger)zoomLevel {
return log2(360 * ((self.frame.size.width/256) / self.region.span.longitudeDelta)) + 1;
}
- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
zoomLevel:(NSUInteger)zoomLevel animated:(BOOL)animated {
MKCoordinateSpan span = MKCoordinateSpanMake(0, 360/pow(2, zoomLevel)*self.frame.size.width/256);
[self setRegion:MKCoordinateRegionMake(centerCoordinate, span) animated:animated];
}
@end
Il n'est pas intégré, mais j'ai vu / utilisé le code de http://troybrant.net/blog/2010/01/set-the-zoom-level-of-an-mkmapview/
Cela vous permet d'utiliser ceci:
[mapView setCenterCoordinate:myCoord zoomLevel:13 animated:YES];
Remarque: Ce n'est pas mon code, je n'ai pas l'écrire, de sorte que cet effet ne peut pas prendre le crédit pour cela
Vous pouvez également zoomer en utilisant MKCoordinateRegion et la fixation de sa durée de latitude et de longitude delta. Ci-dessous est un guide de référence rapide et ici est le iOS de référence. Il ne fera rien de compliqué, mais devrait vous permettre de régler le zoom quand il dessine la carte.
MKCoordinateRegion region;
region.center.latitude = {desired lat};
region.center.longitude = {desired lng};
region.span.latitudeDelta = 1;
region.span.longitudeDelta = 1;
mapView.region = region;
Edit 1:
MKCoordinateRegion region;
region.center.latitude = {desired lat};
region.center.longitude = {desired lng};
region.span.latitudeDelta = 1;
region.span.longitudeDelta = 1;
region = [mapView regionThatFits:region];
[mapView setRegion:region animated:TRUE];
@AdilSoomro de la grande réponse (http://stackoverflow.com/a/15020534/224707) j'ai ceci:
@interface MKMapView (ZoomLevel)
- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
zoomLevel:(NSUInteger)zoomLevel
animated:(BOOL)animated;
-(double) getZoomLevel;
@end
@implementation MKMapView (ZoomLevel)
- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
zoomLevel:(NSUInteger)zoomLevel animated:(BOOL)animated {
MKCoordinateSpan span = MKCoordinateSpanMake(0, 360/pow(2, zoomLevel)*self.frame.size.width/256);
[self setRegion:MKCoordinateRegionMake(centerCoordinate, span) animated:animated];
}
-(double) getZoomLevel {
return log2(360 * ((self.frame.size.width/256) / self.region.span.longitudeDelta));
}
@end
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.