Ho notato un comportamento strano mentre lavoravo con MKMapView e MKMapCamera. Devo implementare alcuni comportamenti standard dell'app di Apple Maps. Fondamentalmente, ciò di cui ho bisogno è di poter passare dalla modalità 2D alla modalità 3D quando la modalità di tracciamento utente di Map View è impostata su MKUserTrackingModeFollowWithHeading.Comportamento MKMapView strano quando si imposta MKMapCamera in MKUserTrackingModeFollowWithing modalità mappa
Attualmente, la mia soluzione funziona bene quando userTrackingMode è impostato su MKUserTrackingModeNone ma lo fa animazione strano in altre modalità (accade a prescindere I setcamera: animato: SI o NO). Quando registro i parametri della telecamera poco prima e dopo aver impostato il nuovo, l'unica differenza è il mio cambiamento di intonazione.
Un altro problema sta cambiando l'altitudine della telecamera per ingrandire o ridurre a livello di programma. Sto cercando di imitare lo zoom con un gesto di apertura o chiusura nel metodo IBAction. In followWithingMode la mappa torna sempre al livello di zoom "predefinito" (altitudine della telecamera), mentre in altre modalità funziona alla grande.
ho iniziato progetto di esempio per verificare cosa sta succedendo, e che è controller di vista il mio unico dell'applicazione vista con vista mappa in cui si verifica problema:
#import "CCViewController.h"
@interface CCViewController()
@end
@implementation CCViewController
- (void)viewDidLoad{
[super viewDidLoad];
}
- (void)setUpMap{
[self.mapView setShowsUserLocation: YES];
}
- (void)viewDidAppear:(BOOL)animated{
[self setUpMap];
}
- (IBAction)mapModeSwitchClicked:(id)sender {
MKMapCamera *newCamera = [MKMapCamera camera];
newCamera.centerCoordinate = self.mapView.camera.centerCoordinate;
newCamera.heading = self.mapView.camera.heading;
newCamera.altitude = self.mapView.camera.altitude;
if(!self.mapView.camera.pitch){
newCamera.pitch = 50;
self.mapModeSwitch.title = @"2D";
}
else{
newCamera.pitch = 0;
self.mapModeSwitch.title = @"3D";
}
[self.mapView setCamera:newCamera animated:YES];
}
- (IBAction)locateMeButtonClicked:(id)sender {
if(self.mapView.userTrackingMode != MKUserTrackingModeFollowWithHeading)
[self.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:YES];
else
[self.mapView setUserTrackingMode:MKUserTrackingModeNone animated:YES];
}
- (void)zoomMapWithZoomFactor:(double)factor{
MKMapCamera *newCamera = [MKMapCamera camera];
newCamera.pitch = self.mapView.camera.pitch;
newCamera.heading = self.mapView.camera.heading;
newCamera.altitude = self.mapView.camera.altitude * factor;
newCamera.centerCoordinate = self.mapView.camera.centerCoordinate;
[self.mapView setCamera:newCamera animated:YES];
}
- (IBAction)zoomInClicked:(id)sender {
[self zoomMapWithZoomFactor: 0.5];
}
- (IBAction)zoomOutClicked:(id)sender {
[self zoomMapWithZoomFactor: 2];
}
@end
Quello che sto cercando è un comportamento simile a Mappe Apple App. Hai qualche idea? Che cosa sto facendo di sbagliato ?
a partire dal 2017, succede ancora. – Claus