objective-c – 如何在主线程外渲染MKMapView?
发布时间:2020-12-16 05:02:43 所属栏目:百科 来源:网络整理
导读:大家好! 我正在为iPhone开发应用程序.我有表格视图和我需要向用户显示的位置列表.为此,我在每个表视图单元格中使用了MKMapView.但是当有很多地方时,这个解决方案变得非常缓慢.我想提高UI性能并用UIImageView替换MKMapView.所以我需要在一些非MAIN线程中将地
大家好!
我正在为iPhone开发应用程序.我有表格视图和我需要向用户显示的位置列表.为此,我在每个表视图单元格中使用了MKMapView.但是当有很多地方时,这个解决方案变得非常缓慢.我想提高UI性能并用UIImageView替换MKMapView.所以我需要在一些非MAIN线程中将地图从MKMapView渲染到UIImage.我试着这样做: UIGraphicsBeginImageContext(CGSizeMake(64,64)); CGContextRef context = UIGraphicsGetCurrentContext(); [[mapView layer] renderInContext:context]; thumbnail_image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 但是这段代码只渲染了地图的黄色背景和指定位置上方的引脚.没有地图数据,如街道,房屋等.我做错了什么?谢谢你的建议. 解决方法
您没有获得任何地图数据的原因是您没有等待加载地图数据.等到地图视图的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(); }); } 注意:您需要使地图视图的尺寸为正方形,这样当您在方形图像中渲染它时,它将不会被笨拙地拉伸. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |