同一工程下两个独立页面间的百度地图的互相影响

http://bbs.lbsyun.baidu.com/redirect.php?tid=2635&goto=lastpost

注意了是Tabbarcontroller容器类

正在做项目用到了百度地图,项目一个tabbar组中有一项专门的地图,另外还有一项通过点击里面的元素也可以进入到另外个单独的地图页面,但是做好后发现两张地图来回切换的时候会有问题,首先是切换后地图无法操作,然后一张地图的标注会偶尔性跑到另外一张去,而且两张地图的中心点和缩放是完全同步的,在一张地图上的操作会影响到另外一张地图,在网上搜了不少,似乎没有好的解决办法,通常都是说在viewWillAppear里面设置地图代理,然后在viewWillDisappear里面将代理置空,但是我已经做过了,仍然没有解决。
经过不停摸索和尝试,终于解决了这个问题,这里分享一下,希望对大家以后有用。
先说方法,就是调用百度地图本身的viewWillAppear并且设置代理的时候不要在UIViewController的viewWillAppear代理方法里面去做,而是移到viewDidAppear里面去做,这样两张地图切换就不会有任何问题了。是不是很简单?这里我只能说百度地图命名和demo都好坑爹啊!!!
首先,我发现如果中间有一个页面做中转的话,这个问题就不会存在的,即先跳到一个其他页面,再切到另一张地图,是完全正常的(所以当初没办法的还想着实在不行就切换的时候强制弄个中转页面算了...)。然后仔细跟踪下,发现tabbar页面间切换,是先调用下一张页面的viewWillAppear,然后再调用当前页面的viewWillDisappear的,通常这个顺序可能无关紧要,但是到了百度地图这里就要了亲命了。而BMKMapView类本身里面也有这两个方法,因为命名一样,所以我以为跟普通的UIViewController里面的代理方法没啥不一样,所以就没太多关注,但是就在被切换问题搞得焦头烂额的时候突然发现百度地图这两个方法都不用传是否动画的参数的,然后仔细看了下说明文档,里面提到了,viewWillAppear是当mapview即将被显示的时候调用,恢复之前存储的mapview状态,而viewWillDisappear是当mapview即将被隐藏的时候调用,存储当前mapview的状态。所以我猜测百度地图本身最底层应该还是只有一个地图相关的实例的,然后创建的BMKMapView的基本功能是用来保存当前状态的,切换两张地图实际是在同张地图上显示保存的不同的状态而已。
说到这里,大家应该就明白了,如果在UIViewController的viewWillAppear里面做百度地图的viewWillAppear操作,会导致当前地图状态被保存之前就开始加载下个地图页面的状态,因为之前说到了,tabbar页面切换是先调用下一张页面的viewWillAppear,然后再调用当前页面的viewWillDisappear,这样就产生了混乱,如果将百度地图的viewWillAppear移到UIViewController的viewDidAppear去就没有问题了,因为viewDidAppear是界面完全展示出来再调用的,一定在上张页面的viewWillDisappear之后

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值