// // TrackViewController.m // watch // // Created by xTT on 2017/7/13. // Copyright © 2017年 xTT. All rights reserved. // #import "TrackViewController.h" #import "NewTrackMsgCell.h" //高德 #import #import @interface TrackViewController () @property (nonatomic, strong) AMapSearchAPI *searchAPI; /** 这个是逆地理位置编码的请求的列表 和 Locate 的 Model 对应 */ @property (nonatomic, strong) NSMutableArray *AMapSearchList; /** 需要上传的 解析完的 坐标点的 参数 */ @property (nonatomic, strong) NSMutableArray *shouldUpdateLocateAddressList; /** 需要上传的定位点的ID 集合列表 */ @property (nonatomic, strong) NSMutableArray *shouldUpdateIDList; @end @implementation TrackViewController -(NSMutableArray *)shouldUpdateIDList{ if(!_shouldUpdateIDList){ _shouldUpdateIDList = [NSMutableArray array]; } return _shouldUpdateIDList; } -(NSMutableArray *)shouldUpdateLocateAddressList{ if(!_shouldUpdateLocateAddressList){ _shouldUpdateLocateAddressList = [NSMutableArray array]; } return _shouldUpdateLocateAddressList; } - (void)viewDidLoad { [super viewDidLoad]; self.zx_hideBaseNavBar = YES; //self.emptyText = @"暂无历史轨迹"; [self.myTableView registerNib:[UINib nibWithNibName:@"NewTrackMsgCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"NewTrackMsgCellID"]; //去线 self.myTableView.separatorStyle = UITableViewCellSeparatorStyleNone; [self.myTableView.mj_footer beginRefreshing]; self.myTableView.emptyDataSetSource = self; self.myTableView.emptyDataSetDelegate = self; //self.myTableView.estimatedRowHeight = 70; self.view.backgroundColor = self.myTableView.backgroundColor; //初始化 定位解析 self.searchAPI = [[AMapSearchAPI alloc] init]; self.searchAPI.delegate = self; [self setUI]; } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; } -(void)setUI{ Device * mainDevice = cUser.cDevice; UIImage * defaImage ; // self.headCollectionView.backgroundColor = [UICommon setGradientBackgroundColor:RGBA(255, 239, 232, 1) Color2:RGBA(255, 255, 255, 1) Width:ScreenWidth-30 Height:72]; [self.headCollectionView.layer addSublayer:[UICommon setGradualChangingColor:self.headCollectionView fromColor:RGBA(255, 239, 232, 1) toColor:RGBA(255, 255, 255, 1)]]; if([mainDevice.sex isEqualToString:@"girl"]){ //女 defaImage = [myHelper getImageWithName: @"icon_girl_head_portrait_1"]; }else{ //男 defaImage = [myHelper getImageWithName: @"icon_boy_head_portrait_1"]; } //self.deviceImageView = [UIImageView new]; [self.headCollectionView addSubview:self.deviceImageView]; [self.headCollectionView addSubview:self.nameLabel]; [self.headCollectionView addSubview:self.allCountTrackLabel]; [self.headCollectionView addSubview:self.delectBtn]; [self.deviceImageView sd_setImageWithURL:[NSURL URLWithString:mainDevice.avator] placeholderImage:defaImage]; self.deviceImageView.layer.borderWidth = 1.5; self.deviceImageView.layer.borderColor = KKWhiteColorColor.CGColor; self.deviceImageView.layer.cornerRadius = self.deviceImageView.height/2; self.deviceImageView.layer.masksToBounds = YES; self.nameLabel.textColor = KKGrey153; self.nameLabel.font = Font_(12); self.nameLabel.text = mainDevice.name; self.allCountTrackLabel.text = @""; [self.delectBtn addTarget:self action:@selector(delectAction:) forControlEvents:UIControlEventTouchUpInside]; [UICommon ui_uiViewFillet:self.headCollectionView.bounds Viewdirection:PYUIdirectionTop toView:self.headCollectionView sizeMake:12]; } - (void)delectAction:(UIButton*)sender{ WEAKSELF CommonPopView *popView = [CommonPopView new]; [popView subPopView:popViewType_ycgj PopTitle:@"提示" PopText:@"确定删除轨迹?" okTouchBlock:^{ [Track delectTrackWithDailyIds:@[self.infoTrack.id] success:^(id responseObject) { [weakSelf.myDataSource removeAllObjects]; [weakSelf.myTableView reloadData]; weakSelf.headCollectionView.hidden = YES; weakSelf.infoTrack = nil; //显示 无数据 if(weakSelf.delectBlockCall){ weakSelf.delectBlockCall(); } xLog(@"删除轨迹点成功"); } failure:^{ xLog(@"删除轨迹点失败"); } ]; }]; } - (void)loadWithInfoTrack:(Track*)track Back:(BlockCall)blockCall{ // [self.view getViewController] if(!track){ self.headCollectionView.hidden = YES; [self.myDataSource removeAllObjects]; [self.myTableView reloadData]; if(blockCall){ blockCall(); } return; }else{ self.headCollectionView.hidden = NO; } self.infoTrack = track; NSString *tmp = [NSString stringWithFormat:@"%ld条轨迹",(long)track.amount.integerValue]; NSInteger lenght = tmp.length; NSMutableAttributedString *att = [[NSMutableAttributedString alloc] initWithString:tmp]; [att addAttribute:NSForegroundColorAttributeName value:mainColor range:NSMakeRange(0,lenght-3)]; self.allCountTrackLabel.attributedText = att; if(self.AMapSearchList){ [self.AMapSearchList removeAllObjects]; self.AMapSearchList = nil; } self.AMapSearchList = [NSMutableArray array]; WEAKSELF [track getTrackInfoSuccess:^(NSMutableArray *arr) { NSArray *tempArr = [arr copy]; [weakSelf.shouldUpdateIDList removeAllObjects]; for (int i=0; i 0) { AMapReGeocodeSearchRequest *regeo = self.AMapSearchList[indexPath.row]; if( (locate.address && locate.address.length == 0 )|| locate.address == nil){ [self.searchAPI AMapReGoecodeSearch:regeo]; } } NSString *dateStr = [myHelper getDateFormatWithStr:@"HH:mm" date:[NSDate dateWithTimeIntervalSince1970:[locate.timestamp doubleValue]]]; // MARK: 增加停留时间 add by lsz 2021-06-24 long seconds = [locate.endtime integerValue] - [locate.timestamp integerValue]; NSString *stayTime = [self secondToTime:seconds]; NewTrackMsgCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NewTrackMsgCellID" forIndexPath:indexPath]; if([self.myDataSource[indexPath.section] count] -1 == indexPath.row) [UICommon ui_uiViewFillet:cell.bounds Viewdirection:PYUIdirectionBotton toView:cell sizeMake:12]; if([self.myDataSource[indexPath.section] count] == 1) { //起,不绘制虚线 [cell setIconType:0 WithAddress:locate.address WithTime:dateStr CanShapeToView:NO StayTime:stayTime Cellheight:hh]; return cell; } if(indexPath.section == 0) { if (indexPath.row == 0) { [cell setIconType:2 WithAddress:locate.address WithTime:dateStr CanShapeToView:YES StayTime:stayTime Cellheight:hh]; } else if([self.myDataSource[indexPath.section] count] -1 == indexPath.row) { [cell setIconType:0 WithAddress:locate.address WithTime:dateStr CanShapeToView:YES StayTime:stayTime Cellheight:hh]; } else { [cell setIconType:1 WithAddress:locate.address WithTime:dateStr CanShapeToView:YES StayTime:stayTime Cellheight:hh]; } } return cell; } - (NSString *)secondToTime:(long)seconds { long days = seconds/86400; seconds = seconds%86400; long hours = seconds/3600; seconds = seconds%3600; long minutes = ceil(seconds/60.0); seconds = seconds%60; if (days > 0) { return [NSString stringWithFormat:@"停留 %zd 天 %zd 小时 %zd 分",days,hours,minutes]; } else if (hours > 0) { return [NSString stringWithFormat:@"停留 %zd 小时 %zd 分",hours,minutes]; } else if(minutes > 0) { return [NSString stringWithFormat:@"停留 %zd 分",minutes]; } else { return @"0"; } } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ Locate *locate = self.myDataSource[indexPath.section][indexPath.row]; return [self getCellheight:locate]; } /// 获取cell高度(根据内容动态计算) - (CGFloat)getCellheight:(Locate *)locate { CGRect rect = [UICommon GetTextWidth:locate.address ViewHeight:ScreenWidth-32-123 fontSize:FontBold_(14) type:@"h"]; // MARK: 增加停留时间 add by lsz 2021-06-24 long seconds = [locate.endtime integerValue] - [locate.timestamp integerValue]; NSString *stayTime = [self secondToTime:seconds]; CGFloat hh = stayTime.length > 1 ? rect.size.height+20+5+35 : rect.size.height+40; return hh; } - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{ return UITableViewCellEditingStyleNone; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark ====高德地图位置解析回调==== -(void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response{ if (response.regeocode != nil) { NSString *name = response.regeocode.formattedAddress; //解析response获取地址描述,具体解析见 Demo // //获取市 // NSString *city = response.regeocode.addressComponent.city; // NSString *province = response.regeocode.addressComponent.province; // if(city && city.length>0){ // name = [name componentsSeparatedByString:city].lastObject; // if([city isEqualToString:province]){ // //直辖市 // name = [NSString stringWithFormat:@"%@ %@",name,city]; // }else{ // //普通市 // name = [NSString stringWithFormat:@"%@ %@ %@",name,city,province]; // } // } if(self.AMapSearchList.count > 0){ NSInteger index = [self.AMapSearchList indexOfObject:request]; if(index != NSNotFound && self.myDataSource.count > 0 && index < [self.myDataSource[0] count]){ Locate * indexModel = self.myDataSource[0][index]; if([self.shouldUpdateIDList containsObject:indexModel.id]){ indexModel.address = name; NSMutableDictionary *param = [NSMutableDictionary dictionary]; [param setValue:indexModel.id forKey:@"locationId"]; [param setValue:name forKey:@"address"]; [self.shouldUpdateLocateAddressList addObject:param]; [self.myTableView reloadData]; } if (self.shouldUpdateLocateAddressList.count == self.shouldUpdateIDList.count){ //上传某天定位点 的 解析位置数据 WEAKSELF [self.infoTrack postLocationsAddress:self.shouldUpdateLocateAddressList success:^(id responseObject) { xLog(@"APP解析的 位置上传成功"); [weakSelf.shouldUpdateLocateAddressList removeAllObjects]; [weakSelf.shouldUpdateIDList removeAllObjects]; } failure:^{ [weakSelf.shouldUpdateLocateAddressList removeAllObjects]; [weakSelf.shouldUpdateIDList removeAllObjects]; xLog(@"APP解析的 位置上传失败"); }]; } } } } } @end