MKMapCamera не соблюдает рамку карты при вращении

Я программно вращаю MKMapView, используя простой NSTimer, чтобы постоянно увеличивать свойство заголовка MKMapCamera, которое работает как ожидалось (заставляет карту медленно вращаться вокруг Монумента Вашингтона).

Вместо того, чтобы карта вращалась вокруг ее центра, я хочу, чтобы она вращалась вокруг нижней части карты. Решение должно быть простым, удвоить высоту карты и затем вращаться вокруг ее центра, который теперь находится в нижней части экрана. После удвоения высоты карты она по-прежнему вращается вокруг центра экрана, а не центра кадра карты.

Похоже, что Apple добавила дополнительную логику в MKMapView, чтобы сохранить ярлык «Legal» справа внизу, независимо от того, что представляет собой кадр карты, который, как я полагаю, также вызывает эту проблему.

Любые идеи, как я могу заставить карту вращаться вокруг нижней части карты, а не центра?

- (void)setupMap { // Works as expected (rotates around center of screen) CGRect mapFrame = self.view.bounds; // works as expected // Doesn't work as expected (also rotates around the center of the screen) //mapFrame.size.height = self.view.frame.size.height*2; // Create/show MKMapView testMapView = [[MKMapView alloc] initWithFrame:mapFrame]; [self.view addSubview:testMapView]; // Zoom into the Washington Monument with a pitch of 60° MKMapCamera *aCamera = [MKMapCamera camera]; [aCamera setCenterCoordinate:CLLocationCoordinate2DMake(38.8895, -77.0352)]; [aCamera setAltitude:400]; [aCamera setPitch:60]; [testMapView setCamera:aCamera]; // Begin rotating map every 1/10th of a second NSTimer *aTimer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(rotateMap) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:aTimer forMode:NSDefaultRunLoopMode]; } - (void)rotateMap { MKMapCamera *aCamera = [testMapView camera]; [aCamera setHeading:aCamera.heading+1]; [testMapView setCamera:aCamera]; } 

Solutions Collecting From Web of "MKMapCamera не соблюдает рамку карты при вращении"

Я понимаю, что это более старый вопрос, но это очень неприятная проблема. Autolayout и MapKit делают некоторые фанки под капотом. Я заметил, что рендеринг mapView автоматически центрировал мое представление карты, чтобы поместить местоположение пользователя в центр экрана. никакое количество смещений, ограничений, преобразований, supeviews, не могло заставить карту не центрироваться на экране, пока я не сделал это.

 - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { CLLocationDegrees heading = newHeading.trueHeading >= 0 ? newHeading.trueHeading : newHeading.magneticHeading; //ACCOUNT FOR LANDSCAPE ORIENTATION IN HEADING if(self.interfaceOrientation == UIInterfaceOrientationLandscapeRight){ heading += 180; if(heading > 360) heading -= 360; } //OFFSET MAP CGPoint p = [_mapView convertCoordinate:_currentLocation toPointToView:_mapView]; CGPoint p2 = CGPointMake(px, py - MAP_VERTICAL_OFFSET); CLLocationCoordinate2D t = [_mapView convertPoint:p2 toCoordinateFromView:_mapView]; [_aCamera setHeading:heading]; [_aCamera setCenterCoordinate:t]; [_mapView setCamera:_aCamera]; }