Ios 如何防止MKMapView加载使UITableView不稳定

Ios 如何防止MKMapView加载使UITableView不稳定,ios,swift,uitableview,mapkit,Ios,Swift,Uitableview,Mapkit,我有一个UITableView和各种不同类型的自定义UITableViewCells。其中一个单元格具有地址的UILabel,以及MKMapView 当MKMapView的单元格出列时,我传入我的Place模型的一个实例并更新标签,创建MKPointAnnotation,添加注释并设置区域 我的问题是:当UITableView首先加载前几个单元格(包括此映射单元格)时,映射视图加载其新区域会阻塞主队列,从而阻止tableView滚动。此外,由于地图以增量方式加载图层,在加载地图的初始背景后,我可

我有一个
UITableView
和各种不同类型的自定义
UITableViewCell
s。其中一个单元格具有地址的
UILabel
,以及
MKMapView

MKMapView
的单元格出列时,我传入我的
Place
模型的一个实例并更新标签,创建
MKPointAnnotation
,添加注释并设置区域

我的问题是:当
UITableView
首先加载前几个单元格(包括此映射单元格)时,映射视图加载其新区域会阻塞主队列,从而阻止tableView滚动。此外,由于地图以增量方式加载图层,在加载地图的初始背景后,我可以滚动,但在完全加载地图之前,滚动是不稳定的

出于好奇,我尝试将
setRegion
addAnnotation
centerCoordinate
分配放在背景线程上,但没有任何区别。我从tableView中完全删除了这个tableViewCell,滚动是干净的,不需要切碎

是否有人对如何加载mapView而不影响tableView中的滚动有任何建议或见解

class BusinessDetailsAddressTableViewCell: UITableViewCell {

    @IBOutlet weak var addressDetailsContainerView: UIView!
    @IBOutlet weak var addressMapView: MKMapView!
    @IBOutlet weak var addressLabel: UILabel!

    var place: Place? {
        didSet {
            if let p = self.place {
                self.setUIForPlace(p)
            }
        }
    }

    fileprivate func setUIForPlace(_ place: Place) {
        self.addressLabel.text = place.address
        self.addressLabel.textColor = Color.grayBackgroundColor

        //Prevent dequeue from resetting map region and coordinates
        if self.addressMapView.annotations.count > 0 { return }
        self.addressMapView.centerCoordinate = place.location
        let span = MKCoordinateSpan(latitudeDelta: 0.005, longitudeDelta: 0.005)
        let region = MKCoordinateRegion(center: place.location, span: span)

        let annotation = MKPointAnnotation()
        annotation.coordinate = place.location
        self.addressMapView.setRegion(region, animated: false)
        self.addressMapView.addAnnotation(annotation)
    }
}

您还可以提供关于使用多线程的实现的代码吗?@Miket25我没有使用多线程来完成此任务-上面的代码是我实际的
UITableViewCell
的精确副本,只是为了可读性而删除了注释。您需要mapview进行交互吗?或者您可以使用
MKMapSnapshotter
取而代之的是?@dan地图根本不需要交互-它只需要加载、居中到特定的lat/long、缩放到特定的级别,并在中心坐标处放置一个销。我不熟悉
MKMapSnapshotter
。不幸的是,由于它是UI,所以不能将它放在主线程之外,这使得这个问题从优化的角度来看更有趣。我也很好奇,这怎么能妥善处理?