IOS开发框架:Core Plot开源框架使用

移动开发 iOS
Core Plot已经提供了Mac标准安装器 CorePlotInstaller_0.2.2.zip , 你可以直接用安装器安装,可以很方便地把Core Plot直接以SDK的方式安装到本机。

IOS开发框架Core Plot开源框架使用是本文要介绍的内容,主要是来学习IOS开发框架的学习。iPhone下的图形框架并不是很多。其中比较知名的就两个s7graphview和Core Plot。巧的是两个都是Google的。前者使用简单,但功能单一,只能画曲线图。后者是开源项目,项目仍在不断更新中,用起来可就复杂多了,而且各个版本会有差异,包括属性、方法,甚至是类名都有改变。

关于Core Plot使用的中文网上资料,不是缺乏,而是根本没有。唯一的一篇介绍得比较详细的文章是“Using Core Plot in an iPhone Application”, 原文是英文的:http://www.switchonthecode.com/tutorials/using-core-plot-in-an-iphone-application 。但时间真的是太老了,居然是09年5月发表的,原文很多地方已经不再适用。因此我费了好大的劲,才把原文中的代码跑通了,不敢独享,与各位共享之。

一、下载安装Core Plot框架

原文介绍的是“源代码”版本。首先下载并安装Mercurial(很简单,在http://www.selenic.com/mercurial/wiki/ 有标准Mac安装包下载),再使用命令:

  1. hg clone http://core-plot.googlecode.com/hg/ core-plot 

即可把Core Plot项目源代码下载到指定目录core-plot下。

截至本文发表时止,Core Plot已经提供了Mac标准安装器 CorePlotInstaller_0.2.2.zip   , 你可以直接用安装器安装,可以很方便地把Core Plot直接以SDK的方式安装到本机。SDK的使用方法见后一篇博文《Core Plot SDK的用法》。

二、如何在项目中使用Core Plot

由于iOS 的限制,Core Plot以静态库的形式链接到iPhone应用。在core-plot/framework目录下存在CorePlot- CocoaTouch.xcodeproj文件,这就是一个静态库项目。关于静态库的使用,前一篇博文《封装自己的控件库:iPhone静态库的应用》已 经有介绍,使用方法都是一样的。

1、新建Windows-base Application项目。

2、使用Add->Existing Files…,把CorePlot-CocoaTouch.xcodeproj添加到新项目中。

3、把libCorePlot-CocoaTouch.a最右边的“add to target”小框勾上。

4、选择Target “info->General”,添加对项目CorePlot-CocoaTouch的依赖(引用)。

5、选择新项目的“info->Build”,在“Header Search Paths”中添加Core Plot头文件搜索路径,如: /Users/kmyhy/core-plot/framework。注意要选中“Recursive”小勾(英文原文中没有提这一点)。同时,在Other Linker Flags中要增加两个选项:-ObjC和-all_load(英文原文中遗漏了第2个选项)。

6、新建一个ViewController,如TestViewController。在本例中,我们勾选了“With Xib”选项。在英文原文中,要求在Interface Build中把xib的View对象由UIView改为CPLayerHostingView(其实应当是CPGraphHostingView)。但在这里,其实没有必要,只需在源代码中修改就可以了。

7、.h文件:

  1. #import <UIKit/UIKit.h> 
  2. #import "CorePlot-CocoaTouch.h"  
  3. @interface TestViewController : UIViewController <CPPlotDataSource>{  
  4. CPXYGraph * graph ;  
  5. }  
  6. @end 

8、.m文件:

  1. #import "TestViewController.h"  
  2. @implementation TestViewController  
  3. -( NSUInteger )numberOfRecordsForPlot:( CPPlot *)plot {  
  4. return 51 ;  
  5. }  
  6. -( NSNumber *)numberForPlot:( CPPlot *)plot field:( NSUInteger )fieldEnum recordIndex:( NSUInteger )index {  
  7. double val = (index/ 5.0 )- 5 ;  
  8. if (fieldEnum == CPScatterPlotFieldX )  
  9. { return [ NSNumber numberWithDouble :val]; }  
  10. else  
  11. {  
  12. if (plot. identifier == @"X Squared Plot" )  
  13. { return [ NSNumber numberWithDouble :val*val]; }  
  14. else  
  15. { return [ NSNumber numberWithDouble : 1 /val]; }  
  16. }  
  17. }  
  18.  
  19. - ( void )viewDidLoad {  
  20.     //[super viewDidLoad];  
  21. graph = [[ CPXYGraph alloc ] initWithFrame : self . view . bounds ];  
  22.  
  23. // 原来的 CPLayerHostingView 由 CPGraphHostingView 所代替  
  24. self . view = [[ CPGraphHostingView alloc ] initWithFrame :[ UIScreen mainScreen ]. bounds ];  
  25.  
  26. CPGraphHostingView *hostingView = ( CPGraphHostingView *) self . view ;  
  27. hostingView. hostedGraph = graph ;  
  28. graph . paddingLeft = 20.0 ;  
  29. graph . paddingTop = 20.0 ;  
  30. graph . paddingRight = 20.0 ;  
  31. graph . paddingBottom = 20.0 ;  
  32.  
  33. CPXYPlotSpace *plotSpace = ( CPXYPlotSpace *) graph . defaultPlotSpace ;  
  34. plotSpace. xRange = [ CPPlotRange plotRangeWithLocation : CPDecimalFromFloat (- 6 )  
  35.    length : CPDecimalFromFloat ( 12 )];  
  36. plotSpace. yRange = [ CPPlotRange plotRangeWithLocation : CPDecimalFromFloat (- 5 )  
  37.    length : CPDecimalFromFloat ( 30 )];  
  38. CPLineStyle *lineStyle = [ CPLineStyle lineStyle ];  
  39.  
  40. //CPLineStyle 的 lineColor 和 lineWidth 已经变为只读属性  
  41. // lineStyle.lineColor = [CPColor blackColor];  
  42. // lineStyle.lineWidth = 2.0f;  
  43.  
  44. CPXYAxisSet *axisSet = ( CPXYAxisSet *) graph . axisSet ;  
  45.  
  46. //majorIntervalLength 的类型由 NSDecimalNumber 改变为 NSDecimal  
  47. axisSet. xAxis . majorIntervalLength = [[ NSDecimalNumber decimalNumberWithString : @"5" ] decimalValue ];  
  48. axisSet. xAxis . minorTicksPerInterval = 4 ;  
  49. axisSet. xAxis . majorTickLineStyle = lineStyle;  
  50. axisSet. xAxis . minorTickLineStyle = lineStyle;  
  51. axisSet. xAxis . axisLineStyle = lineStyle;  
  52. axisSet. xAxis . minorTickLength = 5.0f ;  
  53. axisSet. xAxis . majorTickLength = 7.0f ;  
  54.  
  55. //axisLableOffset 属性由 labelOffset 所代替  
  56. axisSet. xAxis . labelOffset = 3.0f ;  
  57. //      axisSet.xAxis.axisLabelOffset = 3.0f;  
  58.  
  59. axisSet. yAxis . majorIntervalLength = [[ NSDecimalNumber decimalNumberWithString : @"5" ] decimalValue ];  
  60. axisSet. yAxis . minorTicksPerInterval = 4 ;  
  61. axisSet. yAxis . majorTickLineStyle = lineStyle;  
  62. axisSet. yAxis . minorTickLineStyle = lineStyle;  
  63. axisSet. yAxis . axisLineStyle = lineStyle;  
  64. axisSet. yAxis . minorTickLength = 5.0f ;  
  65. axisSet. yAxis . majorTickLength = 7.0f ;  
  66.  
  67. //axisLableOffset 属性由 labelOffset 所代替  
  68. axisSet. yAxis . labelOffset = 3.0f ;  
  69. //      axisSet.yAxis.axisLabelOffset = 3.0f;  
  70.  
  71. //CPPlotSpace 的 bounds 属性不再有效  
  72. CPScatterPlot *xSquaredPlot = [[[ CPScatterPlot alloc ]  
  73.    initWithFrame : self . view . bounds ] autorelease ];  
  74. //initWithFrame:graph.defaultPlotSpace.bounds] autorelease];  
  75. xSquaredPlot. identifier = @"X Squared Plot" ;  
  76.  
  77. //CPLineStyle 的 lineColor 和 lineWidth 已经变为只读属性  
  78. // xSquaredPlot.dataLineStyle.lineWidth = 1.0f;  
  79. // xSquaredPlot.dataLineStyle.lineColor = [CPColor redColor];  
  80. xSquaredPlot. dataSource = self ;  
  81. [ graph addPlot :xSquaredPlot];  
  82.  
  83. CPPlotSymbol *greenCirclePlotSymbol = [ CPPlotSymbol ellipsePlotSymbol ];  
  84. greenCirclePlotSymbol. fill = [ CPFill fillWithColor :[ CPColor greenColor ]];  
  85. greenCirclePlotSymbol. size = CGSizeMake ( 2.0 , 2.0 );  
  86. xSquaredPlot. plotSymbol = greenCirclePlotSymbol;   
  87.  
  88. //CPPlotSpace 的 bounds 属性不再有效  
  89. CPScatterPlot *xInversePlot = [[[ CPScatterPlot alloc ]  
  90.    initWithFrame : self . view . bounds ] autorelease ];  
  91. //initWithFrame:graph.defaultPlotSpace.bounds] autorelease];  
  92. xInversePlot. identifier = @"X Inverse Plot" ;  
  93. //CPLineStyle 的 lineColor 和 lineWidth 已经变为只读属性  
  94. // xInversePlot.dataLineStyle.lineWidth = 1.0f;  
  95. // xInversePlot.dataLineStyle.lineColor = [CPColor blueColor];  
  96. xInversePlot. dataSource = self ;  
  97. [ graph addPlot :xInversePlot];  
  98. }    
  99. - ( void )dealloc {  
  100.     [ super dealloc ];  
  101. }   
  102. @end 

仔细查看代码,你会发现原文中的代码被我做了一些修改和调整。

附一张Core Plot框架的类层次图,便于理解代码中各个对象的使用:

注意,右边各个类的颜色和左边各个层次的颜色是对应的,如图所示:

IOS开发框架:Core Plot开源框架使用

小结:IOS开发框架Core Plot开源框架使用的内容介绍完了,希望通过本文的学习能对你有所帮助!

责任编辑:zhaolei 来源: 论坛
相关推荐

2011-08-18 11:19:13

IOS开发Core Plot S

2013-07-24 18:22:02

iOS开发学习iOS开源框架和类

2019-03-01 08:57:47

iOScoobjc协程

2016-03-18 09:36:13

ios基础框架

2011-08-19 13:51:12

2019-09-02 14:51:33

2014-04-21 15:53:59

iOS开源项目CocoaLumber

2011-06-15 16:11:51

UIKitCocoa TouchiOS

2009-07-03 16:05:06

JSP开发框架

2012-05-21 21:34:51

iOS

2009-06-19 10:09:00

J2EE开发框架

2015-06-24 10:17:24

UI流式布局

2018-05-03 19:14:23

iOS开发框架API

2023-11-16 08:34:23

.NETORM框架

2010-08-11 13:17:07

Flex框架

2012-10-08 12:59:01

iOS 6.0开发框架功能更新

2011-04-21 10:59:44

SimpleFrameWeb

2010-08-05 14:03:32

Flex框架

2014-07-10 10:02:01

iOSHome Kit框架

2024-05-06 08:44:25

FrugalGPT大型语言模型LLM
点赞
收藏

51CTO技术栈公众号