日志文档--站点导航模式下的逻辑顺序

2017-02-27  本文已影响22人  黑羽肃霜

站点模式下,起点和终点的规划。
主要的难点,是区域变更时,如何处理标注。
我们先来讨论两种情况:不跳转区域和跳转区域

将S/E的属性列为

根据上面的逻辑,切换区域时的具体操作步骤如下:

首先必定是移除所有的标注和覆盖物。
- (IBAction)selectRelatedDistrict:(DistrictButton *)sender中通过代理
在BottomView中添加覆盖物和标注:

[bottomeView.delegate addOverlaysToDistrictWithName:districtName];
[bottomeView.delegate addAnnotationPointInDistrict:annotationArray];

addoverlay回调

去StationInfo中封装一个方法,判断S/E.name是否在districtName所指向的区域中。在这里对S/E.isInChangedDsitrict赋值。

addAnnotationPoint回调

在原有的基础上,封装一个函数,用于添加S/E生成的标注。具体的做法:

选中/不选中标注的逻辑如下:

对于didselectAnnotaiondidDeselectAnnotation的做法是一样的

Cell中“选中” —— 将标注定为S/E:

BMKAnnotationView *annotationView = [self.BaseBaiduMapView viewForAnnotation:annotation];
annotationView.image = [UIImage imageNamed:@"起始站点"];
S/E.isInChangedDsitrict = YES

删除站点为S/E的逻辑如下:

// termiAnnotation有两个,S/E,要判断传进来的是哪一个
[annotation isKindOfClass:[terminalStationAnnotation class]] && [[annotation title] isEqualToString:station.name]

同时,将S/E.name = nil, 不用去管坐标, 坐标用不到。

规划路径时候的方法

难点在于,我们需要的是,规划好路径后,将所有的标注都移除,然后再生成两个S/E的标注吗?如果上面的逻辑都成立,应该没有问题。

            // 先去掉所有的标注和覆盖物,规划路径
            [self.BaseBaiduMapView removeAnnotations:self.BaseBaiduMapView.annotations];
            [self.BaseBaiduMapView removeOverlays:self.BaseBaiduMapView.overlays];
            CLLocationCoordinate2D startPoint = self.guideStartStation.coordiate;
            CLLocationCoordinate2D endPoint   = self.guideEndStation.coordiate;
            [[BaiduRouteSearchTool shareInstance] pathGuideWithStart:startPoint end:endPoint];
            [self stopMapviewTransform];
            // 再添加标注
            self.guideStartStation.isInChangedDistrict = NO;
            self.guideEndStation.isInChangedDistrict = NO;
            [self addTermiStationAnnotations];

            // 通知底栏复位模式,让底栏显示出来的时候所有按键是未选中的状态,方便下次切换到站点搜索模式
            [[NSNotificationCenter defaultCenter] postNotificationName:DISTRICT_BTN_SEL_RADIO
                                                                object:@"复位模式"];

上一篇下一篇

猜你喜欢

热点阅读