2013-07-19 70 views
2

MapView顯示我的當前位置,但沒有出現紅色別針(或藍色圓圈)。位置服務在此設備上啓用。但是,紅色引腳顯示在模擬器上運行相同的代碼。我已經設定所需的屬性:爲什麼MKMapView沒有顯示當前位置的紅色針腳?

self.mapView.showsUserLocation = YES; 

我使用自定義的腳。但是,「MapView類:viewForAnnotation:」只調用每個自定義註釋,所以它看起來是這樣的方法不要求當前的位置,這就是爲什麼它不顯示紅色的針腳。然而,很奇怪爲什麼相同的代碼在模擬器上正確運行。

UPDATE剛剛創建了帶有mapView的空單視圖項目。添加了self.mapView.showsUserLocation = YES,但設備上未顯示當前位置。但在模擬器中顯示藍色圓圈。我在iPhone4上使用iOS 6.1.2。

回答

3

mapView:viewForAnnotation:被稱爲當前位置。

From the docs

如果標註參數的對象是 MKUserLocation類的實例,你可以提供一個自定義視圖來表示 用戶的位置。要使用默認的 系統視圖顯示用戶的位置,請返回nil。

在實現該委託方法時,請檢查傳入的註釋類並相應地進行操作(返回nil以使用藍點或返回自定義視圖)。

如果沒有被調用,其他的事情正在進行。

+0

很奇怪,但在模擬器上調用當前位置時會調用「mapView:viewForAnnotation:」,但不會在設備上啓用(啓用位置服務)。它怎麼可能? – Centurion

+0

嗯。我唯一能想到的是,如果位置服務無法確定你的位置(室內等) - 那麼就沒有位置可顯示。 – Tyler

1

在圖形頁面:viewForAnnotation方法之前,其他代碼

if([a isKindOfClass:[MKUserLocation class]]) 
    return; 
0

添加也許你返回每次一個空針,所以即使你應該返回給用戶位置標註,您返回這個空針。在viewForAnnotation委託試試這個:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation 
{ 
    // When returning nil, it should show the default blue dot 
    if(annotation == mapView.userLocation) return nil; 

    // Dequeue the annotations for actual points, do whatever, and return the correct pins 
} 

編輯:如果你的委託方法不叫設備上,我的猜測是有可能是在某處有內存泄漏。在模擬器中,內存是您正在使用它的計算機的內存,但在設備上,這會受到更多限制。

+0

nop,我用儀器查了地圖,沒有泄漏。我正在使用ARC。 – Centurion

相關問題