做ios开发快两个月了 从基本的语法开始学起看看这个学学那个的。一开始对delegate controller view各种头大,就老老实实地跟着入门教程一步步的来。所幸之前做了一年多的java开发,熟悉了eclipse的界面和Deja的字体,换到mac下面用xcode也觉得很新鲜。
感觉做ios开发这一块对内存管理要求还是不低的,因为之前做java,对这一块基本不怎么关心,突然转到ios上的时候在内存管理上还是犯过几次错误的。开始学习的时候看书上说谁创建谁释放,就简单的以为但凡创建出来的对象都要显式地去release,后来果然出过一次诡异的错误,修正之后对内存管理就更加用心地去学习了,这一块有时间后面再讨论,现在先把这几天对coreplot的使用记录一下,以备后用。
公司的需求是对数据解析进行折线图绘制,并且用户可以通过触摸调整数据点通过公式计算使折线图重新绘制。数据与公式都是服务器端获取的并且是打包成了一个json的字符串。这里面还牵扯到了字符串解析成公式的问题。上网搜了下,oc下并没有很好的解决方案,像这样做的话似乎只能自己写方法,让我想起了上学时候学编译原理写过的语法树,满满的都是泪啊~妥妥的能不写就不写。后来公司大牛说有js引擎可以拿过来用,因为公司这边也有做网页端的折线图绘制,在js下公式转换异常简单
var fun=new fun(str);
fun();
如上所示,两行代码就把str代表的字符串公式解析并计算一遍了,实在是太无解了,妥妥必须使用,这个东西下篇文章再讲吧。
图像绘制的话google出来ios上比较常用的是CorePlot和PowerPlot,看了下两者的用法,感觉CorePlot会使用更多的代理之类的东西,感觉比较符合苹果的编码思路,就选了它来用了。
首先是下载coreplot库,把.a文件和头文件引入,这里就不赘述了。
先在头文件里定义几个后面要用到的量
//转换坐标系字典,与手指触摸点匹配
@property (nonatomic,retain) NSMutableDictionary *reverseDic;
//js引擎上下文
@property (nonatomic) JSGlobalContextRef context;
//绘图view
@property (nonatomic,retain) CPTGraphHostingView *hostView;
//坐标转换方法,实际坐标转化相对坐标
- (CGPoint)CoordinateTransformRealToAbstract:(CGPoint)point;
//坐标转换方法,相对坐标转化实际坐标
- (CGPoint)CoordinateTransformAbstractToReal:(CGPoint)point;
//判断手指触摸点是否在折点旁边
-(BOOL)isNearByThePoint:(CGPoint)p;
//js代码运行
- (NSString *)runsJS:(NSString *)aJSString;
因为要对图像上的折点拖动,而我没有找到合适的对点的事件绑定方法,所以先直接对整个view进行手势监听,通过实际坐标与坐标轴坐标相对转换来判定触摸点是否是在折点附近已达到合理拖动的目的。
接下来便开始.m文件的编码工作啦。我先定义一个简单的折线图公式,y=x+n;把一些数据点塞到point数组里,做后面的datasource。接下来便是折线图的绘制,代码注释写得比较清楚,就不一一赘述了。值得注意的是,这里点的绘制也是使用ios里常用的datasource的方法,所以先别急着找那一系列点出现在哪里~<