MapView を回転させる方法は次のとおりです (「コンパスの向きを使用して MapView を回転させる」を参照)。
[self.mapView setTransform:CGAffineTransformMakeRotation(-1 * currentHeading.magneticHeading * 3.14159 / 180)];
次に、注釈ビューの方向をデバイスの上部に維持するには:
for (MKAnnotation *annotation in self.mapView.annotations) {
MKAnnotationView *annotationView = [self.mapView viewForAnnotation:annotation];
[annotationView setTransform:CGAffineTransformMakeRotation(currentHeading.magneticHeading * 3.14159 / 180)];
}
AnnotationViews の回転点を下の中心にしたい場合は、各ビューの anchorPoint を次のように設定すると思います。
annotationView.layer.anchorPoint = CGPointMake(0.5, 1.0);
ただし、これを行うと、annotationView の位置が変更されるという問題がまだいくつかあります (おそらく、stackoverflow の質問と同じ問題: changing-my-calayers-anchorpoint-moves-the-view)。