2011-07-07 8 views
1

私は、多くの注釈を持つ地図ビューを持っています。ユーザーが注釈をクリックすると、そこにアーチストに関する情報と「この場所への道順を取得する」ボタンが表示され、詳細ページに移動します。だからここに私が決定しようとしているものがあります。私の地図ビューには現在のユーザーの場所がありました。これは、地図アプリケーションに送信するURLの開始点に必要なものです。ユーザーが道案内を望むときに使用できるように、mapviewから最新のuserLocation座標を次のページに渡すのが最善でしょうか、次のページで新しいCLLocationManagerを開始してユーザーの場所を取得する必要があります。また、私は後者を試して、マネージャからユーザーの場所を取得することができませんでした。地図アプリを使用してユーザーを場所に誘導する

CLLocationManager *manager; 

"プロパティ" それを::

@property (nonatomic, retain) CLLocationManager *manager; 

それを "合成":

@synthesize manager; 

は、のviewDidLoadで次の操作を行います。

を私がしたすべては、インタフェースにマネージャを宣言しました
[manager startUpdatingLocation]; 

これを"ナビゲート" IBActionメソッド:

-(IBAction)navigate; { 
    CLLocationCoordinate2D start = manager.location.coordinate; 
    CLLocationCoordinate2D end = {[selectedArtPiece.latitude doubleValue], [selectedArtPiece.longitude doubleValue]}; 
    [[UIApplication sharedApplication] openURL:[[NSURL alloc] initWithString: [NSString stringWithFormat:@"http://maps.google.com/?saddr=%1.6f,%1.6f&daddr=%1.6f,%1.6f", start.latitude, start.longitude, end.latitude, end.longitude ]]]; 

} 

"end"は0,0になるので、私は何かが欠けているはずです。

だから私の質問は以下のとおりです。

1.私はCLLocationManagerと間違って何をしています。

2.私はそれを動作させると仮定しても、現在の場所を取得することをお勧めしますか、または道順に使用するために、以前のマップビューから少し古い(多分)ユーザー位置を送信する必要がありますか? CALLocationManagerを起動するだけでバッテリーの価値があるのか​​、道順の座標を取得するのに時間がかかるのでしょうか?

フィードバックありがとうございました!

答えて

0

CLLocationManagerを使用するには、(見つかった場合)デリゲートメソッドlocationManager:didUpdateToLocation:fromLocation:startUpdatingLocationを呼び出して、現在位置を読み、その後、アロケーションを必要とする+それを初期化、そのデリゲートを設定します。

しかし、あなたのケースでは、私は現在の場所をリアルタイムで再度取得しようとしていません。アノテーションをタップしたユーザーと詳細ページが表示されるまでの時間は、大きな違いを生み出すまでには時間がかかりません。代わりに、詳細ページにstartLocationプロパティを追加し、詳細ページを表示する前にマップビューuserLocationに設定します。

この方法では、ユーザーは、より正確な新しい現在の場所が見つかるまで待つ必要はなく、注釈をタップする前にユーザーが現在地として見た方向を実際に示します。

+0

フィードバックをいただきありがとうございます。新しいマネージャーが十分な時間を取る前にユーザーがナビゲートボタンをクリックする可能性があるため、フィードバックをお寄せいただきありがとうございます。もう1つの新人質問:あるクラスのプロパティの値を別のクラスの値に設定するにはどうすればいいですか?それをメソッドのパラメータとして送信する必要がありますか? – Ryan

+1

詳細ページをどのように表示しているかに応じて、詳細ページビューコントローラのカスタムinitメソッドにパラメータとして追加するか、プロパティを追加してプレゼンテーションする前に設定することができます。何かが好きです:詳細ページのインターフェイスで '@property(assign)CLLocationCoordinate2D startingLocation;を入れてから詳細ページを表示する前に' detailPageVC.startingLocation = mapView.userLocation.location.coordinate; ' – Anna

+0

まさに私が必要としていたもの、感謝! – Ryan

関連する問題