我使用此代码将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中心位置时都会调用此方法,因此每一步都会出现带有整个动画的黄色气泡。这很烦人。
是否可以在没有动画的情况下显示当前用户位置?
答案 0 :(得分:0)
我不这么认为,并创建一个具有相同区域等的新离线MKMapView
...但是没有用户位置以便从中获取快照可能每次都会花费太多用户移动可见地图。
答案 1 :(得分:0)
简短回答:你不能 - 不是没有努力:)
答案很长:你不能假装整个东西并为真实位置返回一个空白注释视图,并使用位置管理器来更新另一个自定义注释。
1 - 如果viewForAnnotation
要求UIView
MKUserLocation
,请返回空白但不是零!使用空的UIView。
nil将显示点。
现在返回ANYTHIN但是来自viewForAnnotation
的位置将禁用跟踪:这是地图工具包中的一个严重错误
2 - 所以您需要自己启动CLLocationManager
,将{OWN MKAnnotation
添加到MKMapView
以显示userLocation。
你可以像任何MKAnnotation一样在locationDidUpdate
被解雇时更新其坐标