美文网首页UIBezierPath动画
iOS[UIKit框架]UIBezierPath篇(2)

iOS[UIKit框架]UIBezierPath篇(2)

作者: 一只小蝉儿 | 来源:发表于2016-05-27 13:39 被阅读257次

    使用UIBezierPath(我们通常叫贝塞尔曲线)类可以创建基于矢量的路径,这个类在UIKit中。此类是Core Graphics框架关于path的一个封装。使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线段组成的形状。
    矢量:又称向量,指有大小又有方向的量。
    标量:标量是只有大小,没有方向的量。
    UIBezierPath是OC语言的,相对于Core Graphics来说更为平易近人,其次它能够使用ARC,如果我们直接使用CGPathRef的话,还要自己负责在合适的时候释放。
    =============================

    一、UIBezierPath基础
    UIBezierPath对象是CGPathRef数据类型的封装。path如果是基于矢量形状的,都用直线和曲线段去创建。我们使用直线段去创建矩形和多边形,使用曲线段去创建弧(arc),圆或者其他复杂的曲线形状。每一段都包括一个或者多个点,绘图命令定义如何去诠释这些点。每一个直线段或者曲线段的结束的地方是下一个的开始的地方。每一个连接的直线或者曲线段的集合成为subpath。一个UIBezierPath对象定义一个完整的路径包括一个或者多个subpaths。
    创建和使用一个path对象的过程是分开的。创建path是第一步,包含一下步骤:
    (1)创建一个Bezier path对象。
    (2)使用方法moveToPoint:去设置初始线段的起点。
    (3)添加line或者curve去定义一个或者多个subpaths。
    (4)改变UIBezierPath对象跟绘图相关的属性。

    二、UIBezierPath.h中的基本属性说明
    见 iOS[UIKit框架]UIBezierPath篇(1)

    三、UIBezierPath的简单使用
    1、利用UIBezierPath画一条直线
    代码如下:


    31DDCC56-BB82-4FBF-9BFE-4BE9C39B9CAD.png

    2、画一个三角形


    98831741-5962-4C08-A4E6-3CAAAEEEFF80.png
    3.画一个矩形
    F6445802-84A2-42F0-8999-F81A25AE6FEA.png
    4.画一个矩形的内切圆
    AF019B51-01FC-4D9E-BBC6-2AAD35504CD9.png

    5.画一个椭圆


    A95EB498-0B5D-47D3-A393-7CD3BF837E84.png
    6.画一个四个角都是圆角的矩形
    8DFAC2CF-2E1D-4F97-AF46-29A3ABC2CD68.png
    7.画一个其中两个角都是圆角的矩形
    CED98E22-DAC2-4FA7-9EAA-0A976ECF9CEF.png
    8.画一个弧线
    3BD788AA-1B67-4164-98EA-28B15CDD587E.png
    9.绘制二次贝塞尔曲线
    49EA44FB-AD50-43FB-95A3-6F779C395DBB.png
    10.绘制三次贝塞尔曲线
    4395194C-08C3-4A74-B25F-E442F84D6D59.png
    11.使用Core Graphics函数去修改path

    UIBezierPath类只是CGPathRef数据类型和path绘图属性的一个封装。虽然通常我们可以用UIBezierPath类的方法去添加直线段和曲线段,UIBezierPath类还提供了一个属性CGPath,我们可以用来直接修改底层的path data type。如果我们希望用Core Graphics 框架函数去创建path,则我们要用到此属性。
    有两种方法可以用来修改和UIBezierPath对象相关的path。可以完全的使用Core Graphics函数去修改path,也可以使用Core Graphics函数和UIBezierPath函数混合去修改。第一种方法在某些方面相对来说比较容易。我们可以创建一个CGPathRef数据类型,并调用我们需要修改path信息的函数。
    (1).赋值一个新的CGPathRef给UIBezierPath对象。


    3C8DF84D-C2BC-4ABF-A8F6-7A837A09BD26.png
    (2).如果我们使用Core Graphics函数和UIBezierPath函数混合方法,我们必须小心的移动path 信息在两者之间。因为UIBezierPath类拥有自己底层的CGPathRef data type,我们不能简单的检索该类型并直接的修改它。相反,我们应该生成一个副本,然后修改此副本,然后赋值此副本给CGPath属性
    F6B4433B-CD0B-4E24-B251-9B2F6B2066E1.png
    12.rendering(渲染)Bezier Path对象的内容。
    当创建一个UIBezierPath对象之后,我们可以使用它的stroke和fill方法在current graphics context中去渲染它。在调用这些方法之前,我们要进行一些其他的任务去确保正确的绘制path。
    使用UIColor类的方法去stroke和fill想要的颜色。设置形状在目标视图中的位置。如果我们创建的path相对于原点(0,0),则我们可以给current drawing context应用一个适当的affie transform。例如,我想drawing一个形状起始点在(0,0),我可以调用函数CGContextTranslateCTM,并指定水平和垂直方向的translation值为10。调整graphic context相对于调整path对象的points是首选的方法,因为我们可以很容易的保存和撤销先前的graphics state。更新path对象的drawing 属性。当渲染path时,UIBezierPath实例的drawing属性会覆盖graphics context下的属性值
    E7AC80C0-0206-4FDE-94CB-1C23221A6695.png

    相关文章

      网友评论

        本文标题:iOS[UIKit框架]UIBezierPath篇(2)

        本文链接:https://www.haomeiwen.com/subject/qvkxdttx.html