簡體   English   中英

MKMapView和放大用戶位置的最佳方法

[英]MKMapView and best way to zoom in on user's location

嘿,我有一個地圖視圖,可在加載視圖時放大用戶位置。 當前,我使用CLLocationManager查找用戶位置,並在didUpdateLocations委托方法中初始化地圖。 但是,由於多次調用,因此我使用了一個全局BOOL ,該全局BOOL在設置一次映射后設置為true,然后再也不進行設置。 這是代碼:

定義全局BOOL並將其在viewDidLoad中設置為false

@implementation MainMapViewController
{
    BOOL hasInitializedMap;
} 

- (void)viewDidLoad
{
    [super viewDidLoad];

    hasInitializedMap = NO;
}

然后,我獲取用戶的位置並在(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations委托方法內設置地圖縮放:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    CLLocation *location = [locations lastObject];

    [self initializeMainMapView:location.coordinate.longitude latitude:location.coordinate.latitude];
}

- (void)initializeMainMapView:(float)longitude latitude:(float)latitude
{
    if (!hasInitializedMap)
    {
        CLLocationCoordinate2D zoomLocation;
        zoomLocation.latitude = latitude;
        zoomLocation.longitude = longitude;

        MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 1500, 1500);
        [mainMapView setRegion:viewRegion animated:YES];

        hasInitializedMap = YES;
    }
}

這段代碼有效,但是讓我想知道是否有更好的方法可以做到這一點。 我討厭使用這樣的全局標志,因為它會使您的代碼混亂並且充斥。 有沒有更好的方法來做我想做的事情? 是否存在僅在用戶位置首次更新時才調用的委托方法? 我可以只使用MKMapView來做到這一點,而完全忘記CoreLocation嗎?

我已經用幾種方法完成了...實際上,該框架已進行了幾次更改,所以我不記得自己是如何解決的。 MKMapkit確實有一種顯示用戶位置的方法, 開發人員doc

此屬性不會指示用戶的位置在地圖上是否實際可見,而僅指示地圖視圖是否應嘗試顯示它。 將此屬性設置為YES會使地圖視圖使用“核心位置”框架來查找當前位置,並嘗試將其顯示在地圖上。 只要此屬性為YES,地圖視圖就會繼續跟蹤用戶的位置並定期對其進行更新。 此屬性的默認值為NO。

顯示用戶的位置並不能保證該位置在地圖上可見。 用戶可能已將地圖滾動到其他點,從而導致當前位置不在屏幕上。 要確定用戶的當前位置當前是否顯示在地圖上,請使用userLocationVisible屬性。

用戶的位置將顯示為注釋。 您可以獲取注釋並進行放大。 更好的方法是將該標志與具有方法-mapView:DidUpdateUserslocation的MKMapViewDelegate結合使用:

委托文件

也許在您獲得第一個地圖后,您可以將地圖的跟蹤模式更改為無(我不確定是否會刪除用戶位置注釋,如果確實如此,您可以輕松地將地圖圖釘放在適當的皮膚上)。 -setUserTrakingMode:animated:是MKMap上可用於該方法的方法。

我要提醒的一件事是,在過去編寫與用戶位置配合使用的應用程序時,要花幾秒鍾才能獲得准確的位置。 在鎖定某個位置之前,您可能需要先讓GPS ping幾次。 我發現前幾個刻度可能非常不准確。 希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM