Ios 在推送导航控制器的viewController中实现MapKit的有效方法?
我试图在IB中的viewController中添加一个mapKit,我正在将其推到导航控制器的顶部,但无论在循环中的何处添加注释,似乎整个过程都会导致延迟,直到mapKit未呈现,包含所有内容的scrollview都不会轻松滚动。例如,在iOS中有没有类似于Android的后台线程的方法 下面是代码,即使没有添加任何注释,渲染仍然会导致延迟。我很肯定还有别的办法。有什么想法吗Ios 在推送导航控制器的viewController中实现MapKit的有效方法?,ios,swift,mapkit,Ios,Swift,Mapkit,我试图在IB中的viewController中添加一个mapKit,我正在将其推到导航控制器的顶部,但无论在循环中的何处添加注释,似乎整个过程都会导致延迟,直到mapKit未呈现,包含所有内容的scrollview都不会轻松滚动。例如,在iOS中有没有类似于Android的后台线程的方法 下面是代码,即使没有添加任何注释,渲染仍然会导致延迟。我很肯定还有别的办法。有什么想法吗 class DetailViewController: UIViewController , MKMapViewDele
class DetailViewController: UIViewController , MKMapViewDelegate{
override func viewDidLoad() {
super.viewDidLoad()
self.mapView?.delegate = self
}
//changing the annotation
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if (annotation is MKUserLocation) {
return nil
}
let reuseId = "detailMrker"
var anView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
if anView == nil {
anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
anView?.image = UIImage(named:"location.png")
anView?.canShowCallout = true
}
else {
anView?.annotation = annotation
}
return anView
}
}
您可以提前渲染VC,并通过模式演示从屏幕外呈现它。如果您必须从UINavigationController中推送,那么在推送VC之后,您将一直等待VC调用其视图的draw方法
不过,你还可以提前做其他事情。使用除DetailFeedViewController之外的其他内容作为CLLocationManagerDelegate和MKMapDelegate。如果这样做,您可以在推送VC之前获取用户的位置、设置地图坐标并添加注释。请显示您的真实代码。谢谢您的回复。通过渲染一个VC aeahd时间,你是指实例化一个视图控制器,然后直接呈现(VC…)吗?有不同的方法来处理它,而且涉及到它;否则我就举个例子。基本上,VC的view属性可以像其他UIView一样处理:可以调用它的draw方法,等等。。。。让myVC=UIViewController()只调用viewDidLoad,因此您需要做更多的工作。查看动画的持续时间和模式演示。此外,这也是重要的一部分,MKMapKit通常并不较慢,因为它在视觉上更加详细,而是因为它需要来自蜂窝设备或GPS的数据。我敢打赌,我的回答的后半部分会更有帮助。如果你愿意的话,我可以给你找一些我的例子。再次感谢,如果你能发布一些东西而不是文字,那就太好了,不是因为你的回复不正确,而是我想我能更好地理解代码。另外,我刚刚遇到了MKMapSnapshotter(),如果我能设法让它工作起来,这似乎是一个很好的解决方案;它基本上提供了一个地图的图像,而不是地图本身,这样我就可以无缝地加载该图像,我想性能会更好。谢天谢地是我不久前做的一个游戏。我的搭档退出了,所以请随意使用。请注意,我的CLLocationManager是一个单例,这意味着我可以在启动应用程序时(或任何时候)开始访问用户的位置。在实际视图加载之前,您可以对MKMapKit和委托执行相同的操作,并准备好所有位置信息: