iOS 使用 CLLocation 和 MapView 一起获取坐标和更新地图
Posted
技术标签:
【中文标题】iOS 使用 CLLocation 和 MapView 一起获取坐标和更新地图【英文标题】:iOS Using CLLocation & MapView together to get coordinates and update map 【发布时间】:2014-01-14 14:53:00 【问题描述】:我有一个应用程序需要做两件事;
-
获取当前位置
将 Mapview 更新到该位置
我正在使用以下代码;
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
CLLocation *currentLocation = newLocation;
if (currentLocation != nil)
NSLog(@"%.8f", currentLocation.coordinate.longitude);
NSLog(@"%.8f", currentLocation.coordinate.latitude);
NSLog(@"%f", currentLocation.speed);
MKCoordinateRegion mapRegion;
mapRegion.center.longitude = currentLocation.coordinate.longitude;
mapRegion.center.latitude = currentLocation.coordinate.latitude;
mapRegion.span.latitudeDelta = 0.03;
mapRegion.span.longitudeDelta = 0.03;
[_mapView setRegion:mapRegion animated: YES];
一切都如我所料,除了一件事。当 MapView 区域更新时,MAP 会移动,但 PIN 不会。最终,用户 pin 离开了屏幕,因为地图正在沿着坐标移动。
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:在您设置_mapView 区域的位置下方,您还应该使用currentLocation 创建一个新注释并将其添加到_mapView。代码应该是这样的,
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
CLLocation *currentLocation = newLocation;
if (currentLocation != nil)
NSLog(@"%.8f", currentLocation.coordinate.longitude);
NSLog(@"%.8f", currentLocation.coordinate.latitude);
NSLog(@"%f", currentLocation.speed);
MKCoordinateRegion mapRegion;
mapRegion.center.longitude = currentLocation.coordinate.longitude;
mapRegion.center.latitude = currentLocation.coordinate.latitude;
mapRegion.span.latitudeDelta = 0.03;
mapRegion.span.longitudeDelta = 0.03;
[_mapView setRegion:mapRegion animated: YES];
MyAnnotation *ant = [[MyAnnotation alloc] initWithCoordinate:currentLocation.coordinate];
[_mapView addAnnotation:ant];
【讨论】:
以上是关于iOS 使用 CLLocation 和 MapView 一起获取坐标和更新地图的主要内容,如果未能解决你的问题,请参考以下文章
CLLocation 区域监控在 iOS 5.1 和 iOS 6 中的行为不同
CLLocation 在我的 xamarin.ios 项目中为 Null
iOS MapKit 与CLLocation 获取的位置不同