• 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  

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

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

  • 相关阅读:
    关于 IIS 上运行 ASP.NET Core 站点的“HTTP 错误 500.19”错误
    下单快发货慢:一个 JOIN SQL 引起 SqlClient 读取数据慢的奇特问题
    ASP.NET Core 2.2 项目升级至 3.0 备忘录
    corefx 源码学习:SqlClient 是如何同步建立 Socket 连接的
    Chimee
    electron-vue:Vue.js 开发 Electron 桌面应用
    H5网页适配 iPhoneX,就是这么简单
    经典文摘:饿了么的 PWA 升级实践(结合Vue.js)
    Table Dragger
    分享8个网站开发中最好用的打印页面插件
  • 原文地址:https://www.cnblogs.com/tanglimei/p/4540719.html
Copyright © 2020-2023  润新知