単純な NSTimer を使用して MKMapView をプログラムで回転させ、期待どおりに機能する MKMapCamera の見出しプロパティを常にインクリメントしています (マップがワシントン記念塔の周りをゆっくりと回転します)。
マップを中心を中心に回転させるのではなく、マップの下部を中心に回転させたい。ソリューションは単純で、マップの高さを 2 倍にしてから、画面の下部にある中心を中心に回転します。マップの高さを 2 倍にした後も、マップ フレームの中心ではなく、画面の中心を中心に回転します。
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];
}