Ich bemerkte seltsames Verhalten bei der Arbeit mit MKMapView und MKMapCamera. Ich muss ein Standardverhalten der Apple Maps App implementieren. Grundsätzlich muss ich in der Lage sein, zwischen 2D- und 3D-Modus zu wechseln, wenn der Benutzerverfolgungsmodus von Map View auf MKUserTrackingModeFollowWithHeading eingestellt ist.Weird MKMapView Verhalten beim Setzen von MKMapCamera in MKUserTrackingModeFollowWithHeading Map-Modus
Derzeit meine Lösung funktioniert gut, wenn userTrackingMode zu MKUserTrackingModeNone gesetzt ist, aber es tut seltsame Animation in anderen Modi (es geschieht unabhängig setCamera I: animierte: JA oder NEIN). Wenn ich Kameraparameter kurz vor und nach der Einstellung neu aufnehme, ist der einzige Unterschied meine Tonhöhenänderung.
Ein weiteres Problem ist die Kamera-Höhe zu ändern, um programmatisch zu vergrößern oder zu verkleinern. Ich versuche, Zoom mit Pinch in oder out Geste in IBAction-Methode zu imitieren. In followWithHeadingMode Karte immer auf "Standard" Zoom-Ebene (Kamera Höhe) zurück, während in anderen Modi funktioniert großartig.
begann ich Beispielprojekt zu überprüfen, was los ist, und das ist meine einzige View-Controller Ansicht Anwendung mit Kartenansicht, wo Problem auftritt:
#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
Was ich suche ein ähnliches Verhalten wie Apple-Maps-App ist. Haben Sie irgendwelche Ideen? Was mache ich falsch ?
ab 2017 passiert dies immer noch. – Claus