大家好日子!
我正在为iPhone开发应用程序。我有表格视图和我需要向用户显示的位置列表。为此,我在每个表视图单元格中使用了MKMapView。但是当有很多地方时,这个解决方案变得非常缓慢。我想提高UI性能并用UIImageView替换MKMapView。所以我需要在一些非MAIN线程中将地图从MKMapView渲染到UIImage。我试着这样做:
UIGraphicsBeginImageContext(CGSizeMake(64, 64));
CGContextRef context = UIGraphicsGetCurrentContext();
[[mapView layer] renderInContext:context];
thumbnail_image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
但是这段代码只渲染了地图的黄色背景和指定位置上方的图钉。没有地图数据,如街道,房屋等。我做错了什么?谢谢你的建议。
答案 0 :(得分:3)
您没有获得任何地图数据的原因是您没有等待加载地图数据。等到调用地图视图的mapViewDidFinishLoadingMap:
委托方法,然后拍照。在调用委托方法之后,您可能需要在一两秒钟之后拍摄照片,因为我发现有时委托方法会在我this question中提及时提前调用。
- (void)mapViewDidFinishLoadingMap:(MKMapView*)mapView {
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
UIGraphicsBeginImageContext(CGSizeMake(64, 64));
CGContextRef context = UIGraphicsGetCurrentContext();
[mapView.layer renderInContext:context];
thumbnail_image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
});
}
注意:您需要将地图视图的尺寸设为正方形,这样当您在方形图像中渲染时,它就不会被拉伸。