Intereting Posts
iPad2 против iPad3 вручную позиционирует изменения? SceneKit: как обнаружить контакт без столкновения iOS Прокрутка прокрутки UITableView для переменной высоты ячейки Переменная высота ячейки в iOS UITableView с ограничениями автоматического размещения в коде Как я могу использовать стандартный интерфейс TV Out на iOS? STKAudioPlayer https soundcloud doesnot stream Проблема с использованием автоматической компоновки для поддержки разных размеров iPhone (включая диаграммы) необходимо изменить расположение меток с помощью cgpoint (swift3) Как заставить Ruby on Rails работать с ASIHTTPRequest? Индивидуальная обработка вложений электронной почты iOS в iOS6 Как разделить PDF на отдельный PDF-файл отдельной страницы в программном обеспечении iOS Swift 3 – Как преобразовать память Int32 как четыре символа Как использовать профиль подготовки, который не входит в мою учетную запись, для распространения приложения? Социальная структура для Facebook – текст заполнителя в Swift TTCatalog (Three20) не будет работать

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]; } 

Я понимаю, что это более старый вопрос, но это очень неприятная проблема. 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]; }