CorePlot 点线图的时候,缩放不超过 一定范围的功能实现
来源:互联网 发布:花生壳 80端口 编辑:程序博客网 时间:2024/05/21 14:52
在一个具体的项目中,Y轴 范围只能是 0-10 ,X轴范围只能是49-288.
图表需要支持缩放和移动。并且不能超过这个范围。
实现思路:
1. 设置X和Y轴的范围。
2.实现CPTPlotSpaceDelegate的委托中的
shouldScaleBy
shouldHandlePointingDeviceDraggedEvent
willChangePlotRangeTo
三个方法。3.其中最主要的实现方法是 willChangePlotRangeTo 来,判断将要缩放以后的 x,y轴的范围。如果范围在整个区域中间,则返回新的范围。如果超过 整体范围,则设置成最大范围。
代码主要有
1.实现代理
@interface Chart1ViewController : UIViewController <CPTPlotDataSource, CPTAxisDelegate,CPTPlotSpaceDelegate >
2. 设置x,y轴的最大范围
CPTPlotRange * xPlotRange; CPTPlotRange * yPlotRange;
CPTXYPlotSpace *plotSpace =(CPTXYPlotSpace *) graph.defaultPlotSpace;plotSpace.allowsUserInteraction= YES;[plotSpace setDelegate:self];// 设置x,y坐标范围plotSpace.xRange = xPlotRange;plotSpace.yRange = yPlotRange;
//放大缩小的时候调用-(CPTPlotRange *)plotSpace:(CPTPlotSpace *)space willChangePlotRangeTo:(CPTPlotRange *)newRange forCoordinate:(CPTCoordinate)coordinate{//限制缩放和移动的时候。不超过原始范围 if ( coordinate == CPTCoordinateX) { if ([ xPlotRange containsRange:newRange]) { //如果缩放范围在 原始范围内。则返回缩放范围 return newRange; }else if([newRange containsRange:xPlotRange]) { //如果缩放范围在原始范围外,则返回原始范围 return xPlotRange; } else{ //如果缩放和移动,导致新范围和元素范围向交叉。则要控制 左边或者右边超界的情况 NSDecimalNumber *myXPlotLocationNSDecimalNumber = [NSDecimalNumber decimalNumberWithDecimal:xPlotRange.location]; NSDecimalNumber *myXPlotLengthNSDecimalNumber = [NSDecimalNumber decimalNumberWithDecimal:xPlotRange.length]; NSDecimalNumber *myNewRangeLocationNSDecimalNumber = [NSDecimalNumber decimalNumberWithDecimal:newRange.location]; NSDecimalNumber *myNewRangeLengthNSDecimalNumber = [NSDecimalNumber decimalNumberWithDecimal:newRange.length]; NSLog(@"willChangePlotRangeTo newRange :%@\n xplotRange is %@",newRange,xPlotRange); if ( myXPlotLocationNSDecimalNumber.doubleValue >= myNewRangeLocationNSDecimalNumber.doubleValue) { //限制左边不超界 CPTPlotRange * returnPlot = [[CPTPlotRange alloc ] initWithLocation:xPlotRange.location length:newRange.length]; return returnPlot; } if ((myNewRangeLocationNSDecimalNumber.doubleValue + myNewRangeLengthNSDecimalNumber.doubleValue) > (myXPlotLengthNSDecimalNumber.doubleValue +myXPlotLocationNSDecimalNumber.doubleValue)) { double offset = (myNewRangeLocationNSDecimalNumber.doubleValue + myNewRangeLengthNSDecimalNumber.doubleValue) -(myXPlotLengthNSDecimalNumber.doubleValue+myXPlotLocationNSDecimalNumber.doubleValue); //限制右边不超界 CPTPlotRange * returnPlot = [[CPTPlotRange alloc ] initWithLocation:[NSDecimalNumber numberWithDouble:(myNewRangeLocationNSDecimalNumber.doubleValue - offset)].decimalValue length:newRange.length];// CPTPlotRange * returnPlot = [[CPTPlotRange alloc ] initWithLocation:newRange.location length:xPlotRange.length]; NSLog(@"右边超界,超界 %f", offset); NSLog(@"将要返回的 range 是:%@",returnPlot); return returnPlot; } } return newRange; }else{ return yPlotRange; }}
-(BOOL)plotSpace:(CPTPlotSpace *)space shouldScaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)interactionPoint{ return true;}-(BOOL) plotSpace:(CPTPlotSpace *)space shouldHandlePointingDeviceDraggedEvent:(UIEvent *)event atPoint:(CGPoint)point{ return YES;}
- CorePlot 点线图的时候,缩放不超过 一定范围的功能实现
- 计算 coreplot 触摸点的位置
- 关于CorePlot控制XY轴缩放的问题解决方案
- 生成一定范围的随机数
- 生成一定范围的随机数
- 产生一定范围的随机数
- 图片的缩放功能实现
- js使图片不超过一定范围,并且不改变比例
- 限定缩放范围的窗口
- 画面缩放时控制在一定范围
- CorePlot的安装
- CorePlot的使用方法简介
- Java取一定范围的随机数
- shell脚本产生一定范围的随机数
- JAVASE生成一定范围的随机数
- 产生一定范围随机数的通用表达式
- 生成一定范围的不重复随机数
- JS函数-返回一定范围的数组
- Android的Handler总结
- windows自动化
- 引用标签代码
- HDU 3008 动态规划(DP) Warcraft
- Android中程序与Service交互的方式——交互方式(五种方法)
- CorePlot 点线图的时候,缩放不超过 一定范围的功能实现
- 进程
- java各种包的用途
- 优先队列(UVAL-3135)
- fedora 16 ftp ntf配置
- windows下编译配置x264
- 对话框 QDialog
- Activity与Service通信的方式有三种:
- 《深度探索C++对象模型》(二)C++,new,delete,构造/析构,临时对象