美文网首页
iOS~ 高德地图:2、示例:台风运行轨迹 + 自定义气泡标注:

iOS~ 高德地图:2、示例:台风运行轨迹 + 自定义气泡标注:

作者: 阳光下的叶子呵 | 来源:发表于2022-08-30 15:06 被阅读0次

代码:


#pragma mark ****** 4、台风:轨迹 “高德地图:【绘制折线】、【点平滑移动 】” ******
- (void)setupTyphoonTrack {
    
    
    if (self.groundOverlay != nil) {
        [self.mapView removeOverlay:self.groundOverlay]; // 删除 【绘制面】(图片覆盖物)overlay
        self.groundOverlay = nil;
    }
    
    if (self.commonPolyline != nil) {
        [self.mapView removeOverlay:self.commonPolyline]; // 删除 【绘制折线】(这里特指:台风)overlay
        self.commonPolyline = nil;
    }
    
    for (MAAnnotationMoveAnimation *animation in [self.typhoon_AnimatedAnnotation allMoveAnimations]) {
        [animation cancel];
    }
    if (self.typhoon_AnimatedAnnotation != nil) {
        [self.mapView removeAnnotation:self.typhoon_AnimatedAnnotation]; // 删除 【点平滑移动】(这里特指 台风的图片)Annotation
        self.typhoon_AnimatedAnnotation = nil;
    }
    
    if (self.locatinWeather_AnimatedAnnotation != nil) {
        [self.mapView removeAnnotation:self.locatinWeather_AnimatedAnnotation]; // 删除 【自定义气泡】Annotation
        self.locatinWeather_AnimatedAnnotation = nil;
    }
    
    if (self.raderMapDateModel.typhoon.count > 0) {
        
        // 构造折线数据对象
        CLLocationCoordinate2D commonPolylineCoords[self.raderMapDateModel.typhoon[0].routes.count];
        
        for (int i = 0; i < self.raderMapDateModel.typhoon[0].routes.count; i++) {
            GWHomeRaderMap_TyphoonRoutesModel *typhoonRoutesModel = self.raderMapDateModel.typhoon[0].routes[i];
            commonPolylineCoords[i].latitude = typhoonRoutesModel.latitude;
            commonPolylineCoords[i].longitude = typhoonRoutesModel.longitude;
        }
        
        /** 高德地图:构造折线对象 */
        MAPolyline *commonPolyline = [MAPolyline polylineWithCoordinates:commonPolylineCoords count:self.raderMapDateModel.typhoon[0].routes.count];
        //在地图上添加折线对象(再 实现 <MAMapViewDelegate> 协议中的 mapView:rendererForOverlay: 回调函数,设置折线的样式)
        [self.mapView addOverlay:commonPolyline];
        self.commonPolyline = commonPolyline;
        
        [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(self.raderMapDateModel.typhoon[0].routes[0].latitude, self.raderMapDateModel.typhoon[0].routes[0].longitude) animated:YES];
        [self.mapView setZoomLevel:6 animated:YES];
        
        
        /** 高德地图:点平滑移动 */
        if (self.typhoon_AnimatedAnnotation == nil) {
            MAAnimatedAnnotation *animatedAnnotation = [[MAAnimatedAnnotation alloc] init];
            animatedAnnotation.coordinate = commonPolylineCoords[0]; // 初始位置
            animatedAnnotation.title = self.raderMapDateModel.typhoon[0].nameCn;
            self.typhoon_AnimatedAnnotation = animatedAnnotation;
            
            [self.mapView addAnnotation:self.typhoon_AnimatedAnnotation];
            [self.mapView selectAnnotation:self.typhoon_AnimatedAnnotation animated:YES]; // 选中状态(显示标注view)
            
        } else {
            self.typhoon_AnimatedAnnotation.coordinate = commonPolylineCoords[0]; // 初始位置
        }
        
        // 给self.typhoon_AnimatedAnnotation添加一个移动动画(沿着 经纬度commonPolylineCoords)
        [self.typhoon_AnimatedAnnotation addMoveAnimationWithKeyCoordinates:commonPolylineCoords count:self.raderMapDateModel.typhoon[0].routes.count withDuration:20 withName:@"台风运行轨迹线" completeCallback:^(BOOL isFinished) {
            if (isFinished) {
                
            }
        }];
    }
}

#pragma mark ========>>>>>>>>>> 方法【mapView:viewForAnnotation:】 <<<<<<<<<<<<==========
/// 在 <MAMapViewDelegate>协议的回调函数mapView:viewForAnnotation:中修改 MAAnnotationView 对应的标注图片。
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id <MAAnnotation>)annotation {
    
    
    ///注意:5.1.0后由于定位蓝点增加了平滑移动功能,如果在开启定位的情况先添加annotation,需要在此回调方法中判断annotation是否为MAUserLocation,从而返回正确的View。
    if ([annotation isKindOfClass:[MAUserLocation class]]) {
//        [self gain_ClickMap_Request_WithLocationCoordinate:self.mapView.userLocation.location.coordinate];
       return nil; // 防止,更改用户当前位置的蓝点,为大头钉样式或自定义样式 
    }
    
    // 台风轨迹线动画:
    if (annotation == self.typhoon_AnimatedAnnotation) { // 所有的MAAnimatedAnnotation类(包含用户当前位置的图标)
        NSLog(@"😆哈哈哈 ==== self.typhoon_AnimatedAnnotation 类");
        MAAnnotationView *annotationView = (MAPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:NSStringFromClass([self.typhoon_AnimatedAnnotation class])];
        
        if (annotationView == nil) {
            annotationView = [[MAAnnotationView alloc] initWithAnnotation:self.typhoon_AnimatedAnnotation
                                                             reuseIdentifier:NSStringFromClass([self.typhoon_AnimatedAnnotation class])];
//            [annotationView setSize:CGSizeMake([UIScreen mainScreen].bounds.size.width/375*47, [UIScreen mainScreen].bounds.size.width/375*25)];
        }
//        annotationView.backgroundColor = [UIColor redColor];
        // UIImageView的 自定义动画
        annotationView.imageView.size = CGSizeMake([UIScreen mainScreen].bounds.size.width/375*20, [UIScreen mainScreen].bounds.size.width/375*20);
        annotationView.imageView.center = annotationView.centerOffset;
        
        
        annotationView.imageView.backgroundColor = UIColor.clearColor;
        annotationView.imageView.animationImages = [self animationImages]; // 获取 Gif 图片列表
        annotationView.imageView.animationDuration = 0.3;                    // 执行一次完整动画所需的时长
        annotationView.imageView.animationRepeatCount = 0;                 // 动画重复次数(0 无限)
        [annotationView.imageView startAnimating];
        
        annotationView.calloutOffset = CGPointMake(0, -15);
        
//        annotationView.annotation  = self.typhoon_AnimatedAnnotation;
        annotationView.canShowCallout               = YES;
        annotationView.draggable                    = NO;
//        annotationView.rightCalloutAccessoryView    = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
//        [annotationView setSelected:YES animated:NO];
        
        return annotationView;
    }
    
    /** 自定义气泡标注 */
    if (annotation == self.locatinWeather_AnimatedAnnotation) {
        NSLog(@"😆哈哈哈 ==== 自定义self.locatinWeather_AnimatedAnnotation 类");
          
        GWRaderMap_CustomAnnotationView *costomAnnotationView = (GWRaderMap_CustomAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:NSStringFromClass([GWRaderMap_CustomAnnotationView class])];
        
        if (costomAnnotationView == nil) {
            costomAnnotationView = [[GWRaderMap_CustomAnnotationView alloc] initWithAnnotation:self.locatinWeather_AnimatedAnnotation
                                                             reuseIdentifier:NSStringFromClass([GWRaderMap_CustomAnnotationView class])];
        }
        
        if (self.tempBut.selected && self.itemCell < self.locationWeatherModel.temp.count) {
            GWHomeRaderMap_TempLocationWeatherModel *model = self.locationWeatherModel.temp[self.itemCell];
            costomAnnotationView.title = model.city;
            costomAnnotationView.imageUrl = model.icon;
            costomAnnotationView.detailContent = [NSString stringWithFormat:@"%ld°", model.temp];
            costomAnnotationView.time = model.timeStr;
            costomAnnotationView.weatherCode = model.weatherCode;
            
        } else if (self.rainBut.selected && self.itemCell < self.locationWeatherModel.precip.count) {
            GWHomeRaderMap_PrecipLocationWeatherModel *model = self.locationWeatherModel.precip[self.itemCell];
            costomAnnotationView.title = model.city;
            costomAnnotationView.imageUrl = model.icon;
            costomAnnotationView.detailContent = model.weather;
            costomAnnotationView.time = model.timeStr;
            costomAnnotationView.weatherCode = model.weatherCode;
        }
        
        
        costomAnnotationView.calloutOffset = CGPointMake(8, -10);
        costomAnnotationView.centerOffset = CGPointMake(0, -10);
        
        // 点击自定义按钮,隐藏整个“气泡” 和 “大头针”:
        costomAnnotationView.hideCustomCalloutViewBlock = ^(BOOL is_hideCustomView) {
            if (self.locatinWeather_AnimatedAnnotation != nil) {
                [self.mapView removeAnnotation:self.locatinWeather_AnimatedAnnotation]; // 删除 【自定义气泡】Annotation
                self.locatinWeather_AnimatedAnnotation = nil;
            }
//            [self.mapView selectAnnotation:self.locatinWeather_AnimatedAnnotation animated:YES]; // 选中状态(显示标注view)
        };
        
        
//        @property (nonatomic, copy)     NSString    *title; // 地址
//        @property (nonatomic, copy)     NSString    *imageUrl; // 天气图片url
//        @property (nonatomic, copy)     NSString    *detailContent; // 气温时:显示 温度,降水时:显示 天气描述
//        @property (nonatomic, copy)     NSString    *time;  // 时间
//
//        @property (nonatomic, assign)   BOOL is_ShowButton;// YES 显示,NO 隐藏
        
        
        return costomAnnotationView;
        
    } else if ([annotation isKindOfClass:[MAPointAnnotation class]]) {  //其他大头针
        NSLog(@"😆哈哈哈 ==== MAPointAnnotation 类");
    }
    
    return nil;
}

// 多张图片循环播放,实现gif图的效果(这里是6张)
- (NSArray *)animationImages {
    
    NSMutableArray *images = [NSMutableArray arrayWithCapacity:6];
    for (int i = 0; i < 6; i++) {
        NSString *imageStr = [NSString stringWithFormat:@"hfsdk_icon_typhoon_0%d.png",i + 1];
        UIImage *image = [UIImage imageNamed:imageStr];
        [images addObject:image];
    }
    
    return images;
}

- (void)mapView:(MAMapView *)mapView annotationView:(MAAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
    NSLog(@"👌👌哈哈哈 ==== 方法:calloutAccessoryControlTapped");
}

/**
 * @brief 标注view的calloutview整体点击时,触发该回调。只有使用默认calloutview时才生效。
 * @param mapView 地图的view
 * @param view calloutView所属的annotationView
 */
- (void)mapView:(MAMapView *)mapView didAnnotationViewCalloutTapped:(MAAnnotationView *)view {
    NSLog(@"👌👌哈哈哈 ==== 使用默认calloutview,==== 方法:didAnnotationViewCalloutTapped");
}

/**
 * @brief 标注view被点击时,触发该回调。(since 5.7.0)
 * @param mapView 地图的view
 * @param view annotationView
 */
- (void)mapView:(MAMapView *)mapView didAnnotationViewTapped:(MAAnnotationView *)view {
    // 点击用户当前位置MAUserLocationView时、或显示标注的气泡的当前位置时,有反应
    NSLog(@"👌👌哈哈哈 ==== 方法:didAnnotationViewTapped");
    
//    if ([view isMemberOfClass:[MAUserLocationView class]]) {
//    }
    if (![view isMemberOfClass:[GWRaderMap_CustomAnnotationView class]]) {
        if (self.locatinWeather_AnimatedAnnotation != nil) {
            [self.mapView removeAnnotation:self.locatinWeather_AnimatedAnnotation]; // 删除 【自定义气泡】Annotation
            self.locatinWeather_AnimatedAnnotation = nil;
        }
        
//        self.mapView.showsUserLocation = NO; // 隐藏用户当前位置的小圆点
        NSLog(@"点击的是 当前小圆点 view ====>>>>>> %@", view);
        
        [self gain_ClickMap_Request_WithLocationCoordinate:self.mapView.userLocation.location.coordinate];
        
        
    } else {
        NSLog(@"点击的是 自定义的view ====>>>>>> %@", view);
    }
    
}


#pragma mark ********  5、 网络请求:【点击地图 ,显示自定义view,显示 该坐标天气信息】   ********
- (void)gain_ClickMap_Request_WithLocationCoordinate:(CLLocationCoordinate2D)coordinate  {
    
    self.locationWeatherModel = [GWHomeRaderMap_LocationWeatherModel new];
    
    NSDictionary *params = @{
        @"longitude":@(coordinate.longitude),
        @"latitude":@(coordinate.latitude)
    };
    
    [BRNetworkHepler getWithUrl:@"https://www.baidu.com/more/weatherImages" params:params headers:nil success:^(GWHttpBaseResponseModel *responseObject, NSString *message) {
        NSInteger code = responseObject.code;
        if (code == 200) {
            NSDictionary *dataDic = responseObject.data;
            GWHomeRaderMap_LocationWeatherModel *locationWeatherModel = [GWHomeRaderMap_LocationWeatherModel modelWithDictionary:dataDic];
            locationWeatherModel.longitude = coordinate.longitude;
            locationWeatherModel.latitude = coordinate.latitude;
            
            for (int i=0; i < locationWeatherModel.temp.count; i++) {
                GWHomeRaderMap_TempLocationWeatherModel *model = locationWeatherModel.temp[i];
                locationWeatherModel.temp[i].timeStr = [LCM_Tool TimeStampTransform:model.timestamp andstyle:@"HH:mm"];
            }
            for (int i=0; i < locationWeatherModel.precip.count; i++) {
                GWHomeRaderMap_PrecipLocationWeatherModel *model = locationWeatherModel.precip[i];
                locationWeatherModel.precip[i].timeStr = [LCM_Tool TimeStampTransform:model.timestamp andstyle:@"HH:mm"];
            }
            
            self.locationWeatherModel = locationWeatherModel;
            if (self.locationWeatherModel != nil) {
                [self createCustomLocationWeatherView_WithModel:self.locationWeatherModel];
            } else {
                if (self.locatinWeather_AnimatedAnnotation != nil) {
                    [self.mapView removeAnnotation:self.locatinWeather_AnimatedAnnotation]; // 删除 【自定义气泡】Annotation
                    self.locatinWeather_AnimatedAnnotation = nil;
                }
            }
            
        } else {
//            [LCM_AlertViewFactory showToastWithMessage:responseObject.msg];
            if (self.locatinWeather_AnimatedAnnotation != nil) {
                [self.mapView removeAnnotation:self.locatinWeather_AnimatedAnnotation]; // 删除 【自定义气泡】Annotation
                self.locatinWeather_AnimatedAnnotation = nil;
            }
        }
    } failure:^(NSError *error, NSString *message) {
        NSLog(@"error =====>>>> %@", error);
        NSLog(@"message ---->> %@", message);
    }];
}

/** 添加自定义气泡:背景、地址、天气图片、天气描述、时间 */
- (void)createCustomLocationWeatherView_WithModel:(GWHomeRaderMap_LocationWeatherModel *)locationWeatherModel {
//    GWRaderMap_CustomAnnotationView

    /** 高德地图: 点击地图,弹出自定义天气view */
    
    if (self.locatinWeather_AnimatedAnnotation != nil) {
        [self.mapView removeAnnotation:self.locatinWeather_AnimatedAnnotation]; // 删除 【自定义气泡】Annotation
        self.locatinWeather_AnimatedAnnotation = nil;
    }
    
    if (self.locatinWeather_AnimatedAnnotation == nil) {
        MAAnimatedAnnotation *locatinWeather_AnimatedAnnotation = [[MAAnimatedAnnotation alloc] init];
        locatinWeather_AnimatedAnnotation.coordinate = CLLocationCoordinate2DMake(locationWeatherModel.latitude, locationWeatherModel.longitude); // 初始位置
//        locatinWeather_AnimatedAnnotation.title = self.raderMapDateModel.typhoon[0].nameCn;
        self.locatinWeather_AnimatedAnnotation = locatinWeather_AnimatedAnnotation;
        
        [self.mapView addAnnotation:self.locatinWeather_AnimatedAnnotation];
        [self.mapView selectAnnotation:self.locatinWeather_AnimatedAnnotation animated:YES]; // 选中状态(显示标注view)
        
        [self.mapView setCenterCoordinate:locatinWeather_AnimatedAnnotation.coordinate animated:YES];
        
    } else {
        self.locatinWeather_AnimatedAnnotation.coordinate = CLLocationCoordinate2DMake(locationWeatherModel.latitude, locationWeatherModel.longitude); // 初始位置
    }
    
}


#pragma mark ------------  【设置UI】
- (void)setupUI {
    
    _tempBut = [UIButton buttonWithType:UIButtonTypeCustom];
    [_tempBut setBackgroundImage:[UIImage imageNamed:@"raderMap_气温_select_icon"] forState:UIControlStateSelected];
    [_tempBut setBackgroundImage:[UIImage imageNamed:@"raderMap_气温_noSelect_icon"] forState:UIControlStateNormal];
    _tempBut.adjustsImageWhenHighlighted = NO; // 下面的背景图片可以保证图片不变灰
    [self.navigationBar addSubview:self.tempBut];
    [self.tempBut makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(self.navigationBar);
        make.left.mas_equalTo(self.navigationBar.mas_left).offset([UIScreen mainScreen].bounds.size.width/375*15);
        make.width.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*93);
        make.height.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*44);
    }];
    [self.tempBut addTarget:self action:@selector(clickRaderMapBotton:) forControlEvents:UIControlEventTouchUpInside];
    
    _rainBut = [UIButton buttonWithType:UIButtonTypeCustom];
    [_rainBut setBackgroundImage:[UIImage imageNamed:@"raderMap_降水_select_icon"] forState:UIControlStateSelected];
    [_rainBut setBackgroundImage:[UIImage imageNamed:@"raderMap_降水_noSelect_icon"] forState:UIControlStateNormal];
    _rainBut.adjustsImageWhenHighlighted = NO; // 下面的背景图片可以保证图片不变灰
    [self.navigationBar addSubview:self.rainBut];
    [self.rainBut makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(self.navigationBar);
        make.centerX.equalTo(self.navigationBar);
        make.width.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*93);
        make.height.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*44);
    }];
    [self.rainBut addTarget:self action:@selector(clickRaderMapBotton:) forControlEvents:UIControlEventTouchUpInside];
    
    _typhoonBut = [UIButton buttonWithType:UIButtonTypeCustom];
    [_typhoonBut setBackgroundImage:[UIImage imageNamed:@"raderMap_台风_select_icon"] forState:UIControlStateSelected];
    [_typhoonBut setBackgroundImage:[UIImage imageNamed:@"raderMap_台风_noSelect_icon"] forState:UIControlStateNormal];
    _typhoonBut.adjustsImageWhenHighlighted = NO; // 下面的背景图片可以保证图片不变灰
    [self.navigationBar addSubview:self.typhoonBut];
    [self.typhoonBut makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(self.navigationBar);
        make.right.mas_equalTo(self.navigationBar.mas_right).offset(-[UIScreen mainScreen].bounds.size.width/375*15);
        make.width.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*93);
        make.height.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*44);
    }];
    [self.typhoonBut addTarget:self action:@selector(clickRaderMapBotton:) forControlEvents:UIControlEventTouchUpInside];
    
    
    self.tempBut.selected = YES;
    self.rainBut.selected = NO;
    self.typhoonBut.selected = NO;
    
}



/** 布局:(气温+降水)自定义功能 */
- (void)setupTempAndRainOtherFunction {
    
    /// 气候等级
    _climateRank_BackView = [[UIView alloc] init];
    self.climateRank_BackView.backgroundColor = RGBA(248, 246, 242, 1);
    self.climateRank_BackView.layer.cornerRadius = [UIScreen mainScreen].bounds.size.width/375*26/2;
    self.climateRank_BackView.layer.shadowColor = RGBA(0, 0, 0, 0.12).CGColor;
    self.climateRank_BackView.layer.shadowOffset = CGSizeMake(0, 0);
    self.climateRank_BackView.layer.shadowRadius = [UIScreen mainScreen].bounds.size.width/375*8;
    self.climateRank_BackView.layer.shadowOpacity = 1;
    [self.view addSubview:self.climateRank_BackView];
    [self.climateRank_BackView makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.view.mas_top).offset(k_Height_StatusBar+k_Height_NavContentBar + [UIScreen mainScreen].bounds.size.width/375*14);
        make.left.mas_equalTo(self.view.mas_left).offset([UIScreen mainScreen].bounds.size.width/375*20);
        make.width.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*173);
        make.height.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*26);
    }];
    
    _climateRank_Img = [[UIImageView alloc] init];
    self.climateRank_Img.image = [UIImage imageNamed:@"raderMap_TempRankColor_icon"];
    [self.climateRank_BackView addSubview:self.climateRank_Img];
    [self.climateRank_Img makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.climateRank_BackView);
        make.width.mas_equalTo([UIScreen mainScreen].bounds.size.width/
375*115);
        make.height.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*6);
    }];
    
    _climateRank_minTipsL = [[UILabel alloc] init];
    _climateRank_minTipsL.text = @"-40°";
    _climateRank_minTipsL.textColor = RGBA(0, 0, 0, 0.5);
    _climateRank_minTipsL.textAlignment = NSTextAlignmentLeft;
    _climateRank_minTipsL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*10);
    [self.climateRank_BackView addSubview:self.climateRank_minTipsL];
    [self.climateRank_minTipsL makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(self.climateRank_BackView);
        make.left.mas_equalTo(self.climateRank_BackView.mas_left).offset([UIScreen mainScreen].bounds.size.width/375*8);
    }];
    
    _climateRank_maxTipsL = [[UILabel alloc] init];
    _climateRank_maxTipsL.text = @"40°";
    _climateRank_maxTipsL.textColor = RGBA(0, 0, 0, 0.5);
    _climateRank_maxTipsL.textAlignment = NSTextAlignmentRight;
    _climateRank_maxTipsL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*10);
    [self.climateRank_BackView addSubview:self.climateRank_maxTipsL];
    [self.climateRank_maxTipsL makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(self.climateRank_BackView);
        make.right.mas_equalTo(self.climateRank_BackView.mas_right).offset(-[UIScreen mainScreen].bounds.size.width/375*8);
    }];
    
    _currentPositionBut = [UIButton buttonWithType:UIButtonTypeCustom];
    [_currentPositionBut setBackgroundImage:[UIImage imageNamed:@"raderMap_currentLocation_icon"] forState:UIControlStateNormal];
    _currentPositionBut.adjustsImageWhenHighlighted = NO; // 点击时图片 不变灰色
    [self.currentPositionBut addTarget:self action:@selector(click_backCurrentPositionAction) forControlEvents:UIControlEventTouchUpInside];
    self.currentPositionBut.layer.masksToBounds = YES;
    self.currentPositionBut.layer.cornerRadius = [UIScreen mainScreen].bounds.size.width/375*44/2;
    [self.view addSubview:self.currentPositionBut];
    [self.currentPositionBut makeConstraints:^(MASConstraintMaker *make) {
        make.bottom.mas_equalTo(self.view.mas_bottom).offset(-(k_Height_TabBar + [UIScreen mainScreen].bounds.size.width/375*19));
        make.right.mas_equalTo(self.view.mas_right).offset(-[UIScreen mainScreen].bounds.size.width/375*12);
        make.width.height.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*44);
    }];
    
    
    /** 播放/暂停:气候变化,(可以 手动滑动 刻度) */
    _progress_BackView = [[UIView alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/375*15, [UIScreen mainScreen].bounds.size.height - k_Height_TabBar - [UIScreen mainScreen].bounds.size.width/375*(19+44), [UIScreen mainScreen].bounds.size.width/375*290, [UIScreen mainScreen].bounds.size.width/375*44)];
    _progress_BackView.backgroundColor = RGBA(248, 246, 242, 1);
    self.progress_BackView.layer.cornerRadius = [UIScreen mainScreen].bounds.size.width/375*44/2;
    self.progress_BackView.layer.shadowColor = RGBA(0, 0, 0, 0.12).CGColor;
    self.progress_BackView.layer.shadowOffset = CGSizeMake(0, 0);
    self.progress_BackView.layer.shadowRadius = [UIScreen mainScreen].bounds.size.width/375*4;
    self.progress_BackView.layer.shadowOpacity = 1;
    [self.view addSubview:self.progress_BackView];
    
    
    
    /** 时间刻度的父view ,宽度:(290 - 40 -25) = 225*/
    _progress_lineBackView = [[UIView alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/375*40, 0, [UIScreen mainScreen].bounds.size.width/375*(225), [UIScreen mainScreen].bounds.size.width/375*44)];
    self.progress_lineBackView.backgroundColor = UIColor.clearColor;//RGBA(212, 229, 225, 1);
    [self.progress_BackView addSubview:self.progress_lineBackView];
    
    _progress_beginTimeL = [[UILabel alloc] init];
    _progress_beginTimeL.text = @" ";
    _progress_beginTimeL.textColor = RGBA(153, 153, 153, 1);
    _progress_beginTimeL.textAlignment = NSTextAlignmentLeft;
    _progress_beginTimeL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*12);
    [self.progress_BackView addSubview:self.progress_beginTimeL];
    [self.progress_beginTimeL makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.mas_equalTo(self.progress_BackView.mas_centerY).offset([UIScreen mainScreen].bounds.size.width/375*11);
        make.left.mas_equalTo(self.progress_BackView.mas_left).offset([UIScreen mainScreen].bounds.size.width/375*40);
    }];
    
    _progress_endTimeL = [[UILabel alloc] init];
    _progress_endTimeL.text = @" ";
    _progress_endTimeL.textColor = RGBA(153, 153, 153, 1);
    _progress_endTimeL.textAlignment = NSTextAlignmentRight;
    _progress_endTimeL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*12);
    [self.progress_BackView addSubview:self.progress_endTimeL];
    [self.progress_endTimeL makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.mas_equalTo(self.progress_BackView.mas_centerY).offset([UIScreen mainScreen].bounds.size.width/375*11);
        make.right.mas_equalTo(self.progress_BackView.mas_right).offset(-[UIScreen mainScreen].bounds.size.width/375*25);
    }];
    
    _progress_currentLineView = [[UIView alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/375*(40-1), 0, [UIScreen mainScreen].bounds.size.width/375*2, [UIScreen mainScreen].bounds.size.width/375*22)];
    self.progress_currentLineView.backgroundColor = RGBA(193, 162, 122, 1);
    [self.progress_BackView addSubview:self.progress_currentLineView];
    
    // Touch触摸 view视图
    _progress_view = [[UIView alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/375*0, 0, [UIScreen mainScreen].bounds.size.width/375*290, [UIScreen mainScreen].bounds.size.width/375*44)];
    self.progress_view.userInteractionEnabled = YES;
    self.progress_view.backgroundColor = RGBA(88, 255, 88, 0);
    [self.progress_BackView addSubview:self.progress_view];
    
    // 开关:播放、暂停
    _progress_playBut = [UIButton buttonWithType:UIButtonTypeCustom];
    [_progress_playBut setBackgroundImage:[UIImage imageNamed:@"raderMap_playChange_icon"] forState:UIControlStateNormal];
    [_progress_playBut setBackgroundImage:[UIImage imageNamed:@"raderMap_pauseChange_icon"] forState:UIControlStateSelected];
    _progress_playBut.adjustsImageWhenHighlighted = NO; // 点击时图片 不变灰色
    [self.progress_BackView addSubview:self.progress_playBut];
    [self.progress_playBut makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(self.progress_BackView);
        make.left.mas_equalTo(self.progress_BackView.mas_left).offset([UIScreen mainScreen].bounds.size.width/375*10);
        make.width.height.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*24);
    }];
    [self.progress_playBut addTarget:self action:@selector(click_playClimateChangeAction) forControlEvents:UIControlEventTouchUpInside];
    
    
    _progress_tipsL = [[UILabel alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/375*(15+40 - 30), [UIScreen mainScreen].bounds.size.height - k_Height_TabBar - [UIScreen mainScreen].bounds.size.width/375*(19+44+22), [UIScreen mainScreen].bounds.size.width/375*60, [UIScreen mainScreen].bounds.size.width/375*22)];
    _progress_tipsL.backgroundColor = RGBA(193, 162, 122, 1);
    _progress_tipsL.textColor = UIColor.whiteColor;
    _progress_tipsL.textAlignment = NSTextAlignmentCenter;
    _progress_tipsL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*9);
    _progress_tipsL.layer.masksToBounds = YES;
    _progress_tipsL.layer.cornerRadius = [UIScreen mainScreen].bounds.size.width/375*22/2;
    [self.view addSubview:self.progress_tipsL];
    
    
    self.climateRank_minTipsL.text = @"-40°";
    self.climateRank_maxTipsL.text = @"40°";
    self.progress_BackView.hidden = YES;
    self.progress_tipsL.hidden = YES;
    
}

/** 布局:(台风)弹窗 */
- (void)setupTyphoonOtherFunction {
    
    /** 台风:经度、纬度、风力、最大风速、中心气压、距离本地 */
    _typhoon_BackView = [[UIView alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width/375*20, [UIScreen mainScreen].bounds.size.width/375*14 + k_Height_StatusBar+k_Height_NavContentBar, [UIScreen mainScreen].bounds.size.width/375*150, [UIScreen mainScreen].bounds.size.width/375*110)];
    _typhoon_BackView.backgroundColor = RGBA(248, 246, 242, 1);
    self.typhoon_BackView.layer.cornerRadius = [UIScreen mainScreen].bounds.size.width/375*8;
    self.typhoon_BackView.layer.shadowColor = RGBA(0, 0, 0, 0.12).CGColor;
    self.typhoon_BackView.layer.shadowOffset = CGSizeMake(0, 0);
    self.typhoon_BackView.layer.shadowRadius = [UIScreen mainScreen].bounds.size.width/375*8;
    self.typhoon_BackView.layer.shadowOpacity = 1;
    [self.view addSubview:self.typhoon_BackView];
    
    
    _typhoon_longitudeTipsL = [[UILabel alloc] init];
    _typhoon_longitudeTipsL.text = @"经度";
    _typhoon_longitudeTipsL.textColor = RGBA(0, 0, 0, 0.45);
    _typhoon_longitudeTipsL.textAlignment = NSTextAlignmentLeft;
    _typhoon_longitudeTipsL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*12);
    _typhoon_longitudeTipsL.adjustsFontSizeToFitWidth = YES;
    _typhoon_longitudeTipsL.minimumScaleFactor = 0.5;
    [self.typhoon_BackView addSubview:self.typhoon_longitudeTipsL];
    [self.typhoon_longitudeTipsL makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(self.typhoon_BackView.mas_top).offset([UIScreen mainScreen].bounds.size.width/375*11);
        make.left.mas_equalTo(self.typhoon_BackView.mas_left).offset([UIScreen mainScreen].bounds.size.width/375*12);
        make.width.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*32);
    }];
    
    _typhoon_longitudeL = [[UILabel alloc] init];
    _typhoon_longitudeL.textColor = RGBA(0, 0, 0, 9);
    _typhoon_longitudeL.textAlignment = NSTextAlignmentRight;
    _typhoon_longitudeL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*12);
    _typhoon_longitudeL.adjustsFontSizeToFitWidth = YES;
    _typhoon_longitudeL.minimumScaleFactor = 0.5;
    [self.typhoon_BackView addSubview:self.typhoon_longitudeL];
    [self.typhoon_longitudeL makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.mas_equalTo(self.typhoon_longitudeTipsL);
        make.left.mas_equalTo(self.typhoon_longitudeTipsL.mas_right).offset([UIScreen mainScreen].bounds.size.width/375*5);
        make.right.mas_equalTo(self.typhoon_BackView.mas_right).offset(-[UIScreen mainScreen].bounds.size.width/375*14);
    }];
    
    _typhoon_latitudeTipsL = [[UILabel alloc] init];
    _typhoon_latitudeTipsL.text = @"纬度";
    _typhoon_latitudeTipsL.textColor = RGBA(0, 0, 0, 0.45);
    _typhoon_latitudeTipsL.textAlignment = NSTextAlignmentLeft;
    _typhoon_latitudeTipsL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*12);
    _typhoon_latitudeTipsL.adjustsFontSizeToFitWidth = YES;
    _typhoon_latitudeTipsL.minimumScaleFactor = 0.5;
    [self.typhoon_BackView addSubview:self.typhoon_latitudeTipsL];
    [self.typhoon_latitudeTipsL makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(self.typhoon_longitudeTipsL.mas_bottom).offset([UIScreen mainScreen].bounds.size.width/375*6);
        make.left.mas_equalTo(self.typhoon_BackView.mas_left).offset([UIScreen mainScreen].bounds.size.width/375*12);
        make.width.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*32);
    }];
    
    _typhoon_latitudeL = [[UILabel alloc] init];
    _typhoon_latitudeL.textColor = RGBA(0, 0, 0, 9);
    _typhoon_latitudeL.textAlignment = NSTextAlignmentRight;
    _typhoon_latitudeL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*12);
    _typhoon_latitudeL.adjustsFontSizeToFitWidth = YES;
    _typhoon_latitudeL.minimumScaleFactor = 0.5;
    [self.typhoon_BackView addSubview:self.typhoon_latitudeL];
    [self.typhoon_latitudeL makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.mas_equalTo(self.typhoon_latitudeTipsL);
        make.left.mas_equalTo(self.typhoon_latitudeTipsL.mas_right).offset([UIScreen mainScreen].bounds.size.width/375*5);
        make.right.mas_equalTo(self.typhoon_BackView.mas_right).offset(-[UIScreen mainScreen].bounds.size.width/375*14);
    }];
    
    _typhoon_maxWindSpeedTipsL = [[UILabel alloc] init];
    _typhoon_maxWindSpeedTipsL.text = @"最大风速";
    _typhoon_maxWindSpeedTipsL.textColor = RGBA(0, 0, 0, 0.45);
    _typhoon_maxWindSpeedTipsL.textAlignment = NSTextAlignmentLeft;
    _typhoon_maxWindSpeedTipsL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*12);
    _typhoon_maxWindSpeedTipsL.adjustsFontSizeToFitWidth = YES;
    _typhoon_maxWindSpeedTipsL.minimumScaleFactor = 0.5;
    [self.typhoon_BackView addSubview:self.typhoon_maxWindSpeedTipsL];
    [self.typhoon_maxWindSpeedTipsL makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(self.typhoon_latitudeTipsL.mas_bottom).offset([UIScreen mainScreen].bounds.size.width/375*6);
        make.left.mas_equalTo(self.typhoon_BackView.mas_left).offset([UIScreen mainScreen].bounds.size.width/375*12);
        make.width.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*55);
    }];
    
    _typhoon_maxWindSpeedL = [[UILabel alloc] init];
    _typhoon_maxWindSpeedL.textColor = RGBA(0, 0, 0, 9);
    _typhoon_maxWindSpeedL.textAlignment = NSTextAlignmentRight;
    _typhoon_maxWindSpeedL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*12);
    _typhoon_maxWindSpeedL.adjustsFontSizeToFitWidth = YES;
    _typhoon_maxWindSpeedL.minimumScaleFactor = 0.5;
    [self.typhoon_BackView addSubview:self.typhoon_maxWindSpeedL];
    [self.typhoon_maxWindSpeedL makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.mas_equalTo(self.typhoon_maxWindSpeedTipsL);
        make.left.mas_equalTo(self.typhoon_maxWindSpeedTipsL.mas_right).offset([UIScreen mainScreen].bounds.size.width/375*5);
        make.right.mas_equalTo(self.typhoon_BackView.mas_right).offset(-[UIScreen mainScreen].bounds.size.width/375*14);
    }];
    
    _typhoon_pressureTipsL = [[UILabel alloc] init];
    _typhoon_pressureTipsL.text = @"中心气压";
    _typhoon_pressureTipsL.textColor = RGBA(0, 0, 0, 0.45);
    _typhoon_pressureTipsL.textAlignment = NSTextAlignmentLeft;
    _typhoon_pressureTipsL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*12);
    _typhoon_pressureTipsL.adjustsFontSizeToFitWidth = YES;
    _typhoon_pressureTipsL.minimumScaleFactor = 0.5;
    [self.typhoon_BackView addSubview:self.typhoon_pressureTipsL];
    [self.typhoon_pressureTipsL makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(self.typhoon_maxWindSpeedTipsL.mas_bottom).offset([UIScreen mainScreen].bounds.size.width/375*6);
        make.left.mas_equalTo(self.typhoon_BackView.mas_left).offset([UIScreen mainScreen].bounds.size.width/375*12);
        make.width.mas_equalTo([UIScreen mainScreen].bounds.size.width/375*55);
    }];
    
    _typhoon_pressureL = [[UILabel alloc] init];
    _typhoon_pressureL.textColor = RGBA(0, 0, 0, 9);
    _typhoon_pressureL.textAlignment = NSTextAlignmentRight;
    _typhoon_pressureL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*12);
    _typhoon_pressureL.adjustsFontSizeToFitWidth = YES;
    _typhoon_pressureL.minimumScaleFactor = 0.5;
    [self.typhoon_BackView addSubview:self.typhoon_pressureL];
    [self.typhoon_pressureL makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.mas_equalTo(self.typhoon_pressureTipsL);
        make.left.mas_equalTo(self.typhoon_pressureTipsL.mas_right).offset([UIScreen mainScreen].bounds.size.width/375*5);
        make.right.mas_equalTo(self.typhoon_BackView.mas_right).offset(-[UIScreen mainScreen].bounds.size.width/375*14);
    }];
    
    
    _noTyphoon_tipsL = [[UILabel alloc] init];
    _noTyphoon_tipsL.text = @"当前无台风";
    _noTyphoon_tipsL.textColor = RGBA(0, 0, 0, 9);
    _noTyphoon_tipsL.textAlignment = NSTextAlignmentCenter;
    _noTyphoon_tipsL.font = FontSourceHanSerifCN_Medium([UIScreen mainScreen].bounds.size.width/375*12);
    _noTyphoon_tipsL.adjustsFontSizeToFitWidth = YES;
    _noTyphoon_tipsL.minimumScaleFactor = 0.5;
    [self.typhoon_BackView addSubview:self.noTyphoon_tipsL];
    [self.noTyphoon_tipsL makeConstraints:^(MASConstraintMaker *make) {
        make.center.mas_equalTo(self.typhoon_BackView);
        make.left.mas_equalTo(self.typhoon_BackView.mas_left).offset([UIScreen mainScreen].bounds.size.width/375*5);
        make.right.mas_equalTo(self.typhoon_BackView.mas_right).offset(-[UIScreen mainScreen].bounds.size.width/375*5);
    }];
    
    
    // 默认,无数据(无台风时),小提示框,如果有数据(有台风)显示大提示框
    self.typhoon_BackView.frame = CGRectMake([UIScreen mainScreen].bounds.size.width/375*20, [UIScreen mainScreen].bounds.size.width/375*14 + k_Height_StatusBar+k_Height_NavContentBar, [UIScreen mainScreen].bounds.size.width/375*96, [UIScreen mainScreen].bounds.size.width/375*28);
    
    self.typhoon_BackView.hidden = YES;
    
}

相关文章

网友评论

      本文标题:iOS~ 高德地图:2、示例:台风运行轨迹 + 自定义气泡标注:

      本文链接:https://www.haomeiwen.com/subject/cjilnrtx.html