// // MapViewController.m // LekangGuard // // Created by ecell on 2022/9/27. // #import "MapViewController.h" #import "GDMapView.h" #import "GoogleMapView.h" #import "MarkExplainViewController.h" #import "ElectronicFenceViewController.h" #import "TrackViewController.h" #import "SLMarqueeControl.h" #import "MapBtnTableViewCell.h" @interface MapViewController () @property (nonatomic ,strong) UIView *topView; @property (nonatomic ,strong) UIView *bottomView; /// 设备名称 @property (nonatomic ,weak) UILabel *nameLabel; /// 电量Img @property (nonatomic ,weak) UIImageView *batteryImg; /// 电量Label @property (nonatomic ,weak) UILabel *batteryLabel; /// 状态Img @property (nonatomic ,weak) UIImageView *statusImg; /// 状态Label @property (nonatomic ,weak) UILabel *statusLabel; /// 定位图片 @property (nonatomic ,weak) UIImageView *mapImg; // 定位地址内容标题 @property (weak, nonatomic) SLMarqueeControl *marqueeControl; /// 位置 @property (nonatomic ,weak) UILabel *addLabel; /// 高德地图 @property (nonatomic ,strong) GDMapView *gdMapView; /// 谷歌地图 @property (nonatomic ,strong) GoogleMapView *googleMapView; /// 地图模式切换View @property (nonatomic ,strong) UIView *mapSwitchView; @property (nonatomic ,strong) CommonTableView *btnTableView; @property (nonatomic ,strong) NSMutableArray *cellTitleArr; @property (nonatomic ,strong) NSMutableArray *cellImageArr; @end @implementation MapViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = KKBackgroundGrey; [MAMapView updatePrivacyShow:AMapPrivacyShowStatusDidShow privacyInfo:AMapPrivacyInfoStatusDidContain]; [MAMapView updatePrivacyAgree:AMapPrivacyAgreeStatusDidAgree]; [AMapSearchAPI updatePrivacyShow:(AMapPrivacyShowStatusDidShow) privacyInfo:(AMapPrivacyInfoStatusDidContain)]; self.zx_navLeftBtn.titleLabel.font = FontBoldADA_(18); [self.zx_navLeftBtn setTitleColor:KKWhiteColorColor forState:0]; [self zx_setRightBtnWithImg:ImageName_(@"icon_switch_devices") clickedBlock:^(ZXNavItemBtn * _Nonnull btn) { [self isMapShowMenu]; }]; //[self.cellTitleArr addObject:@"学生证短信"]; [self.cellTitleArr addObject:@"定位模式"]; [self.cellTitleArr addObject:@"定位说明"]; //[self.cellTitleArr addObject:@"定位纠偏"]; // [self.cellImageArr addObject:@"icon_watch_sms"]; [self.cellImageArr addObject:@"icon_map_mode"]; [self.cellImageArr addObject:@"icon_explain"]; // [self.cellImageArr addObject:@"icon_correction"]; [self.view addSubview:self.gdMapView]; [self.view addSubview:self.topView]; [self.view addSubview:self.bottomView]; [self.bottomView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self.view).inset(10); make.bottom.equalTo(self.view.mas_bottom).inset(10); make.height.mas_equalTo(136); }]; [self.view addSubview:self.btnTableView]; [self.view addSubview:self.mapSwitchView]; [self.mapSwitchView mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self.view.mas_right).inset(85); make.bottom.equalTo(self.bottomView.mas_top).inset(5); make.size.mas_equalTo(CGSizeMake(80, 90)); }]; [[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"updateBatteryAndLocation" object:nil] subscribeNext:^(NSNotification *x){ [self UpdataLatestlocation:APIManager.sharedManager.deviceModel.imei]; }]; [[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"deviceNowLocation" object:nil] subscribeNext:^(NSNotification *x) { [self UpdataLatestlocation:APIManager.sharedManager.deviceModel.imei]; }]; } /// 点击切换设备 - (void)isMapShowMenu { WeakSelf [DeviceSwitchover.sharedManager showMenuViewWithAdd:NO ]; [DeviceSwitchover.sharedManager setSwitchDevice:^(NSInteger index) { DeviceModel *model = APIManager.sharedManager.deviceList[index]; APIManager.sharedManager.deviceModel = model; [APIManager.sharedManager.cache setObject:model forKey:sDeviceKey]; [weakSelf UpdataLatestlocation:model.imei]; }]; } - (GDMapView *)gdMapView { if (!_gdMapView) { _gdMapView = [[GDMapView alloc] initWithFrame:CGRectMake(0, iPhoneX_NavHeight, SCREEN_WIDTH, SCREEN_HEIGHT-iPhoneX_NavHeight)]; } return _gdMapView; } - (GoogleMapView *)googleMapView { if (!_googleMapView) { _googleMapView = [[GoogleMapView alloc] initWithFrame:CGRectMake(0, self.topView.bottom, SCREEN_WIDTH, SCREEN_HEIGHT-self.topView.bottom)]; } return _googleMapView; } - (UIView *)topView { if (!_topView) { _topView = [UICommon ui_view:CGRectZero backgroundColor:KKWhiteColorColor cornerRadius:Adapted(12.5) borderWidth:0 borderColor:KKWhiteColorColor]; _topView.frame = CGRectMake(10, iPhoneX_NavHeight+6, SCREEN_WIDTH-20, Adapted(25)); UIImageView *locationTypeImageView = [UIImageView new]; self.mapImg = locationTypeImageView; [_topView addSubview:locationTypeImageView]; [locationTypeImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(_topView).offset(13); make.centerY.equalTo(_topView); make.size.mas_equalTo(CGSizeMake(15, 15)); }]; /// 位置跑马灯 SLMarqueeControl *control = [[SLMarqueeControl alloc] initWithFrame:CGRectMake(38, 5, SCREEN_WIDTH-20-38-15, 15)]; control.backgroundColor = KKClearColor; control.marqueeLabel.text = @"当前位置未知,请确保设备开机且能够联网,再点击定位按钮进行定位"; self.marqueeControl = control; [_topView addSubview:control]; } return _topView; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; LatestLocationModel *model = APIManager.sharedManager.laloModel; [self UpdataMapViewLocation:model]; } #pragma mark 主动请求位置下发 /// 主动请求位置下发 - (void)GetLatest { NSString *imei = APIManager.sharedManager.deviceModel.imei; [UICommon MessageUpload:@"定位中"]; NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; [[[APIManager sharedManager] APGET:F(@"%@/%@", Latest_location_app_instructions_URL,imei) parameters:parameters resultClass:nil] subscribeNext:^(id _Nullable x) { NSLog(@"-->%@",x); } error:^(NSError * _Nullable error) { NSDictionary *dic = error.userInfo; [UICommon MessageErrorText:dic[NSLocalizedDescriptionKey]]; }]; } #pragma mark 获取设备最新位置信息(推送时使用) /// 获取设备最新位置信息(推送时使用) - (void)UpdataLatestlocation:(NSString *)imei { NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; [[[APIManager sharedManager] APGET:F(@"%@/%@", Latest_location_app_URL,imei) parameters:parameters resultClass:LatestLocationModel.class] subscribeNext:^(LatestLocationModel *model) { [UICommon HidenLoading]; [self UpdataMapViewLocation:model]; NSLog(@"-->%@",model); } error:^(NSError * _Nullable error) { NSDictionary *dic = error.userInfo; [UICommon MessageErrorText:dic[NSLocalizedDescriptionKey]]; }]; } - (void)UpdataMapViewLocation:(LatestLocationModel *)model { self.gdMapView.laloModel = model; if(model) { self.mapImg.image = ImageName_(@"home_icon_gps"); self.marqueeControl.marqueeLabel.text = model.addr; self.marqueeControl.marqueeLabel.textColor = KKGrey133; } else { self.mapImg.image = ImageName_(@"home_icon_gps_inaccurate"); self.marqueeControl.marqueeLabel.text = @"当前位置未知,请确保设备开机且能够联网,再点击定位按钮进行定位"; self.marqueeControl.marqueeLabel.textColor = RGB(249, 107, 87); } self.nameLabel.text = APIManager.sharedManager.deviceModel.name; [self.zx_navLeftBtn setTitle:APIManager.sharedManager.deviceModel.name forState:0]; self.statusImg.image = APIManager.sharedManager.deviceModel.onlineStatus ? ImageName_(@"icon_device_connected") : ImageName_(@"icon_device_unconnected"); self.statusLabel.text = APIManager.sharedManager.deviceModel.onlineStatus ? @"已连接" : @"未连接"; NSInteger battery = model.battery; NSString *imageName = @""; if(battery == 0) imageName = @"battery_0"; else if (battery < 10) imageName = @"battery_low"; else if (battery < 20) imageName = @"battery_1"; else if (battery < 30) imageName = @"battery_2"; else if (battery < 40) imageName = @"battery_3"; else if (battery < 50) imageName = @"battery_4"; else if (battery < 60) imageName = @"battery_4"; else if (battery < 70) imageName = @"battery_6"; else if (battery < 80) imageName = @"battery_7"; else if (battery < 90) imageName = @"battery_8"; else if (battery < 100) imageName = @"battery_9"; else imageName = @"battery_10"; self.batteryImg.image = ImageName_(imageName); self.batteryLabel.text = [NSString stringWithFormat:@"%ld%%",battery]; } - (UIView *)bottomView { if (!_bottomView) { _bottomView = [UICommon ui_view:CGRectZero backgroundColor:KKWhiteColorColor cornerRadius:10 borderWidth:0 borderColor:KKWhiteColorColor]; UILabel *nameLabel = [UICommon ui_label:CGRectZero lines:0 align:NSTextAlignmentCenter font:FontBoldADA_(14) textColor:KKTextBlackColor text:@"" Radius:0]; self.nameLabel = nameLabel; [_bottomView addSubview:nameLabel]; [nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(_bottomView).offset(20); make.top.equalTo(_bottomView).offset(19); }]; /// 电量图片 UIImageView *batteryImg = [UIImageView new]; self.batteryImg = batteryImg; [_bottomView addSubview:batteryImg]; [batteryImg mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(nameLabel.mas_left); make.top.equalTo(nameLabel.mas_bottom).offset(15); make.size.mas_equalTo(CGSizeMake(24.5, 10)); }]; /// 电量 UILabel *batteryLabel = [UICommon ui_label:CGRectZero lines:0 align:NSTextAlignmentCenter font:Font_(12) textColor:KKTextBlackColor text:@"" Radius:0]; self.batteryLabel = batteryLabel; [_bottomView addSubview:batteryLabel]; [batteryLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(batteryImg.mas_right).offset(10); make.centerY.equalTo(batteryImg.mas_centerY); }]; /// 状态图片 UIImageView *statusImg = [UIImageView new]; self.statusImg = statusImg; [_bottomView addSubview:statusImg]; [statusImg mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(batteryLabel.mas_right).offset(35); make.centerY.equalTo(batteryImg.mas_centerY); make.size.mas_equalTo(CGSizeMake(15, 15)); }]; /// 状态 UILabel *statusLabel = [UICommon ui_label:CGRectZero lines:0 align:NSTextAlignmentCenter font:Font_(12) textColor:KKTextBlackColor text:@"" Radius:0]; self.statusLabel = statusLabel; [_bottomView addSubview:statusLabel]; [statusLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(statusImg.mas_right).offset(10); make.centerY.equalTo(batteryImg.mas_centerY); }]; CGFloat ww = (SCREEN_WIDTH-40-20-100)/2; CGFloat wws = SCREEN_WIDTH-90-(ww*2); NSArray *titleArr = @[@"历史轨迹",@"电子围栏",@""]; NSArray *imageArr = @[@"icon_history",@"icon_fence",@"icon_more"]; for (int i = 0; i < titleArr.count; i++) { UIButton *button = [UICommon ui_buttonSimple:CGRectZero font:FontBoldADA_(12) normalColor:KKTextBlackColor normalText:titleArr[i] click:^(UIButton *btn) { if (btn.tag == 0) { TrackViewController *vc = [TrackViewController new]; [self.navigationController pushViewController:vc animated:YES]; } else if (btn.tag == 1) { ElectronicFenceViewController *vc = [ElectronicFenceViewController new]; [self.navigationController pushViewController:vc animated:YES]; } else { btn.selected = !btn.selected; if (btn.selected) [self showView]; else [self dismiss]; } }]; button.tag = i; button.layer.cornerRadius = 5; button.layer.masksToBounds = YES; button.backgroundColor = RGB(232, 245, 255); [button setImage:ImageName_(imageArr[i]) forState:0]; [_bottomView addSubview:button]; [button mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(_bottomView).offset(20+i*ww+15*i); make.bottom.equalTo(_bottomView.mas_bottom).inset(20); make.size.mas_equalTo(CGSizeMake(i == 2 ? wws : ww, 35)); }]; } /// 定位 UIButton *button = [UICommon ui_buttonSimple:CGRectZero font:FontBoldADA_(12) normalColor:KKTextBlackColor normalText:@"" click:^(UIButton *btn) { [self GetLatest]; }]; [button setImage:ImageName_(@"map_button_gps") forState:0]; [_bottomView addSubview:button]; [button mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(_bottomView.mas_right).inset(20); make.top.equalTo(_bottomView).offset(15); make.size.mas_equalTo(CGSizeMake(40, 40)); }]; } return _bottomView; } - (CommonTableView *)btnTableView { if (!_btnTableView) { _btnTableView = [[CommonTableView alloc] initWithFrame:CGRectMake(SCREEN_WIDTH-30-50, SCREEN_HEIGHT-TabBarHeight-95, 50, 0.000001) style:UITableViewStylePlain cellHeight:71 cellRow:self.cellTitleArr.count isAdaptive:NO isLine:YES commonCell:MapBtnTableViewCell.class createCell:^(ZZTableViewCell * _Nonnull cells, NSIndexPath * _Nonnull indexPath) { MapBtnTableViewCell *cell = (MapBtnTableViewCell *)cells; cell.imageName = self.cellImageArr[indexPath.row]; cell.titleName = self.cellTitleArr[indexPath.row]; } selectedCell:^(UITableView * _Nonnull tableView, NSIndexPath * _Nonnull indexPath) { NSString *title = self.cellTitleArr[indexPath.row]; if ([title isEqualToString:@"标准模式"] || [title isEqualToString:@"卫星模式"] || [title isEqualToString:@"3D模式"] || [title isEqualToString:@"定位模式"]) { BOOL ish = self.mapSwitchView.hidden; self.mapSwitchView.hidden = !ish; } else if ([title isEqualToString:@"定位说明"]) { /// 定位说明 MarkExplainViewController *vc = [MarkExplainViewController new]; [self.navigationController pushViewController:vc animated:YES]; } else if ([title isEqualToString:@"位置纠偏"]) { // MapReviseViewController *vc = [[MapReviseViewController alloc] init]; // [self.navigationController pushViewController:vc animated:YES]; } } DidscrollView:^(UIScrollView * _Nonnull scrollView) {}]; _btnTableView.layer.cornerRadius = 10; _btnTableView.layer.masksToBounds = YES; _btnTableView.hidden = YES; [UICommon setTavleViewlink:_btnTableView distance:0]; [UICommon setExtraCellLineHidden:_btnTableView]; } return _btnTableView; } - (void)showView { self.btnTableView.hidden = NO; self.btnTableView.size = CGSizeMake(50, self.cellTitleArr.count*71); [UIView animateWithDuration:0.25f delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^{ CGRect frame = self.btnTableView.frame; frame.origin.y = frame.origin.y - frame.size.height-10; self.btnTableView.frame = frame; }completion:^(BOOL finished) { self.btnTableView.conrnerRadius(10).shadowColor(KKMainColor).shadowOffset(CGSizeMake(3, 3)).shadowRadius(5).shadowOpacity(0.1).showVisual(); }]; } - (void)dismiss { self.btnTableView.conrnerRadius(10).shadowColor(KKClearColor).shadowOffset(CGSizeMake(3, 3)).shadowRadius(5).shadowOpacity(0.1).showVisual(); self.btnTableView.clerVisual(); self.mapSwitchView.hidden = YES; [UIView animateWithDuration:0.25f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{ CGRect frame = self.btnTableView.frame; frame.origin.y = frame.origin.y + frame.size.height+10; self.btnTableView.frame = frame; }completion:^(BOOL finished) { self.btnTableView.hidden = YES; }]; } - (UIView *)mapSwitchView { if (!_mapSwitchView) { NSArray *arr = @[@"标准模式",@"卫星模式"]; _mapSwitchView = [UICommon ui_view:CGRectZero backgroundColor:KKWhiteColorColor cornerRadius:10 borderWidth:0 borderColor:KKClearColor]; _mapSwitchView.hidden = YES; for (int i = 0; i < arr.count; i++) { UIButton *btn = [UICommon ui_buttonSimple:CGRectZero font:Font_(14) normalColor:KKTextBlackColor normalText:arr[i] click:^(UIButton *button) { self.mapSwitchView.hidden = YES; [self.cellTitleArr replaceObjectAtIndex:0 withObject:button.currentTitle]; [self.btnTableView reloadData]; if([button.currentTitle isEqualToString:@"标准模式"]) self.gdMapView.mapView.mapType = MKMapTypeStandard; else if([button.currentTitle isEqualToString:@"卫星模式"]) self.gdMapView.mapView.mapType = MKMapTypeSatellite; else { } }]; [_mapSwitchView addSubview:btn]; [btn mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(_mapSwitchView); make.top.equalTo(_mapSwitchView).offset(i*45); make.height.mas_equalTo(45); }]; if (i < arr.count-1) { UILabel *line = [UILabel new]; line.backgroundColor = RGB(235, 235, 235); [_mapSwitchView addSubview:line]; [line mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(_mapSwitchView); make.bottom.equalTo(btn.mas_bottom); make.height.mas_equalTo(0.5); }]; } } } return _mapSwitchView; } - (NSMutableArray *)cellTitleArr { if (!_cellTitleArr) _cellTitleArr = [NSMutableArray new]; return _cellTitleArr; } - (NSMutableArray *)cellImageArr { if (!_cellImageArr) _cellImageArr = [NSMutableArray new]; return _cellImageArr; } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end