gpt4 book ai didi

objective-c - 如何在主线程外渲染 MKMapView?

转载 作者:可可西里 更新时间:2023-11-01 04:44:28 26 4
gpt4 key购买 nike

大家好!

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

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

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

最佳答案

您没有获得任何 map 数据的原因是您没有等待 map 数据加载。等到 map View 的 mapViewDidFinishLoadingMap: 委托(delegate)方法被调用,然后拍照。在委托(delegate)方法被调用后,您可能需要稍等一两秒后拍照,因为我发现有时委托(delegate)方法被调用得有点早,正如我在 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();
});
}

注意:您需要将 map View 的尺寸设置为正方形,这样当您在正方形图像中渲染它时,它就不会被笨拙地拉伸(stretch)。

关于objective-c - 如何在主线程外渲染 MKMapView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13731502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com