// // HJOneDimStatisViewController.m // mehr // // Created by 阳君 on 14-5-26. // Copyright (c) 2014年 Hjsj. All rights reserved. // #import "HJOneDimStatisViewController.h" #import "HJSetStatisOptionsTableViewController.h" #import "SVProgressHUD.h" #import "HJTools.h" #import "HJEmpQueryViewController.h" /** 4:初始化*/ NSString *const tInitOneDimStatis = @"4"; // cacheKey /** 主key*/ NSString *const cOneDimStatis = @"cOneDimStatis"; /** 显示的统计图*/ NSString *const cOneDimStatisCorePlot = @"cOneDimStatisCorePlot"; NSString *const kOneDimStatisName = @"name"; NSString *const kOneDimStatisValue = @"value"; @interface HJOneDimStatisViewController () { @private /** 数据源*/ NSMutableArray *_dataArray; /** 总数*/ NSString *_sum; /** 标题*/ NSString *_titleOneDim; /** 屏幕高_height;宽:_width*/ CGFloat _width, _height; /** 饼图的画板*/ CPTGraphHostingView *_pieHostingView; /** 饼图*/ CPTPieChart *_piePlot; /** CPTPieChart的半径,默认100*/ CGFloat _pieRadius; /** CPTPieChart的旋转角度,默认0.0*/ CGFloat _startAngle; } @end @implementation HJOneDimStatisViewController #pragma mark 外部传参 - (void)setTitle:(NSString *)title dim:(NSString *)dim condId:(NSString *)condId infokind:(NSString *)infokind cacheDict:(NSMutableDictionary *)cacheDict { _titleOneDim = title; self.dim = dim; self.condId = condId; self.infokind = infokind; self.cacheDictionary = cacheDict; } -(void)dealloc { NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObject:[NSString stringWithFormat:@"%i", self.plotStyle] forKey:cOneDimStatisCorePlot]; // 放入数据 [self.cacheDictionary setObject:dict forKey:cOneDimStatis]; } - (void)viewDidLoad { [super viewDidLoad]; _width = self.view.bounds.size.width; _height = self.view.bounds.size.height; _pieRadius = 100; _startAngle = 0.0; // 设置查询 UIBarButtonItem *optionsButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"ic_button_search_options"] style:UIBarButtonItemStylePlain target:self action:@selector(onClick:)]; optionsButton.tag = 0; //统计图类型 UIBarButtonItem *labelsButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"ic_button_labels"] style:UIBarButtonItemStylePlain target:self action:@selector(onClick:)]; labelsButton.tag = 1; self.navigationItem.rightBarButtonItems = @[optionsButton, labelsButton]; // 参数设置 NSMutableDictionary *dict = [self.cacheDictionary objectForKey:cOneDimStatis]; if (dict) { self.plotStyle = [[dict objectForKey:cOneDimStatisCorePlot] integerValue]; } else { self.plotStyle = 0; } [self reloadChart]; // 初始化数据 [self initData]; } #pragma mark 点击按钮 - (void)onClick:(UIBarButtonItem *)button { switch (button.tag) { case 0:// 设置查询 [self performSegueWithIdentifier:@"one_to_options" sender:self]; break; case 1: { UIActionSheet *actionSheet = [[UIActionSheet alloc] init]; actionSheet.title = NSLocalizedString(@"statis_one_dim_type", @"统计图类型"); actionSheet.delegate = self; // actionSheet = [actionSheet initWithTitle:NSLocalizedString(@"statis_one_dim_type", @"统计图类型") delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; // 添加按钮 [actionSheet addButtonWithTitle:NSLocalizedString(@"statis_one_dim_bar", @"直方图")]; [actionSheet addButtonWithTitle:NSLocalizedString(@"statis_one_dim_pie", @"圆饼图")]; [actionSheet addButtonWithTitle:NSLocalizedString(@"statis_one_dim_scatter", @"折线图")]; // 添加取消按钮 [actionSheet addButtonWithTitle:NSLocalizedString(@"cancel", nil)]; actionSheet.cancelButtonIndex = actionSheet.numberOfButtons - 1; actionSheet.actionSheetStyle = UIActionSheetStyleDefault; [actionSheet showInView:self.view.window]; break; } } } #pragma mark - UIActionSheetDelegate - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == 3) return; self.plotStyle = buttonIndex; [self reloadChart]; } #pragma mark - Navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // 设置查询 if ([segue.destinationViewController isKindOfClass:[HJSetStatisOptionsTableViewController class]]) { HJSetStatisOptionsTableViewController *vc = segue.destinationViewController; // 传入数据 [vc setTarget:self cacheDict:self.cacheDictionary]; } } #pragma mark - 初始化数据 - (void)initData { // 初始化 HJTask *task = [[HJTask alloc] initWithFuncId:@"9102006001"]; [task addParamter:@"transType" obj:tInitOneDimStatis]; [task addParamter:@"condid" obj:self.condId]; [task addParamter:@"dim" obj:self.dim]; [task addParamter:@"infokind" obj:self.infokind]; // 增加设置范围的参数 [HJSetStatisOptionsTableViewController addTaskParamter:task cacheDict:self.cacheDictionary]; [task sendRequestWithDelegate:self]; } #pragma mark HJTaskRunnerDelegate -(void)execute:(NSMutableDictionary *)values { NSString *succeed = [values objectForKey:@"succeed"]; if ([@"true" isEqualToString:succeed]) { _dataArray = [values objectForKey:@"oneList"]; if (_dataArray.count > 0) { NSDictionary *item = [_dataArray objectAtIndex:_dataArray.count - 1]; _sum = [item objectForKey:@"sum"]; self.title = [NSString stringWithFormat:@"%@(%@)", _titleOneDim, _sum]; [_dataArray removeLastObject]; } [self reloadChart]; } else { NSString *message = [values valueForKey:@"message"]; if (message) { [SVProgressHUD showErrorWithStatus:message]; } else { [HJTools showErrorMessageBox:1005];//提示远程服务出错啦 } } } - (void)passvalue:(NSMutableDictionary *)values { [self initData]; } #pragma mark - UIGestureRecognizerDelegate - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { // 返回yes,多个手势同时工作 return YES; } #pragma mark 图形捏合 - (void)handlePinch:(UIPinchGestureRecognizer *)recognizer { _piePlot.pieRadius = _pieRadius * recognizer.scale; // 缩放完毕,记住新的半径大小 if (recognizer.state == UIGestureRecognizerStateEnded) { _pieRadius = _piePlot.pieRadius; } } #pragma mark 图形旋转 - (void)handleRotation:(UIRotationGestureRecognizer *)recognizer { _piePlot.startAngle = _startAngle - recognizer.rotation; // 旋转完毕,记住新的旋转角度 if (recognizer.state == UIGestureRecognizerStateEnded) { _startAngle = _piePlot.startAngle; } } #pragma mark 图形移动 - (void)handlePan:(UIPanGestureRecognizer *)recognizer { // 取点 CGPoint translatedPoint = [recognizer translationInView:_pieHostingView]; // 计算 CGFloat x = recognizer.view.center.x + translatedPoint.x; CGFloat y = recognizer.view.center.y + translatedPoint.y; // 移动范围 x = x < 0 ? 0 : x; y = y < 0 ? 0 : y; x = x > _width ? _width : x; y = y > _height ? _height : y; // 移动 recognizer.view.center = CGPointMake(x, y); // 回归中心点 [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; } #pragma mark - 刷新视图 - (void)reloadChart { // 清楚上个视图 CPTGraphHostingView *cptHostingView = (CPTGraphHostingView *)[self.view viewWithTag:888]; [cptHostingView removeFromSuperview]; // 刷新 switch (self.plotStyle) { case HJOneDimStatisPlotStyleBar://直方图 [self reloadBarChart]; break; case HJOneDimStatisPlotStylePie:// 圆饼图 [self reloadPieChart]; break; case HJOneDimStatisPlotStyleScatter:// 折线图 [self reloadScatterChart]; break; } } #pragma mark 刷新柱状图 - (void)reloadBarChart { // 创建画板 CPTGraphHostingView *cptHostingView = [[CPTGraphHostingView alloc] initWithFrame:CGRectMake(0, 0,_width, _height - 50)]; cptHostingView.tag = 888; [self.view addSubview:cptHostingView]; // 画布 CPTXYGraph *graph=[[CPTXYGraph alloc] initWithFrame:cptHostingView.bounds]; graph.plotAreaFrame.masksToBorder = NO; cptHostingView.hostedGraph = graph; // 界面样式 [graph applyTheme:[CPTTheme themeNamed:kCPTPlainWhiteTheme]]; // graph在hostingView中的偏移 graph.paddingBottom = 60; graph.paddingLeft = 40; graph.paddingRight = 5; graph.paddingTop = 5; graph.plotAreaFrame.borderLineStyle = nil; graph.plotAreaFrame.cornerRadius = 0.0f;// hide frame /** // 绘图区4边留白 graph.plotAreaFrame.paddingTop = 5; graph.plotAreaFrame.paddingRight = 5; graph.plotAreaFrame.paddingLeft = 20; graph.plotAreaFrame.paddingBottom = 5; */ // 设置间隔 CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace; plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInteger(0) length:CPTDecimalFromInteger(_dataArray.count + 1)]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInteger(0) length:CPTDecimalFromInteger([_sum integerValue] / 3 * 2)]; // 放大缩小滚动 plotSpace.allowsUserInteraction = YES; // 线条样式 CPTMutableLineStyle *lineStyle = [[CPTMutableLineStyle alloc] init]; lineStyle.lineColor = [CPTColor blackColor]; lineStyle.lineWidth = 1.0; // 设置x、y轴 CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet; // xAxis CPTXYAxis *xAxis = axisSet.xAxis; { xAxis.axisLineStyle = lineStyle; xAxis.labelingPolicy = CPTAxisLabelingPolicyNone; xAxis.majorTickLineStyle = lineStyle; //X轴大刻度线,线型设置 xAxis.majorTickLength = 5; // 刻度线的长度 xAxis.majorIntervalLength = CPTDecimalFromInt(1); // 间隔单位,和xMin~xMax对应 // 小刻度线minor... xAxis.minorTickLineStyle = nil; xAxis.orthogonalCoordinateDecimal = CPTDecimalFromInt(0); // 设置X轴label NSMutableArray *labelArray = [NSMutableArray arrayWithCapacity:7]; // 当显示的个数大于大于4时,倾斜 BOOL rotationlable = _dataArray.count >= 4 ? YES : NO; NSDictionary *item; NSString *xTitle = @"";; NSString *maxTitle = @""; for (int i = 0; i < _dataArray.count; i++) { item = [_dataArray objectAtIndex:i]; xTitle = [item objectForKey:kOneDimStatisName]; CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithText:xTitle textStyle:xAxis.labelTextStyle]; newLabel.tickLocation = [[NSNumber numberWithInt:i + 1] decimalValue]; newLabel.offset = xAxis.labelOffset + xAxis.majorTickLength; // 倾斜 if (rotationlable) { // 取30度角度 newLabel.rotation = M_PI/6; NSLog(@"-----------%f", newLabel.offset); maxTitle = maxTitle.length > xTitle.length ? maxTitle : xTitle; } [labelArray addObject:newLabel]; } // 加上这两句才能显示label xAxis.axisConstraints =[CPTConstraints constraintWithLowerOffset:0.0]; // 显示的标题 xAxis.axisLabels=[NSSet setWithArray:labelArray]; // 倾斜 if (rotationlable) { CGSize textSize = [maxTitle sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(320, 30) lineBreakMode:NSLineBreakByCharWrapping]; NSInteger height = (int)textSize.width / 2 + 20; CGRect frame = cptHostingView.frame; frame.size = CGSizeMake(_width, _height - height); cptHostingView.frame = frame; } } // yAxis CPTXYAxis *yAxis = axisSet.yAxis; { yAxis.axisLineStyle = lineStyle; yAxis.minorTickLineStyle = nil; // 不显示小刻度线 yAxis.labelingPolicy = CPTAxisLabelingPolicyAutomatic; // 显示y轴 yAxis.axisConstraints = [CPTConstraints constraintWithLowerOffset:0]; // y轴字体大小 yAxis.labelOffset = 10; // 将y轴显示的0.0变为0 NSNumberFormatter *labelFormatter = [[NSNumberFormatter alloc] init]; labelFormatter.maximumFractionDigits = 0; yAxis.labelFormatter = labelFormatter; } // set up the plots CPTBarPlot *barPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor redColor] horizontalBars:NO]; barPlot.dataSource = self; // 如果不需要柱状图的选择,这条语句是没必要的 barPlot.delegate = self; // 设定基值,大于该值的从此点向上画,小于该值的反向绘制,即向下画 barPlot.baseValue = CPTDecimalFromInt(0); // 设定柱图的宽度(0.0~1.0) barPlot.barWidth =CPTDecimalFromDouble(0.5); // 柱图每个柱子开始绘制的偏移位置,我们让它绘制在刻度线中间,所以不偏移 barPlot.barOffset = CPTDecimalFromDouble(-0.0); barPlot.lineStyle = lineStyle; // 将plot添加到默认的空间中 [graph addPlot:barPlot toPlotSpace:graph.defaultPlotSpace]; } #pragma mark 刷新饼图 - (void)reloadPieChart { // 创建画板 _pieHostingView = [[CPTGraphHostingView alloc] initWithFrame:CGRectMake(-100, -15, _width + 200, _height + 30)]; _pieHostingView.tag = 888; [self.view addSubview:_pieHostingView]; // 创建画布 CPTXYGraph *graph = [[CPTXYGraph alloc ] initWithFrame:self.view.bounds]; // 设置画板的画布 _pieHostingView.hostedGraph = graph; // 设置画布主题 CPTTheme *theme = [CPTTheme themeNamed:kCPTPlainWhiteTheme]; [graph applyTheme :theme]; // 将画布的坐标轴设为空 graph.axisSet = nil; // 创建饼图对象 _piePlot = [[ CPTPieChart alloc ] initWithFrame:CGRectMake(0, 0, _width, _height)]; // 将饼图加到画布上 [graph addPlot:_piePlot]; // 设置数据源 _piePlot.dataSource = self; // 设置饼图半径 _piePlot.pieRadius = _pieRadius; // 设置饼图表示符 _piePlot.identifier = @"pie chart"; // 饼图开始绘制的位置 _piePlot.startAngle = _startAngle; // 饼图绘制的方向(顺时针 / 逆时针) _piePlot.sliceDirection = CPTPieDirectionCounterClockwise; // 饼图的重心 _piePlot.centerAnchor = CGPointMake(0.5, 0.5); // 饼图的线条风格 // piePlot.borderLineStyle = [CPTLineStyle lineStyle]; // 设置代理 _piePlot.delegate = self ; // 渐变效果 CPTGradient *overlayGradient = [[CPTGradient alloc] init]; overlayGradient.gradientType = CPTGradientTypeRadial; overlayGradient = [overlayGradient addColorStop:[[CPTColor blackColor] colorWithAlphaComponent:0.0] atPosition:0.9]; overlayGradient = [overlayGradient addColorStop:[[CPTColor blackColor] colorWithAlphaComponent:0.4] atPosition:1.0]; _piePlot.overlayFill = [CPTFill fillWithGradient:overlayGradient]; // 手势操作 // 移动 UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; [_pieHostingView addGestureRecognizer:panRecognizer]; // 缩放 UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)]; pinchRecognizer.delegate = self; [_pieHostingView addGestureRecognizer:pinchRecognizer]; // 旋转 UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotation:)]; rotationRecognizer.delegate = self; [_pieHostingView addGestureRecognizer:rotationRecognizer]; } #pragma mark 折线图 - (void)reloadScatterChart { // 设置画板边框大小 CPTGraphHostingView *cptHostingView = [[CPTGraphHostingView alloc] initWithFrame:CGRectMake(0, 0,_width, _height - 50)]; cptHostingView.tag = 888; [self.view addSubview:cptHostingView]; // 画布 CPTXYGraph *graph=[[CPTXYGraph alloc] initWithFrame:cptHostingView.bounds]; graph.plotAreaFrame.masksToBorder = NO; cptHostingView.hostedGraph = graph; // 界面样式 [graph applyTheme:[CPTTheme themeNamed:kCPTPlainWhiteTheme]]; // graph在hostingView中的偏移 graph.paddingBottom = 60; graph.paddingLeft = 40; graph.paddingRight = 5; graph.paddingTop = 5; graph.plotAreaFrame.borderLineStyle = nil; graph.plotAreaFrame.cornerRadius = 0.0f;// hide frame /** // 绘图区4边留白 graph.plotAreaFrame.paddingTop = 5; graph.plotAreaFrame.paddingRight = 5; graph.plotAreaFrame.paddingLeft = 20; graph.plotAreaFrame.paddingBottom = 5; */ // 设置间隔 CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace; plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInteger(0) length:CPTDecimalFromInteger(_dataArray.count + 1)]; plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInteger(0) length:CPTDecimalFromInteger([_sum integerValue] / 3 * 2)]; // 放大缩小滚动 plotSpace.allowsUserInteraction = YES; // 线条样式 CPTMutableLineStyle *lineStyle = [[CPTMutableLineStyle alloc] init]; lineStyle.lineColor = [CPTColor blackColor]; lineStyle.lineWidth = 1.0; // 设置x、y轴 CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet; // xAxis CPTXYAxis *xAxis = axisSet.xAxis; { xAxis.axisLineStyle = lineStyle; xAxis.labelingPolicy = CPTAxisLabelingPolicyNone; xAxis.majorTickLineStyle = lineStyle; //X轴大刻度线,线型设置 xAxis.majorTickLength = 5; // 刻度线的长度 xAxis.majorIntervalLength = CPTDecimalFromInt(1); // 间隔单位,和xMin~xMax对应 // 小刻度线minor... xAxis.minorTickLineStyle = nil; xAxis.orthogonalCoordinateDecimal = CPTDecimalFromInt(0); // 设置X轴label NSMutableArray *labelArray = [NSMutableArray arrayWithCapacity:7]; // 当显示的个数大于大于4时,倾斜 BOOL rotationlable = _dataArray.count >= 4 ? YES : NO; NSDictionary *item; NSString *xTitle = @"";; NSString *maxTitle = @""; for (int i = 0; i < _dataArray.count; i++) { item = [_dataArray objectAtIndex:i]; xTitle = [item objectForKey:kOneDimStatisName]; CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithText:xTitle textStyle:xAxis.labelTextStyle]; newLabel.tickLocation = [[NSNumber numberWithInt:i + 1] decimalValue]; newLabel.offset = xAxis.labelOffset + xAxis.majorTickLength; // 倾斜 if (rotationlable) { // 取30度角度 newLabel.rotation = M_PI/6; maxTitle = maxTitle.length > xTitle.length ? maxTitle : xTitle; } [labelArray addObject:newLabel]; } // 加上这两句才能显示label xAxis.axisConstraints =[CPTConstraints constraintWithLowerOffset:0.0]; // 显示的标题 xAxis.axisLabels=[NSSet setWithArray:labelArray]; // 倾斜 if (rotationlable) { CGSize textSize = [maxTitle sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(320, 30) lineBreakMode:NSLineBreakByCharWrapping]; NSInteger height = (int)textSize.width / 2 + 20; CGRect frame = cptHostingView.frame; frame.size = CGSizeMake(_width, _height - height); cptHostingView.frame = frame; } } // yAxis CPTXYAxis *yAxis = axisSet.yAxis; { yAxis.axisLineStyle = lineStyle; yAxis.minorTickLineStyle = nil; // 不显示小刻度线 yAxis.labelingPolicy = CPTAxisLabelingPolicyAutomatic; // 显示y轴 yAxis.axisConstraints = [CPTConstraints constraintWithLowerOffset:0]; // y轴字体大小 yAxis.labelOffset = 10; // 将y轴显示的0.0变为0 NSNumberFormatter *labelFormatter = [[NSNumberFormatter alloc] init]; labelFormatter.maximumFractionDigits = 0; yAxis.labelFormatter = labelFormatter; } // Set axes graph.axisSet.axes = [NSArray arrayWithObjects:xAxis, yAxis, nil]; // Create a plot that uses the data source method CPTScatterPlot *scatterPlot = [[CPTScatterPlot alloc] init]; scatterPlot.identifier = @"Data Source Plot"; scatterPlot.dataSource = self; scatterPlot.delegate = self; [graph addPlot:scatterPlot]; // Set plot delegate, to know when symbols have been touched // We will display an annotation when a symbol is touched scatterPlot.plotSymbolMarginForHitDetection = 5.0; // 绿色的连线 CPTMutableLineStyle *connectLineStyle = [scatterPlot.dataLineStyle mutableCopy]; connectLineStyle.lineWidth = 3.0; connectLineStyle.lineColor = [CPTColor greenColor]; scatterPlot.dataLineStyle = connectLineStyle; // 折线点 CPTMutableLineStyle *symbolLineStyle = [CPTMutableLineStyle lineStyle]; symbolLineStyle.lineColor = [CPTColor blackColor]; CPTPlotSymbol *plotSymbol = [CPTPlotSymbol ellipsePlotSymbol]; plotSymbol.fill = [CPTFill fillWithColor:[CPTColor blueColor]]; plotSymbol.lineStyle = symbolLineStyle; plotSymbol.size = CGSizeMake(10.0, 10.0); scatterPlot.plotSymbol = plotSymbol; // 全画布显示 // [plotSpace scaleToFitPlots:[NSArray arrayWithObjects:dataSourceLinePlot, nil]]; } #pragma mark - CPTPlotDataSource #pragma mark 返回数目 - ( NSUInteger )numberOfRecordsForPlot:( CPTPlot *)plot { return _dataArray.count; } #pragma mark 标题 - (NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index { NSNumber *num; NSDictionary *item = [_dataArray objectAtIndex:index]; switch (self.plotStyle) { case HJOneDimStatisPlotStyleBar://直方图 case HJOneDimStatisPlotStyleScatter:// 折线图 { switch ( fieldEnum ) { case CPTBarPlotFieldBarLocation:// X轴上的数值表示 num = [NSNumber numberWithInt:index + 1]; break; case CPTBarPlotFieldBarTip:// y轴上的数值表示 num = [NSDecimalNumber numberWithInt:[[item objectForKey:kOneDimStatisValue] intValue]]; break; } break; } case HJOneDimStatisPlotStylePie:// 圆饼图 { float result = [[item objectForKey:kOneDimStatisValue] floatValue] / [_sum floatValue]; num = [NSNumber numberWithFloat:result]; break; } } return num; } #pragma mark 返回每个扇形的标题 - ( CPTLayer *)dataLabelForPlot:( CPTPlot *)plot recordIndex:( NSUInteger )idx { // 描述 NSDictionary *item = [_dataArray objectAtIndex:idx]; NSString *textStr; switch (self.plotStyle) { case HJOneDimStatisPlotStylePie: { float result = [[item objectForKey:kOneDimStatisValue] floatValue] / [_sum floatValue]; textStr = [NSString stringWithFormat:@"%@\n(%.2f,值:%@)", [item objectForKey:kOneDimStatisName], result, [item objectForKey:kOneDimStatisValue]]; break; } default: textStr = [item objectForKey:kOneDimStatisValue]; break; } // 字体样式 static CPTMutableTextStyle *text; if ( !text ) { text = [[CPTMutableTextStyle alloc] init]; //text.color = [CPTColor darkGrayColor]; text.textAlignment = NSTextAlignmentCenter; text.fontSize = 12; } // 标题 CPTTextLayer *newLayer = [[CPTTextLayer alloc] initWithText:textStr style:text]; return newLayer; } #pragma mark - CPTPieChartDelegate 选中某个扇形时的操作 - (void)pieChart:(CPTPieChart *)plot sliceWasSelectedAtRecordIndex:(NSUInteger)idx { [self jumpToEmpWithSelectedAtRecordIndex:idx]; } #pragma mark - CPTBarPlotDelegate 点击bar - (void)barPlot:(CPTBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)idx { [self jumpToEmpWithSelectedAtRecordIndex:idx]; } #pragma mark - CPTBarPlotDataSource bar的颜色 -(CPTFill *)barFillForBarPlot:(CPTBarPlot *)barPlot recordIndex:(NSUInteger)index { NSArray *array = [NSArray arrayWithObjects:[CPTColor redColor], [CPTColor orangeColor], [CPTColor yellowColor], [CPTColor greenColor], [CPTColor blueColor], [CPTColor cyanColor], [CPTColor purpleColor], nil]; // index = index % array.count; CPTColor *color = [array objectAtIndex:index]; CPTGradient *fillGradient = [CPTGradient gradientWithBeginningColor:color endingColor:[CPTColor blackColor]]; return [CPTFill fillWithGradient:fillGradient]; } #pragma mark - CPTBarPlotDelegate 点击scatter - (void)scatterPlot:(CPTScatterPlot *)plot plotSymbolWasSelectedAtRecordIndex:(NSUInteger)idx { [self jumpToEmpWithSelectedAtRecordIndex:idx]; } #pragma mark - 跳转 - (void)jumpToEmpWithSelectedAtRecordIndex:(NSUInteger)index { NSDictionary *item = [_dataArray objectAtIndex:index]; //新的进入 NSMutableDictionary *taskDictionary = [NSMutableDictionary dictionaryWithCapacity:3]; [taskDictionary setObject:self.dim forKey:@"statisDim"]; [taskDictionary setObject:[item objectForKey:@"id"] forKey:@"statisSLegendID"]; [taskDictionary setObject:self.infokind forKey:@"statisInfokind"]; [taskDictionary setObject:@"statis" forKey:@"querytype"]; [HJSetStatisOptionsTableViewController addJumpToEmpDictionary:taskDictionary cacheDict:self.cacheDictionary]; HJEmpQueryViewController *emp = [HJEmpQueryViewController empQueryViewControllerWithTitle:[item objectForKey:@"name"] taskDictionary:taskDictionary viewStyle:HJEmpQueryStyleDefault]; emp.viewStyle = HJEmpQueryStyleOther; [self.navigationController pushViewController:emp animated:YES]; } @end