// // RadiaDetectionPage.m // pregnancy_guard // // Created by WindShan on 2017/7/5. // Copyright © 2017年 WindShan. All rights reserved. // #import "RadiaDetectionPage.h" #import "ASValueTrackingSlider.h" #import "ZZCircleProgress.h" @interface RadiaDetectionPage () { ZZCircleProgress *circle3; CGFloat gaugeValue; CGFloat gaugeAngle; UIImageView * ic_pointer; CGFloat maxNum; CGFloat minNum; CGFloat maxAngle; CGFloat minAngle; CGFloat angleperValue; } @end @implementation RadiaDetectionPage #pragma mark - ASValueTrackingSliderDelegate - (NSString *)slider:(ASValueTrackingSlider *)slider stringForValue:(float)value { NSString * valueStr = [NSString stringWithFormat:@"%d",(int)value]; //self._wenDuStr = valueStr; LOG_INFO(@"当前选择数值:%@℃",valueStr); //hotelSelModel.ad_speed = (int)value; circle3.progress = [valueStr floatValue]/100; [self setGaugeValue:slider.value animation:NO]; return valueStr; } - (void)sliderWillDisplayPopUpView:(ASValueTrackingSlider *)slider{ } - (void)sliderDidHidePopUpView:(ASValueTrackingSlider *)slider{ } #define MAXOFFSETANGLE 152.0f #define MAXVALUE 100.0f - (void)viewDidLoad { [super viewDidLoad]; self.title = @"辐射检测"; gaugeValue = 0.0f; gaugeAngle = -MAXOFFSETANGLE; maxNum = MAXVALUE; minNum = 0.0f; minAngle = -MAXOFFSETANGLE; maxAngle = MAXOFFSETANGLE; angleperValue = (maxAngle - minAngle)/(maxNum - minNum); // Do any additional setup after loading the view. ASValueTrackingSlider * _trackingSlider = [[ASValueTrackingSlider alloc]initWithFrame:CGRectMake(10, 40, SCREEN_WIDTH-20, 40)]; _trackingSlider.delegate = self; _trackingSlider.dataSource = self; _trackingSlider.popUpViewCornerRadius = 5.0; [_trackingSlider setMaxFractionDigitsDisplayed:0]; _trackingSlider.popUpViewColor = kUIColorFromRGB(0x00b744); _trackingSlider.font = [UIFont fontWithName:@"GillSans-Bold" size:12]; _trackingSlider.textColor = [UIColor whiteColor]; _trackingSlider.maximumValue = 100; _trackingSlider.minimumValue = 0; //_trackingSlider.formatStr = @"%@℃"; //[_trackingSlider setValue: [__wenDuStr intValue]]; [_trackingSlider showPopUpView]; [self.view addSubview:_trackingSlider]; UIImageView * ic_zhuanpan_bk = [[UIImageView alloc] initWithFrame:CGRectMake((SCREEN_WIDTH-306)/2, 64, 306, 292)]; ic_zhuanpan_bk.image = [UIImage imageNamed:@"ic_zhuanpan_bk"]; [self.view addSubview:ic_zhuanpan_bk]; //自定义起始角度、自定义小圆点、动画从上次数值开始 circle3 = [[ZZCircleProgress alloc] initWithFrame:CGRectMake((ic_zhuanpan_bk.frame.size.width-180)/2-2, 60, 182, 182) pathBackColor:RgbColor(239, 215, 216) pathFillColor:RgbColor(251,169, 171) startAngle:-235 strokeWidth:24]; circle3.reduceValue = 72; circle3.increaseFromLast = YES; circle3.pointImage = [UIImage imageNamed:@"test_point"]; circle3.progress = 0; circle3.showProgressText = NO; [ic_zhuanpan_bk addSubview:circle3]; [_trackingSlider setValue:circle3.progress*100]; ic_pointer = [[UIImageView alloc] initWithFrame:CGRectMake((ic_zhuanpan_bk.frame.size.width-50)/2, 91, 50, 111)]; ic_pointer.image = [UIImage imageNamed:@"ic_pointer"]; //添加指针 ic_pointer.layer.anchorPoint = CGPointMake(0.5, 0.78); //ic_pointer.center = CGPointMake((ic_zhuanpan_bk.frame.size.width-50)/2, 64); //ic_pointer.transform = CGAffineTransformMakeScale(1, 1); //设置指针到0位置 ic_pointer.layer.transform = CATransform3DMakeRotation([self transToRadian:-MAXOFFSETANGLE], 0, 0, 1); [ic_zhuanpan_bk addSubview:ic_pointer]; } /* * parseToAngle 根据数据计算需要转动的角度 * @val CGFloat 要移动到的数值 */ -(CGFloat) parseToAngle:(CGFloat) val { //异常的数据 if(valmaxNum) { return maxNum; } CGFloat temp =(val-gaugeValue)*angleperValue; return temp; } /* * setGaugeValue 移动到某个数值 * @value CGFloat 移动到的数值 * @isAnim BOOL 是否执行动画 */ -(void)setGaugeValue:(CGFloat)value animation:(BOOL)isAnim { CGFloat tempAngle = [self parseToAngle:value]; gaugeValue = value; //设置转动时间和转动动画 if(isAnim){ [self pointToAngle:tempAngle Duration:0.6f]; }else { [self pointToAngle:tempAngle Duration:0.0f]; } } /* * pointToAngle 按角度旋转 * @angel CGFloat 角度 * @duration CGFloat 动画执行时间 */ - (void) pointToAngle:(CGFloat) angle Duration:(CGFloat) duration { CAKeyframeAnimation *anim=[CAKeyframeAnimation animationWithKeyPath:@"transform"]; NSMutableArray *values=[NSMutableArray array]; anim.duration = duration; anim.autoreverses = NO; anim.fillMode = kCAFillModeForwards; anim.removedOnCompletion= NO; CGFloat distance = angle/10; //设置转动路径,不能直接用 CABaseAnimation 的toValue,那样是按最短路径的,转动超过180度时无法控制方向 int i = 1; for(;i<=10;i++) { [values addObject:[NSValue valueWithCATransform3D:CATransform3DRotate(CATransform3DIdentity, [self transToRadian:(gaugeAngle+distance*i)], 0, 0, 1)]]; } //添加缓动效果 [values addObject:[NSValue valueWithCATransform3D:CATransform3DRotate(CATransform3DIdentity, [self transToRadian:(gaugeAngle+distance*(i))], 0, 0, 1)]]; [values addObject:[NSValue valueWithCATransform3D:CATransform3DRotate(CATransform3DIdentity, [self transToRadian:(gaugeAngle+distance*(i-2))], 0, 0, 1)]]; [values addObject:[NSValue valueWithCATransform3D:CATransform3DRotate(CATransform3DIdentity, [self transToRadian:(gaugeAngle+distance*(i-1))], 0, 0, 1)]]; anim.values=values; ; [ic_pointer.layer addAnimation:anim forKey:@"cubeIn"]; gaugeAngle = gaugeAngle+angle; } /* * parseToX 角度转弧度 * @angel CGFloat 角度 */ -(CGFloat)transToRadian:(CGFloat)angel { return angel*M_PI/180; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #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