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
这里面现在仅有我一个人,不过我相信会有更多的博友加入,我们一起进步。
北京今天的天气很凉爽啊,早上没有开空调,开了风扇,冻得我的小短腿直哆嗦,现在打开窗户,小风直来呢~加油。
iOS CGContextRef 画一条直线,仅仅是画一条直线的更多相关文章
- iOS CGContextRef画图时的常用方法
UIView的drawRect方法 CoreGraphics绘图 综述:描述系统会调用UIView的drawRect方法,所以coreGraphics的所有实现代码放在该函数内,setNeedsDis ...
- 求曲线y=lnx在区间(2,6)内的一条切线,使得该切线与直线x=2,x=6及曲线y=lnx所围成的图形的面积最小。
求曲线y=lnx在区间(2,6)内的一条切线,使得该切线与直线x=2,x=6及曲线y=lnx所围成的图形的面积最小. 1.先画图. 2.设切点为(a,lna) (2<a<6) 3.切线方程 ...
- iOS开发小技巧--微博项目中的键盘工具条
微博项目中的键盘工具条 项目中的键盘工具条不能使用inputAccessoryView,因为inputAccessoryView不能实现键盘隐藏的时候,工具条还显示在眼前,如图: 所以,果断决定将工具 ...
- Java编写画图板程序细节-保存已画图形
没有Java编写画图板程序细节-保存已画图形 一.为何我们要保存画图板上已画图形呢? 有很多人会问,为什么我们一定要保存画图板上已经画好了的图形呢?原因很简单.当我们在画图板上画完自己想画的图形后 ...
- c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode
#include <stdio.h> #include <math.h> #include <string.h> char explode( char * str ...
- poj3819 Coverage (求直线与圆的交占直线的百分比 )
题意:给你一条直线和若干个圆,求圆与直线相交的长度占整条直线的比例 解题思路:通过定比分点的方法求出圆与直线的交占圆的比例. 第一步:(确定投影的方向是x轴还是y轴) (1)当直线的line.s(x, ...
- NX二次开发-直线分析函数UF_EVAL_ask_line与NXOpen::Line直线分析的用法
NX11+VS2013 #include <NXOpen/Line.hxx> #include <NXOpen/NXException.hxx> #include <NX ...
- Qt刷新机制的一些总结(Qt内部画的时候是相当于画在后台一个对象里,然后在刷新的时候调用bitblt统一画,调用window的api并不会影响到后面的那个对象)
前段时间做过一个界面刷新的优化,遇到的坑比较多,在这里做一点点总结吧. 优化的方案是滚动滚动条的时候用截屏的方式代替界面全部刷新,优化完成后,界面在滚动时效率能提升大概一倍,背景介绍完毕. ...
- 一条insert语句批量插入多条记录
一条insert语句批量插入多条记录 常见的insert语句,向数据库中,一条语句只能插入一条数据: insert into persons (id_p, lastname , firstName, ...
随机推荐
- NoClassDefFoundError: com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig处理
根据老系统拷贝maven依赖新搭建了一个项目,启动抛异常如下: Caused by: java.lang.NoClassDefFoundError: com/ibatis/sqlmap/engine/ ...
- BDC备忘
更新模式,有下列可选值(更新模式常用的是S) "A" 异步更新.被调用程序的更新按照没有指定 COMMIT WORK 语句和 AND WAIT 附加的方式执行. 也 ...
- js jquery 权限单选 bug修改以及正确代码 购物车数量加减
效果图废话不多直接上代码 用的avalon渲染,其实都是一样的 <div class="shop-arithmetic"> <a href="javas ...
- 如何在创建hive表格的python代码中导入外部文件
业务场景大概是这样的,我要对用户博文进行分词(这个步骤可以看这篇文章如何在hive调用python的时候使用第三方不存在的库-how to use external python library in ...
- C++ 十进制 八进制 十六进制的转换和关系
在默认情况下,cout以十进制格式显示整数,而不管这些整数在程序中是如何书写的.如下面的程序所示: #include<iostream> using namespace std; #inc ...
- 将WebAPI发布到本地服务器与远程服务器
一.本地服务器 参考链接:https://blog.csdn.net/shuai_wy/article/details/69221858 1.要实现 IIS Express域名.IP的访问,关键在于需 ...
- ISCSI网络存储
ISCSI(iSCSI,Internet Small Computer System Interface) iSCSI技术实现了物理硬盘设备与TCP/IP网络协议的相互结合,使得用户可以通过互联网方便 ...
- 一、MySQL数据库之简介和安装
一.基础部分 1.数据库是简介 之前所学,数据要永久保存,比如用户注册的用户信息,都是保存于文件中,而文件只能存在于某一台机器上. 如果我们不考虑从文件中读取数据的效率问题,并且假设我们的程序 ...
- 9.2python操作redis
Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...
- HTTP的缓存控制
1.缓存的分类: (1)缓存分为服务端侧(server side,比如 Nginx.Apache)和客户端侧(client side,比如 web browser). (2)服务端缓存又分为 代理服务 ...