2011-07-07 61 views
1

我有一個包含許多註釋的地圖視圖。當用戶點擊一個註釋時,它會將其帶到一個詳細信息頁面,其中包含有關藝術品的信息以及一個「獲取指向該位置的路線」的按鈕。所以這就是我想要決定的。我剛剛訪問的mapview具有當前的用戶位置,這是我需要將URL發送到地圖應用程序的起點。最好是將最近的userLocation座標從mapview傳遞到下一頁,以便我可以在用戶想要路線時使用它,或者我應該在下一頁啓動一個新的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 ]]]; 

} 

「結束」最終是0,0,所以我必須缺少的東西。

所以我的問題是:

1.我在做什麼毛病CLLocationManager。

2.假設我甚至得到那個工作,你會建議這樣做,以獲得當前位置,或者我應該從以前的MapView發送一個稍微過時的(也許)用戶位置使用的方向?僅僅爲了獲得方向的座標而啓動CLLocationManager是否值得耗費電池和時間?

感謝您的任何反饋!

回答

0

要使用CLLocationManager,您需要alloc + init it,設置其委託,然後調用startUpdatingLocation,並在代理方法locationManager:didUpdateToLocation:fromLocation:中讀取當前位置(如果找到)。

然而,在你的情況下,我不打擾試圖再次實時獲取當前位置。用戶點擊註釋和細節頁面之間的時間不會很長,從而產生顯着差異。相反,我會將一個startingLocation屬性添加到詳細信息頁面,並在呈現詳細信息頁面之前將其設置爲地圖視圖userLocation。

這樣,用戶不必(可能)等到找到一個新的,更精確的當前位置,它實際上會顯示用戶在點擊註釋之前看到的作爲其當前位置的方向。

+0

感謝您的反饋意見,我認爲這可能是一種更好的方式,特別是因爲用戶可以在新管理員有足夠的時間閱讀好之前點擊導航按鈕。還有一個菜鳥問題:我如何去設定一個類別中的一個屬性的價值?我是否需要將它作爲參數發送給方法? – Ryan

+1

根據您如何呈現詳細信息頁面,您可以將其作爲參數添加到詳細信息頁面視圖控制器的自定義init方法中,或者只需添加屬性並在呈現前設置它即可。就像:在詳細頁面界面中放置@ @屬性(分配)CLLocationCoordinate2D startsLocation;'然後在呈現詳細信息頁面之前放'detailPageVC.startingLocation = mapView.userLocation.location.coordinate;' – Anna

+0

正是我需要的,謝謝! – Ryan

相關問題