我有一个UITableView
,其中包含各种不同类型的自定义UITableViewCell
。其中一个单元格的地址为UILabel
,MKMapView
。
当MKMapView
的单元格出列时,我会传入我的Place
模型的实例并更新标签,创建MKPointAnnotation
,添加注释并设置区域。
我的问题是:当UITableView
首先加载前几个单元格(包括这个地图一个)时,加载其新区域的mapView会阻止主队列,从而阻止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)
}
}