iOS 绘制不规则的图形

逻辑分析

主要的逻辑:

  1. 设置不规则图形的顶点;
  2. 获取当前的上下文;
  3. CGContextBeginPath(context);
  4. 顶点连线;
  5. 设置填充颜色;
  6. CGContextClosePath(context);
  7. 填充颜色;

具体代码

设置一个属性为points,在set方法内去调用重新绘制图形;

1
2
3
4
- (void)setPoints:(NSArray *)points{
_points = points;
[self setNeedsDisplay];
}

重写UIView的方法drawRect:,实现绘图;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- (void)drawRect:(CGRect)rect{
CGPoint p[self.points.count];

if (self.points.count < 3) {
return;
}

for (int i = 0; i < self.points.count; i ++) {
CGPoint tempPoint = CGPointFromString([self.points objectAtIndex:i]);
p[i].x = tempPoint.x;
p[i].y = tempPoint.y;
}

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextBeginPath(context);
CGContextAddLines(context, p, self.points.count);
[[UIColor colorWithRed:39/255.0 green:170/255.0 blue:226/255.0 alpha:1] setFill];
CGContextClosePath(context);
CGContextFillPath(context);

}

注意:CGContextAddLines这个方法的第二个参数是个C的数组,也可以说是指针;

总结

经常会忘记的,就是beginPath这个动作,和closePath是成对出现的。

iOS 原子操作autolically

备注以前认识的一个错误,关于iOS开发中原子的操作的问题;

API 内的方法说明

在NSData的writeToFile: autolically这个方法中看到API中这样一段解释:

1
2
3
flag 

If YES, the array is written to an auxiliary file, and then the auxiliary file is renamed to path. If NO, the array is written directly to path. The YES option guarantees that path, if it exists at all, won’t be corrupted even if the system should crash during writing.

大意为:

  1. flag设置为YES,在往文件写入东西时,我们会创建一个辅助的文件写入数据,写入完成之后,再修改为正确的路径;
  2. 当为NO时,直接写入文件,即便系统崩溃也不会中断,即有可能出现受污染的数据;

通常在读写文件的时候,为了防止意外造成数据污染,参数直接写为YES。

自己的见解

在修饰属性的时候,我们也经常会看到nonautomic这个修饰词,非原子的操作,这里没有使用原子操作的原因在于指针的操作都是瞬时的,原子非原子的操作都无所谓,我们约定一般都使用非原子的。

纠正错误

貌似我以前的认知中,这个属性是操作于是否可以并发访问一个属性的,但是想想,我们经常并发访问一个属性,倒也没什么影响,认识错误,纠正一下。

iOS Quartz 画多边形

因为一个图标分析的界面,想要画出一个多边形,搜索了一下,发现都不大靠谱,还是自己写一个吧,写完发现,其实不难啊,人懒不成事儿,这话说的真不假!!!

主要的逻辑:

  1. 计算半径,我们按照中心点作为标准,最短边的一半做为半径;
  2. 根据圆周率以及角度运算计算坐标点;
  3. 连线;
  4. 绘制图形;

以下的代码以右侧端点,按照逆时针按照0度开始计算,依次算出count边形的各个端点;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
- (void)drawRect:(CGRect)rect {
// Drawing code

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextSetRGBFillColor(context, 0, 1, 1, 1);
// 虚线,每两个像素画一个虚线,虚线长度2像素
CGFloat lengths[] = {2,2};
CGContextSetLineDash(context, 0, lengths, 2);
CGContextSetLineWidth(context, 2.0);

if (self.count < 2) {
return;
}

NSMutableArray *points = [NSMutableArray arrayWithCapacity:self.count];

CGPoint circlePoints[self.count+1];//多边形的边
CGFloat width = CGRectGetWidth(self.bounds);
CGFloat height = CGRectGetHeight(self.bounds);
CGFloat radius = ABS((width < height ? width : height)/2.0);
for (int i = 1 ; i <= self.count; i ++){
CGPoint tempPoint = CGPointZero;
tempPoint.x = width/2.0 + radius * cos(2*i*M_PI/self.count);
tempPoint.y = height/2.0 - radius * sin(2*i*M_PI/self.count);
[points addObject:NSStringFromCGPoint(tempPoint)];

circlePoints[i-1].x = tempPoint.x;
circlePoints[i-1].y = tempPoint.y;
if (i == 1) {
circlePoints[self.count].x = tempPoint.x;
circlePoints[self.count].y = tempPoint.y;
}

CGPoint centerPoint = CGPointMake(width/2, height/2);
//画半径
CGContextMoveToPoint(context, centerPoint.x, centerPoint.y);
CGContextAddLineToPoint(context, tempPoint.x, tempPoint.y);

}
CGContextAddLines(context, circlePoints, self.count+1);
CGContextStrokePath(context);
}

需求上,还要求,再这个图形的基础上,绘制出一个不同剃度的不规则的图形,后续将会补充说明处理过程;

2015年度总结

回顾

整个2015年结束了,本命年,还是一个三年之别的日子,但是在过去的一年中,成长不少,收获不少。

干自己该干的

15的一大部分都花费在2.0订货会陈列订货部分,包括以下几个方面:

  1. 开发新的下拉菜单功能;
  2. 修复已经开发好的陈列功能;
  3. 改进手势;
  4. 改进代码,提高代码的效率以及整体复杂度;
  5. 设计新的主界面的布局,以后台配置表生成主界面结构,实现未读消息;
  6. 智能换款以及快速替换款功能的开发;

整个功能板块,到目前为止,可以正式投入运行。

后半部分时间用来做以下几件事情:

  1. 熟悉订货会的整体结构;
  2. 修复出现的bug,改进由于前期考虑不周造成的问题,修复有隐患的code;
  3. 编写订货会的界面配置文档;
  4. 了解定制功能;

做一款让自己骄傲的东西很不容易啊!!!

另外,貌似独立做了两个小的企业级的项目,一个车子的,一个投资的,一个完工,一个最后不了了之,虽然那段时间很累,但是过的很充实。

ai ma,这一年也就做了这么多了。

大致算了一下,貌似,有一个月的时间是在老家度过的~~~我也是个还算孝顺的妹子,说好的陪着老娘看她母亲,陪着年迈的姥姥,住了整整一个星期~~~还有小半个月,是在家守着母亲,度过了老爸三周年的忌日和生日———那时候基于母亲各种各样的的说辞,薪水待遇,以及分手之后的各种乱七八糟的想法,动起了离职的想法,想要换个公司或者换个城市,总之,就想到一个新环境,然而又是一些自己已经习惯的原因,留在了老公司。

哎,习惯也真是一个可怕的借口,比如习惯一个城市,习惯一些人,习惯一种生活,大约我也是用这个借口去搪塞朱先生的。

好吧~ 言归正传。

在贯信,大部分时间都是用来做陈列的重构。14年年尾的时候,写了一个版本的陈列,刚开始的时候,似乎没有考虑到整个业务的复杂度,本着实现功能为第一准则,在后期功能的不断追加下,使得整个结构不够稳定,又迫于各种复杂度和设计不周造成的问题,在15年年初开始策划翻写。

最终,在15年的上半年即将到来的时候发布了一个基本功能能用的版本。

学自己想学的

嗯,这个嘛,其实好像不知道从哪儿说。

我爱好广泛,涉猎的非专业东西比较多,但是又是一知半解,所以这么写的时候,不知道咋说嘞。说实话,我觉得学习swift是很有必要的,不知道为啥,反正从始至终我都没有放弃过。

每天,会找一定的时间去看一会儿swift,隔一段时间,会看看API,这些都是我坚持下来的,我始终相信最好的老师还是文档,最好的文档还是API,因为底层API是英文的,(而且我的口语很差,老是被人说笑,弄得我更不敢说英语了。)所以隔段时间会找时间看英文的报纸或者只是文章,或者就听。

但是还有别的东西没有做呢!我本来还想在15年好好的做电子杂志之类的东西的,以后若是做这一块的app会顺手,可是到现在都没有好好的去做一下。哎,周末啊,都用来睡觉和去外地了,都是麻溜的不行不行的。

另外一个值得高兴的就是我终于开始用gitPages做自己的博客,虽然是不久前才开始用的,嘎嘎嘎,之前的博客一直是在百度以及csdn上做的,在浏览信息的时候看到别人的样式很漂亮,我也很稀饭,(虽然我刚搭出来的时候,别人泼了冷水,但是我还是很开心),我也就做了,很感谢noble liu的帮忙,所以能在这里看到这个了。

展望

我有一些不大不小的目标

日子还是要过的,我还是有努力的空间滴,在过去的一年中,我也看到了自己和别人的差距,可以捡拾的东西还是不少的,争取在来年多努力。

  1. 现在对于swift还是处于学些的阶段,争取在接下来的16年用swift做一个真正的小项目,做一个自己觉得有意思的,又能够学到东西的小app。
  2. 数据库还是很有学习的必要的,该怎么说呢,我们几乎所有的app都要与数据库交互,在服务器没有给到数据的时候,我们可以设计数据结构以及数据内容,与本地的数据库交互成为了必要的技术。
  3. php,貌似一直以来都对php的项目感兴趣的,还是想要好好学学。
  4. 多和行业内的人交流,虽然领域不一样,虽然做的东西不同,但是原理还是一样的,能学习别人的一种态度或者一些想法还是很有好处的。
  5. 多旅游,多读书,所看看世界。

    在iOS开发方面,我这人就只认有页面做东西,对设计什么的都不感兴趣(但是个人觉得还是有一套自己的审美概念的),公司内部的项目也是见证了成长,但是说实话,界面上我真不喜欢,但是只给需求让我去设计,我更做不来。当初做陈列的时候,不停的拿界面问领导,这个效果怎么样,那个按钮怎么样,还找设计,你给我做个那啥啥按钮,哎,想想,我也是醉了。说实话,单独的去想功能,而本身又从未接触一个行业,这玩意儿我真搞不定,也分析不了实用性。所以,接下来的日子还是要多加加油,了解设计,了解行业本身的特性。

付出该付出的

misheral,多多用功,多多努力,想要做好一个行业的东西,就要熟悉业界的一套路子,然后走自己路,让别人笑话去吧~~~!!!

公司实现的目标

能和一些潮流大牌多交流,了解他们app的方向,找一个点儿,更好的去改进订货会,进而有更大市场,给公司挣价值吧~

生活中的目标呢

比如,我想带着小宝儿去西安,走张掖,看丹霞地貌,赏嘉峪关的美景,吃成都的小吃,看厦门的美景等等。

唉嘛,希望自己都能一一实现,等到17年再来看这些想要实现的东西时,若一一实现了,我也算是对得起自己了。

总结

zongzhi, 还是少扯一点儿,多做一点儿,少说话,多做事,总没有错的。干活的干活,逛吃的逛吃,做好自己的每一件事儿。

今年若是按照10分来评价的话,给自己打八分,对得起良心,对得起公司,对的父亲,对得起高女士,对得起朱先生,对得起自己。
没有大过,也几乎没啥大的功劳。

老爸老头说,善始善终,每一个经历的事情都要做得好好的,不落人口实。
我也在尽力的做,每一件事,尽心对每一分工作,用心对每一个身边的人。

最后,还是想对自己说,加油~~自己,加油~~misheral !!!

Misheral first blog

hello,我是miss yao! 90后妹纸,我很确定,不是美女。

iOS开发工程师,目前坐标:申城上海。

2013年开始从事iOS移动开发工作,目前有两年多的工作经验。

看到别人的博客很漂亮,想要一个属于自己的,所以,就倒腾了一下。

第一次来到这里, 给自己留一个纪念。虽然不是第一次写博客,但是很是很激动。以后会在闲暇时段,在这里分享移动开发方面遇到的一些问题或者技术点,并且备注一些经常会忘记的东西,共勉技术发展。偶尔的,有好的作品的话,会在这里分享出来。目前创作领域,在移动订货方向,企业级应用。

以后若有关于iOS方面的技术性东西,欢迎交流。

QQ : 925912264