J'ai une carte qui s'affiche correctement, la seule chose que je veux faire maintenant est de régler le niveau de zoom lors du chargement. Y a-t-il un moyen de faire cela?
Merci
Je me suis trouvé une solution, qui est très simple et fait l'affaire. Utilisez MKCoordinateRegionMakeWithDistance
pour régler la distance en mètres verticalement et horizontalement pour obtenir le zoom souhaité. Et puis bien sûr, lorsque vous mettez à jour votre emplacement, vous obtiendrez les bonnes coordonnées, ou vous pouvez le spécifier directement 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;
Rapide:
let location = ...
let region = MKCoordinateRegion( center: location.coordinate, latitudinalMeters: CLLocationDistance(exactly: 5000)!, longitudinalMeters: CLLocationDistance(exactly: 5000)!)
mapView.setRegion(mapView.regionThatFits(region), animated: true)
MKCoordinateRegionMakeWithDistance
est toujours là à Swift. Cette solution fonctionne!Sur la base du fait que les lignes de longitude sont espacées de manière égale en tout point de la carte, il existe une implémentation très simple pour définir le centerCoordinate et le zoomLevel:
la source
- (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 z = log2(360 * ((self.mapView.frame.size.width/256) / self.mapView.region.span.longitudeDelta));
Ce n'est pas intégré, mais j'ai vu / utilisé ce code. Cela vous permet d'utiliser ceci:
Remarque: ce n'est pas mon code, je ne l'ai pas écrit, donc je ne peux pas m'en attribuer le mérite
la source
Vous pouvez également zoomer en utilisant MKCoordinateRegion et en définissant son delta de latitude et de longitude. Voici une référence rapide et voici la référence iOS. Il ne fera rien d'extraordinaire mais devrait vous permettre de régler le zoom lorsqu'il dessine la carte.
Modifier 1:
la source
Une implémentation simple de Swift, si vous utilisez des points de vente.
Basé sur la réponse de @ Carnal.
la source
Mise en œuvre rapide
la source
IBOutlet
à votremap
, vous le définissez comme unMapViewWithZoom
au lieu d'un simpleMKMapView
. Ensuite, vous pouvez simplement régler le niveau de zoom avecmap.zoomLevel = 1
oumap.zoomLevel = 0.5
mapView.zoomLevel -= 2
Pour Swift 3, c'est une avance assez rapide:
Définissez simplement les lat-, long-Meters
<CLLocationDistance>
et la mapView adaptera le niveau de zoom à vos valeurs.la source
Basé sur l'excellente réponse de @ AdilSoomro . J'ai trouvé ceci:
la source
J'espère que le fragment de code suivant vous aidera.
Vous pouvez choisir n'importe quelle valeur au lieu de 0,5 pour réduire ou augmenter le niveau de zoom. J'ai utilisé ces méthodes en cliquant sur deux boutons.
la source
Une réponse Swift 2.0 utilisant NSUserDefaults pour enregistrer et restaurer le zoom et la position de la carte.
Fonction pour enregistrer la position de la carte et zoomer:
Exécutez la fonction à chaque fois que la carte est déplacée:
Fonction pour enregistrer le zoom et la position de la carte:
Ajoutez ceci à viewDidLoad:
la source
Je sais que c'est une réponse tardive, mais je voulais juste aborder la question du réglage du niveau de zoom moi-même. La réponse de goldmine est excellente mais je trouve que cela ne fonctionne pas suffisamment bien dans mon application.
En y regardant de plus près, Goldmine déclare que «les lignes de longitude sont espacées de manière égale en tout point de la carte». Ce n'est pas vrai, ce sont en fait des lignes de latitude espacées de façon égale de -90 (pôle sud) à +90 (pôle nord). Les lignes de longitude sont espacées à leur plus large à l'équateur, convergeant vers un point aux pôles.
La mise en œuvre que j'ai adoptée consiste donc à utiliser le calcul de latitude comme suit:
J'espère que cela aide à ce stade tardif.
la source
Rapide:
locValue est votre coordonnée.
la source
Ici, j'ai mis ma réponse et son fonctionnement pour swift 4.2 .
MKMapView centre et zoom avant
la source
Basé sur la réponse de quentinadam
Swift 5.1
la source
MKMapView
extension basée sur cette réponse (+ précision du niveau de zoom en virgule flottante):la source