百度地图的单例模式

最近又一次使用到了百度地图IOS版本的SDK,在上一次使用过后中遇到的问题在这次使用过程中再次遇到,并且还遇上了新的问题。

本博客仅仅关于第一个问题进行描述

问题:

       有两个地图的页面,A,B。 在A页面中添加一个Annotion后,将B页面Push进来(使用UINavigation controller),并在B页面的 ViewDidLoad 函数中实例化一个新百度地图,这个时候,你会惊奇的发现,在A中添加的Annotion标注,在B视图中出现了,这是为什么呢?

    我做一个测试,在页面C中,添加两个按钮,与之对应的按钮单击函数为 BtAction_1,BtAction_2,在BtAction_1函数中,我们创建一个百度地图实例,BMap_1,并将他添加到C视图中,然后在BtAction_2函数中,我们创建一个百度地图实例,BMap_2,并将他添加到C视图中,分别设置BMap_1的Frame = CGRectMake(0,0,160,200) 和 CGRectMake(160+2,0,160,200),这样设置Frame的目的是让百度地图不相互遮盖。 准备工作完成,现在我们来进行测试。 调用 BtAction_1,在对应的位置现实一个百度地图,当我们触发BtAction_2的时候,在 CGRectMake(160+2,0,160,200)的位置现实一个百度地图,但是,我们通过触发BtAction_1事件添加的地图BMap_1却看不见了,对,亲,是看不见了。 紧接着,我再次触发 BtAction_1事件,发现 Frame = CGRectMake(0,0,160,200) 显示了百度地图,但是 在CGRectMake(160+2,0,160,200) 位置的地图又看不见了。 通过分别单击两个按钮后,发现,在同一个应用中,我们调用的只有一个百度地图对应,也就是说我们能够看到的百度地图实例只有一个,这个类似于单例模式。

    这样,在以后的开发中,当我们在不同地方调用百度地图的时候,为了不受到前之前操作的影响,我们需要地图进行一次操作即可,比如:进行一次Clear,清除 Annotion 或者 OverLayer的Graphic Feature,必要的时候还可以进行一次地图平移或者地图的缩放。这样就得到一个类似于全新的地图了。 但是这样有一个弊端,就是,如果我们在A试图中添加了一个Annotion,当Push进来B试图的时候,我进行了一次Annotion Clear,这样,当我从B视图返回到A视图的时候,原来A视图中添加的 Annotion 就不见了。 我目前的做法是,在Push B 视图进来之前,我将A试图中跟地图相关的操作保存,然后,当A视图重新出现的时候,就恢复下内容。 在ViewDidAppear中进行操作,或者进行委托,或者添加一个事件侦听函数。

JSON

2013-06-24

风雨飘摇,唯有不懈努力

    

原文地址:https://www.cnblogs.com/xingchen/p/3152938.html