我正在使用MapKit显示用户相对于它们周围的引脚的位置。我希望能够通过屏幕左下角的十字准线按钮模仿地图提供的功能。我已经知道MapKit通过MKUserLocation提供了一个CLLocation对象和用户的位置,我只是想就如何关注该位置寻求建议。我最初的倾向是使用NSTimer将地图集中在每500ms左右的坐标上。
有更好的方法吗?是否有一些内置于MapKit中的内容可以实现这一点?
非常感谢, 布伦丹
答案 0 :(得分:39)
如果您使用的是IOS5 +,这非常简单。只需使用以下代码更改“userTrackingMode”:
[_mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
这将顺利跟随用户当前位置。如果您拖动地图,它甚至会将跟踪模式设置回MKUserTrackingModeNone
,这通常是您想要的行为。
答案 1 :(得分:12)
让地图像谷歌地图一样自动更新用户位置非常简单。只需将showsUserLocation设置为YES
即可self.mapView.showsUserLocation = YES
...然后实现MKMapViewDelegate,以便在更新位置时重新定位地图。
-(void) mapView:(MKMapView *)mapView
didUpdateUserLocation:(MKUserLocation *)userLocation
{
if( isTracking )
{
pendingRegionChange = YES;
[self.mapView setCenterCoordinate: userLocation.location.coordinate
animated: YES];
}
}
并允许用户缩放&潘没有偷看视图回到当前位置...
-(void) mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
if( isTracking && ! pendingRegionChange )
{
isTracking = NO;
[trackingButton setImage: [UIImage imageNamed: @"Location.png"]
forState: UIControlStateNormal];
}
pendingRegionChange = NO;
}
-(IBAction) trackingPressed
{
pendingRegionChange = YES;
isTracking = YES;
[mapView setCenterCoordinate: mapView.userLocation.coordinate
animated: YES];
[trackingButton setImage: [UIImage imageNamed: @"Location-Tracking.png"]
forState: UIControlStateNormal];
}
答案 2 :(得分:7)
我认为我实际上会使用CoreLocation CLLocationManager
并使用其委托方法locationManager:didUpdateToLocation:fromLocation:
。
这样,您就没有NSTimer
的开销,只有在有新位置可用时才会更新。
您可以从发送到CLLocation
方法的locationManager:didUpdateToLocation:fromLocation:
对象中提取经度和纬度,并将其传递给地图视图。
答案 3 :(得分:0)
我和Jacob Relkin一起回答。 This教程提供了在iPhone应用程序中使用CoreLocation的分步过程。希望这对你有所帮助。
所有最佳。