iOS CGContextRef 画一条直线,仅仅是画一条直线

 今天周末休息,想好好补补课,无奈,弄了一上午,全部都是半边拉块的demo,有一种深深的挫败感。

  中午睡醒一觉后,又看了一集“奔跑吧兄弟”,然后一下午时间就过去了。

  仔细一想,应该是我的补课方法不对:要补的东西太多了,必须得从大处入手,如果从小处入手,那得花老鼻子的时间来弄了。

  然后,那就从困扰了好久的画线开始吧。

  前两天做项目,头儿让我用画线实现一个功能,他一说画线我就打怵,因为对这一方面不是很熟,这几天鼓捣了几下子,但是每次都是做着做着这个,又发现了另外一个不会的东东,转战去其他战场了,等反应过来时,时间已经过去了,画线这个功能还是没有解决,深深的挫败感又袭了一身,也没有心情弄了,遂洗洗就去睡了,第二天周而复始。

  现在发现了自己的战略不对,所以要及时改正啊!

  下面就好好总结一下画线的基本功,如果其他博友看到,说不准也能指点迷津了!

  

写在前面:

1.首先必须知道:如果要画线,则必须在drawRect方法里面写,也就是要重写这个方法。

2.必须知道上下文的意思,我认为的就是拿到当前view的画布。

这几个地方明了了,就不难了。

1.首先,应该创建一个project

2.在project里面,新建一个继承于UIView的view,我们定义为LineView;

3.重写init方法

  3.1 在这个里面,我们要定义一下当前view的backgroundColor,因为默认是黑色,我们将之设置为白色。

  

-(instancetype)init{

if (self = [super init]) {

self.backgroundColor = [UIColor whiteColor];

}

return self;

}

4.重写drawRect 方法

  4.1 要画一条线,我们必须得先设置好画布

CGContextRef context = UIGraphicsGetCurrentContext();

  4.2 设置这条线的起点和终点:我们从屏幕的左上角--屏幕的右下角

CGContextMoveToPoint(context, 0, 0);//先确立一个开始的点

CGContextAddLineToPoint(context, [[UIScreen mainScreen]bounds].size.width, [[UIScreen mainScreen]bounds].size.height);//设置终点。如果多于两个点时,可以重复调用这个方法,就会有多个折线

前面的context代表的是基于当前的画布,后面的两个参数,代表当前点的坐标。

  4.3 设置当前线的宽度

CGContextSetLineWidth(context, 5.0);//后面的数值越大,线越粗

  4.4 设置当前线的颜色

CGFloat components[] = {221.0/255,221.0/255,221.0/255,1.0f};

CGContextSetStrokeColor(context, components);

components就是用

[UIColor colorWithRed:<#(CGFloat)#> green:<#(CGFloat)#> blue:<#(CGFloat)#> alpha:<#(CGFloat)#>]

将这个方法分离出来,分别填入数组内,范围是从0.0-1.0,不可以越界。

  4.5 连接这两个点

CGContextStrokePath(context);

这样,这条简单的直线就画完了。

  

  但这样还是不够,因为我们还没有将它贴在ViewController里面。

在ViewController.m中的viewDidLoad方法里面,我们将它添加进去:

- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor = [UIColor whiteColor];

LineView * lineView = [[LineView alloc]init];

lineView.frame = self.view.bounds;

[self.view addSubview:lineView];

}

运行程序,这条淡灰色的线就粗来了~~~功能虽然简单,但是,能完整的写出来,也算有一种小小的成就感了。当然,这只是一个小小的开始,更复杂的任务,还在后面等着我们呢!

刚才新建了一个群:iOS进阶学习交流群

QQ群号:461093715

这里面现在仅有我一个人,不过我相信会有更多的博友加入,我们一起进步。

北京今天的天气很凉爽啊,早上没有开空调,开了风扇,冻得我的小短腿直哆嗦,现在打开窗户,小风直来呢~加油。

时间: 2024-08-24 15:47:58

iOS CGContextRef 画一条直线,仅仅是画一条直线的相关文章

iOS CGContextRef画图小结

CGContextRef context = UIGraphicsGetCurrentContext(); //设置上下文 //画一条线 CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);//线条颜色 CGContextSetLineWidth(context, 5.0);//线条宽度 CGContextMoveToPoint(context, 20, 20); //开始画线, x,y 为开始点的坐标 CG

iOS CGContextRef画图时的常用方法

UIView的drawRect方法 CoreGraphics绘图 综述:描述系统会调用UIView的drawRect方法,所以coreGraphics的所有实现代码放在该函数内,setNeedsDisplay是更新整个视图,setNeedsDisplayInRect是更新视图的一个区域. CGContextRef context = UIGraphicsGetCurrentContext();设置上下文 CGContextMoveToPoint 开始画线 CGContextAddLineToPo

ios:CGContextRef 渲染中文问题

1.项目中遇到drawRect来渲染中文,但是调用CGContextShowTextAtPoint方法失败,于是查了些资料整理总结一下 2.既然apple能显示中文,那么自然也是支持中文的. 查看所有字体: NSArray *fontFamilies = [UIFontfamilyNames]; for(NSString *fontFam in fontFamilies) { NSLog(@"=========%@=========",fontFam); NSArray *fontNa

poj3819 Coverage (求直线与圆的交占直线的百分比 )

题意:给你一条直线和若干个圆,求圆与直线相交的长度占整条直线的比例 解题思路:通过定比分点的方法求出圆与直线的交占圆的比例. 第一步:(确定投影的方向是x轴还是y轴) (1)当直线的line.s(x, y), line.e(x, y)的line.s.x与line.e.x不同一时候,这条直线能够等同于起点为line.s.x, line.e.x; (2)不满足(1)时(即line.s.x==line.e.x时),当直线的line.s(x, y), line.e(x, y)的line.s.y与line

Qt刷新机制的一些总结(Qt内部画的时候是相当于画在后台一个对象里,然后在刷新的时候调用bitblt统一画,调用window的api并不会影响到后面的那个对象)

前段时间做过一个界面刷新的优化,遇到的坑比较多,在这里做一点点总结吧. 优化的方案是滚动滚动条的时候用截屏的方式代替界面全部刷新,优化完成后,界面在滚动时效率能提升大概一倍,背景介绍完毕. 用到最主要的是QT的截屏功能 window原生api会提供截屏滚动的功能.可以用这个ScrollWindowEx这个api.它会根据相应的参数在屏幕中进行滚动相应的区域.是不是很容易?但是结果却是不理想,因为用的是Qt,控件重写过PaintEvent的方法.调用api实时能看到效果,但是触发一次PaintEv

用一条SQL语句取出第 m 条到第 n 条记录的方法

原文:用一条SQL语句取出第 m 条到第 n 条记录的方法   --从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本) SELECT TOP n-m+1 * FROM Table WHERE (id NOT IN (SELECT TOP m-1 id FROM Table )) --从TABLE表中取出第m到n条记录 (Exists版本) SELECT TOP n-m+1 * FROM TABLE AS a WHERE Not Exists (Select * From 

HTML5 CSS3 诱人的实例 : 网页加载进度条的实现,下载进度条等

今天给大家带来一个比较炫的进度条,进度条在一耗时操作上给用户一个比较好的体验,不会让用户觉得在盲目等待,对于没有进度条的长时间等待,用户会任务死机了,毫不犹豫的关掉应用:一般用于下载任务,删除大量任务,网页加载等:如果有使用html5为手机布局的,也可以用于手机中~ 效果图: 1.html结构: <div id="loadBar01" class="loadBar"> <div> <span class="percent&qu

SQL中遇到多条相同内容只取一条的实现

例如出现BID为1673的两条重复数据,要第一条 select * from(select no=row_number() over(partition by Bid order by getdate()),* from BidWinningNotice) twhere no=1 AND SID=238 AND BWMType=1

一条insert语句批量插入多条记录 AND 多条件游标更新 变CASE WHEN更新法提高速度

一条insert语句批量插入多条记录 常见的insert语句,向数据库中,一条语句只能插入一条数据: insert into persons (id_p, lastname , firstName, city ) values(204,'haha' , 'deng' , 'shenzhen'); (如上,仅插入了一条记录) 怎样一次insert插入多条记录呢? 使用示例: insert into persons (id_p, lastname , firstName, city ) values