5

大家好!

我正在为 iPhone 开发应用程序。我有需要向用户显示的表格视图和位置列表。为此,我在每个表格视图单元格中使用了 MKMapView。但是当有很多位置时,这个解决方案变得非常慢。我想提高 UI 性能并将 MKMapView 替换为 UIImageView。所以我需要在一些非主线程中将地图从 MKMapView 渲染到 UIImage 。我试着这样做:

UIGraphicsBeginImageContext(CGSizeMake(64, 64));
CGContextRef context = UIGraphicsGetCurrentContext();
[[mapView layer] renderInContext:context];
thumbnail_image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

但是此代码仅呈现地图的黄色背景和指定位置上方的图钉。没有街道、房屋等地图数据。我做错了什么?谢谢你的建议。

4

1 回答 1

3

您没有获得任何地图数据的原因是您没有等待地图数据加载。等到地图视图的mapViewDidFinishLoadingMap:委托方法被调用,然后拍照。在调用委托方法后,您可能需要在一小段延迟(一两秒)后拍照,因为我发现有时委托方法调用得有点早,正如我在这个问题中提到的那样。

- (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();
    });
}

注意:您需要将地图视图的尺寸设置为方形,这样当您将其渲染为方形图像时,它不会被尴尬地拉伸。

于 2012-12-06T01:43:27.120 回答