如何防止MKMapView加载使UITableView波动

时间:2018-01-10 23:55:10

标签: ios swift uitableview mapkit

我有一个UITableView,其中包含各种不同类型的自定义UITableViewCell。其中一个单元格的地址为UILabelMKMapView

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

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

我尝试将setRegionaddAnnotationcenterCoordinate作业放在背景线程中,但是没有区别。我从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)
    }
}

0 个答案:

没有答案