如何在地图视图呈现后重复使用它

时间:2015-04-27 04:05:28

标签: ios xcode swift

我一直在搜索这段时间,但无法找到解决方案。

我的应用程序有几个视图(很常见,如表或地图),我提供了一个菜单,允许用户在它们之间切换,这是用segue实现的。我注意到每次切换到地图视图(以及其他视图)时,地图视图都将从头开始渲染。我可能不理解术语"渲染"完美。通过渲染,我的意思是背景以灰色网格开始,然后地图开始显示为碎片。

有没有办法可以这样说:只渲染一次这个地图视图,所有后续切换到这个视图都会重复使用第一次渲染的内容?

提前感谢任何答案!

// here is how I store a reference of target view controller
self.tableViewController = segue.destinationViewController as UIViewController

// this function does the switch
func swapFromViewController(from:UIViewController, to:UIViewController) {
    from.willMoveToParentViewController(nil)
    self.addChildViewController(to)
    currentController = to

    self.transitionFromViewController(from, toViewController: to, duration: 1.0, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: nil, completion: {
        (finished:Bool) -> Void in
        self.transitionInProgress = false
    })
}

// function call looks like:
self.swapFromViewController(currentController!, to: tableViewController)

2 个答案:

答案 0 :(得分:0)

如果通过创建ViewController的新实例来更改视图,它们将始终从头开始“开始”。如果您展开回到视图,应该修复此问题。

我不太确定MapKit View的工作原理。如果展开没有帮助,您可以使用容器视图并将MapKit的视图添加到此容器中。要更改视图,您必须在当前视图的顶部添加新ViewController的视图,并保留MapKit的视图,以便您可以再次使用它。

答案 1 :(得分:0)

这是因为当您从视图切换时,您的视图将从内存中卸载,然后在用户切换回视图后再次加载。阻止这种情况发生的唯一方法是保持对视图控制器的引用,并在其中显示地图,然后呈现该视图控制器。这可以像将其存储在单个对象的UIViewController属性中一样简单。然后,您可以在任何地方关闭并显示此控制器 - 因为它存储在内存中,它将使用控制器的相同实例,反过来,使用相同的地图视图。

但请注意,您不希望存储占用程序中大量内存的视图控制器。如果你真的必须这样做,但要注意iOS应用程序内存限制。