0

我使用此代码将 MKMapView 转换为 UIImage:

+(UIImage *)imageFromMapView:(MKMapView *)mapView {

    BOOL showsUserLocation = mapView.showsUserLocation; //save flag
    [mapView setShowsUserLocation:NO]; //hide blue bubble for taking picture

    CGRect frame = mapView.frame;
    if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
        ([UIScreen mainScreen].scale == 2.0)) {
        frame.size.width *= 2;
        frame.size.height *= 2;
    }
    //    UIGraphicsBeginImageContext(frame.size);
    UIGraphicsBeginImageContextWithOptions((frame.size), YES, 0.0);
    [mapView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *mapImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    DLog(@"got mapImage size:%@",NSStringFromCGSize(mapImage.size));

    [mapView setShowsUserLocation:showsUserLocation];//restore flag
    return mapImage;
}

我每次移动 MapView 中心位置时都会调用此方法,因此每一步都会出现黄色气泡和整个动画。这很烦人。

是否可以在没有动画的情况下显示当前用户位置?

4

2 回答 2

0

我不这么认为,并且MKMapView每次用户移动可见地图时,如果没有用户位置以便从中获取快照,则创建一个新的离线可能会太昂贵。

于 2013-04-04T17:40:44.337 回答
0

简短的回答:你不能 - 没有一些努力:)

长答案:除非您伪造整个事物并为真实位置返回空白注释视图并使用位置管理器更新另一个自定义注释,否则您不能。

脚步:

1 - 如果viewForAnnotation要求 a UIViewMKUserLocation返回一个空白但不为零!使用一个空的 UIView。
nil 会显示点。

现在从该位置返回 ANYTHIN BUT nilviewForAnnotation将禁用跟踪:这是地图工具包中的一个严重错误

2 - 所以你需要CLLocationManager自己启动,添加一个 OWNMKAnnotationMKMapView显示 userLocation。
您可以像对待任何 MKAnnotation 一样在locationDidUpdate被触发时更新其坐标

于 2013-04-04T20:33:46.717 回答