嘿所以我有一個地圖視圖,可以在視圖加載時放大用戶位置。目前,我使用CLLocationManager
查找用戶位置,並在didUpdateLocations委託方法中初始化映射。然而,因爲這被稱爲多次,我使用全局BOOL
,該地圖設置一次後設置爲true,然後再也不設置它。下面是代碼:MKMapView和放大用戶位置的最佳方式
定義全局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;
}
}
此代碼有效,但讓我想知道是否有更好的方法來做到這一點。我討厭使用這樣的全局標誌,因爲它可能會讓你的代碼感到困惑,並且最好是sl sl不馴。有沒有更好的方法來做我想做的事情?是否有一個委託方法只在用戶位置第一次更新時被調用?我可以用MKMapView做到這一點,並忘記CoreLocation
?
我刪除了locationManager委託並切換到只使用MKMapKit的。感謝您的鏈接,我認爲我已經明白了! – ScottOBot 2014-09-26 00:30:24
太棒了!如果你需要更多的細節讓我知道。我有一個項目在家裏做一些類似的東西,我可以從那裏得到一些確切的代碼。 – 2014-09-26 22:19:22