2009-08-07 123 views
6

埋め込みをiPhoneが向いている方向に常に向けるようにすることは可能ですか?基本的には、自分のアプリで地図アプリのローテーション機能を模倣したいと思っています。コンパスの向きを使用してMapViewを回転させる

iPhone SDKが機能を公開していないことがわかりました。しかし、CGAffineTransformMakeRotateを使ってビュー全体を回転させることができるのだろうかと思います。タッピングやズームに影響しますか?より良い方法がありますか?

答えて

11

です。

- (void)locationManager:(CLLocationManager *)manager 
     didUpdateHeading:(CLHeading *)newHeading 
{ 
    double rotation = newHeading.magneticHeading * 3.14159/180; 
    CGPoint anchorPoint = CGPointMake(0, -23); // The anchor point for your pin 

    [mapView setTransform:CGAffineTransformMakeRotation(-rotation)]; 

    [[mapView annotations] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    MKAnnotationView * view = [mapView viewForAnnotation:obj]; 

    [view setTransform:CGAffineTransformMakeRotation(rotation)]; 
    [view setCenterOffset:CGPointApplyAffineTransform(anchorPoint, CGAffineTransformMakeRotation(rotation))]; 

    }]; 

} 

別のsollutionは、MKMapViewにiOSの5で追加された新しいメソッドを使用しています。 SWIFT 3.0の

//For Left button 
MKUserTrackingBarButtonItem *buttonItem = [[MKUserTrackingBarButtonItem 
               alloc]initWithMapView:_mapView]; 

self.navigationItem.leftBarButtonItem = buttonItem; 


// For Right Button 
    MKUserTrackingBarButtonItem *buttonItem = [[MKUserTrackingBarButtonItem 
                alloc]initWithMapView:_mapView]; 

    self.navigationItem.rightBarButtonItem = buttonItem; 
+2

iOS6でこの機能を使用するとどうなりますか?北向きの地図を回転できますか?私は地図を方向づけしようとしていますが、失敗しています。 – Meera

1

3.0 iPhoneアプリケーションプログラミングガイドのDevice Supportを見ると、磁力計(別名コンパス)に関する情報が見つかります。見出し情報の取得が始まったら(didUpdateHeadingメソッドを使用)、コンパスデータを取得して、マップビューに適用する適切な回転変換値を計算することができます。

ズームを処理するかどうか不明です。標準地図アプリケーションでは、ピンチズームを開始するとすぐにコンパスの見出しの追跡が停止することに気付きました。

また、位置の方向は度で、変換の回転角度はラジアンであることに注意してください。

8

正常に動作することを確認できます。ここで私が使用しているコードです:

[mapView setTransform:CGAffineTransformMakeRotation(-1 * currentHeading.magneticHeading * 3.14159/180)]; 

mapViewはMapViewのではなく、あなたがマップの回転を補正するために、次のコードを使用することができ、注釈を回転させるには、私のMKMapViewインスタンス

+1

上記のコードの作品のような何かをするかもしれないマップは、ユーザーの場所に集中したくない場合は、それはそれを

public func mapViewDidFinishLoadingMap(_ mapView: MKMapView) { mapView.setUserTrackingMode(.followWithHeading, animated: false) } 

を無視しますマップビューを回転するにはどうしますか?注釈はどうですか?トランスフォームはどのようにそれらにも適用されますか? –

+0

私はあなたの質問の答えを以下に掲載しました。 – thijsai

-2

は見てみましょう。 mapViewDidFinishLoadingMapにラインを入れていることを確認してくださいまたはあなたがこの

public func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) 
{ 
    if(CLLocationCoordinate2DIsValid(mapView.centerCoordinate)) 
    { 
     mapView.camera.heading = newHeading.trueHeading 
    } 
} 
関連する問題