我已经实现- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
了更改 userLocation 注释的默认位置的方法。在这个方法中,我使用过:
if (annotation==(mapView.userLocation)) {
MKAnnotationView *myAnotation = [[MKAnnotationView alloc] init];
myAnotation.image = self.userPointImage.image;
myAnotation.centerOffset = CGPointMake(0, 250);
return myAnotation;
}
else
{
return nil;
}
这成功地将默认的 userLocation 注释移动到中心底部。但由于我也在使用标题,所以当移动我的手机时,它仍然从中心旋转地图。
- (void)locationManager:(CLLocationManager *) manager didUpdateHeading:(CLHeading *) newHeading {
[self.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:true];
}
但是 userLocation 注释在下面。那么该怎么做呢?
更新
我发现了这个问题并尝试应用它。但是当我使用标题时,它会使应用程序崩溃。在我的didUpdateUserLocation
方法中我添加了[self moveCenterByOffset:CGPointMake(0, 200) from:userLocation.coordinate];
这个方法如下:
- (CLLocationCoordinate2D)moveCenterByOffset:(CGPoint)offset from:(CLLocationCoordinate2D)coordinate
{
CGPoint point = [self.mapView convertCoordinate:coordinate toPointToView:self.mapView];
point.x += offset.x;
point.y += offset.y;
CLLocationCoordinate2D center = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
return center;
}
然后在我的didUpdateUserLocation
方法中我将其更新为:MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([self moveCenterByOffset:CGPointMake(0, -250) from:userLocation.coordinate], 800.0f, 200.0f);
并且[mapView setRegion:region animated:NO];
由于我正在使用标题,所以动画设置为NO
. 但是现在当我运行代码时,它开始在中心点和新点之间摇晃。