-(void)drawRect:(CGRect)rect{

     // 画同心圆,初始化Bezier对象
UIBezierPath *path = [[UIBezierPath alloc]init];
float maxRadio = 50.0;
float currentRadio; // 设置画笔颜色,Bezier类没有设置线条颜色的属性,但是在OtherView中说可以用UIColor类设置颜色(线条和填充)
[[UIColor redColor] setStroke]; for (currentRadio = maxRadio; currentRadio > ; currentRadio -= ) {
// 拿起画笔 ,移动画笔到下一个图形的起点 ,不然会直接移动过去,会有两个图形间会有连接线
[path moveToPoint:CGPointMake(+currentRadio, )] ; //clockwise 顺时针属性 为yes,表示顺时针画(0-1.5M_PI),NO表示画(1.5M_PI - 2M_PI)
[path addArcWithCenter:CGPointMake( , ) radius:currentRadio startAngle: endAngle:*
M_PI clockwise:YES]; } // 在uiimage 和nsstring 中系统提供了想用的方法,来绘制。
//图片
UIImage *logoIMage = [UIImage imageNamed:@"3.png"];
[logoIMage drawInRect:CGRectMake(, , , )]; // 字符串
NSString * str = [NSString stringWithFormat:@"我是画上去的"];
/*文本属性
相应的文本属性有很多,可以参看辣条的http://blog.csdn.net/qq_32531823/article/details/54379623
*/
[str drawInRect:CGRectMake(, , , ) withAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:]}]; //线条宽度
// path.lineWidth = 5.0;
// 线头样式 无,方头,圆头
// path.lineCapStyle = 2; // 开始画
[path stroke]; }

以上这些绘制原理都是基于 Core Graphics 框架完成的,所以有一些 关于绘制很高的要求时,可以去查一查 相关API。

下面是使用 Core Graphics的简单代码实例, 这个框架是一套提供2D绘图功能的C语言API,使用C结构和C函数模拟了一套面向对象的编程机制,并没有OC中的对象和方法。Core Graphics 中的CGContextRef 负责储存绘画状态(画笔颜色线条之类的)和绘制内容所出空间。

1 为什么它能储存 绘制内容所储存的空间

很多Core Graphics 框架中的类型 都带有Ref后缀,这种类型是用来模拟面向对象C结构。Core Graphics “对象”(CGContextRef) 与OC的对象都是在堆上分配内存的,所以再起被创建时,都会返回一个指向对象内存地址的指针。(像CGPoint 这种结构简单,没后后缀的, 就是在栈上分配内存的)。即CGContextRef 是一种结构指针(结构名后加一个 *)。比如说 CGColor (不直接使用)结构 有一个表示CGColor * 的类型 CGColorRef (一般用这个)。

注意: 带有Ref后缀的类型对象可能拥有指向其它Core Graphics “对象”的强引用指针,而作为其他”对象“的拥有者时,ARC无法识别 这类强引用和 “对象”的所有权,所以必须在使用后手动 release掉它。

规则:使用名称中带有 creat或者copy的函数创建了一个Core Graphics ”对象“,就必须手动release。

下面代码就很好示例了

-(void)drawRect:(CGRect)rect{
// 开启图形上下文
CGContextRef currentCotext = UIGraphicsGetCurrentContext();
//设置画笔颜色
CGContextSetRGBStrokeColor(currentCotext, , , , );
//创建一个可变路径
CGMutablePathRef cgpath = CGPathCreateMutable();
//路径开始点
CGPathMoveToPoint(cgpath, NULL, , );
//添加一条线到点200,200
CGPathAddLineToPoint(cgpath, NULL, , );
//添加路径到图形上下文
CGContextAddPath(currentCotext, cgpath);
// 画图形上下文的路径
CGContextStrokePath(currentCotext);
// release 掉 路径指针
CGPathRelease(cgpath);
}

在drawRect:方法中绘制图片,文字以及Core Graphics 框架的了解的更多相关文章

  1. MATLAB坐标系中绘制图片

    MATLAB坐标系中绘制图片 方法一 使用图片坐标循环的方式,代码如下. clear,clc,close all tic; map=imbinarize(imread('map.bmp'));%map ...

  2. ios中怎么样设置drawRect方法中绘图的位置

    其中drawRect方法中的参数rect就是用来设置位置的,

  3. [Android]ListView的Adapter.getView()方法中延迟加载图片的优化

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4139998.html 举个例子吧,以好友列表为例 ListVi ...

  4. 关于Chrome和Opera中draw Image()方法无法在canvas画布中绘制图片的问题

    var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); var img=d ...

  5. C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表

    调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...

  6. 移动端H5适配方法(盒子+图片+文字)

    一.怎么让H5页面适应手机 a.利用meta标签 <meta name="viewport" content="width=device-width,initial ...

  7. 如何在css中设置按钮button中包含图片文字对齐方式

    <el-button class="class-management style="line-heught">班级管理

  8. qt在tableview中绘制图片

    void ItemModelDeletage::paint(QPainter *painter, const QStyleOptionViewItem &option, const QMode ...

  9. UIButton图片文字控件位置自定义(图片居右文字居左、图片居中文字居中、图片居左文字消失等)

    在开发中经常会碰到需要对按钮中的图片文字位置做调整的需求.第一种方式是通过设置按钮中图片文字的偏移量.通过方法setTitleEdgeInsets和setImageEdgeInsets实现 代码如下: ...

随机推荐

  1. 阿里巴巴的datasource

    阿里巴巴的datasource:<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSourc ...

  2. 两种代理模式(JDK和Cglib)实例

    CGlib代理模式: package CGLIB; import java.lang.reflect.Method; import JDK.Test; import net.sf.cglib.prox ...

  3. Spring Boot 自动重启(spring-boot-devtools)

    原文 https://github.com/x113773/testall/issues/8 1. 首先添加依赖```<dependency><groupId>org.spri ...

  4. 手把手教你 基础 整合最优雅SSM框架:SpringMVC + Spring

    我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教学课堂中,也会把SSH作为最核心的教学内容. 但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配 ...

  5. 4.vbs的循环,switch,判断等语句

    1.条件判断语句 If Then Else Sub judge(x) Then MsgBox "the num is 0" Then MsgBox "the num is ...

  6. flask 上传头像

    上传头像,自己感觉了好久,就是上传文件呗其实,存在一个路径,数据库存储这个路径,然后展示给前端,啥都不说,看怎么实现的. 数据库设置如下 user_image=db.Column(db.String( ...

  7. .NET C#到Java没那么难,MVC篇

    最典型的JAVA MVC就是JSP + servlet + javabean的模式.比较好的MVC,老牌的有Struts.Webwork.新兴的MVC 框架有Spring MVC.Tapestry.J ...

  8. Linux进程/内核模型

    内核必须实现一组服务和相应的接口,应用程序则可以使用这些接口,而不是直接与硬件打交道. Linux内核主要由以下5个子系统组成:进程调度.内存管理.虚拟文件系统.进程间通信以及设备驱动. 在这个组成中 ...

  9. (转载)oracle的v$sqlarea表

    原文摘自:http: [V$SQLAREA]  本视图持续跟踪所有shared pool中的共享cursor,在shared pool中的每一条SQL语句都对应一列.本视图在分析SQL语句资源使用方面 ...

  10. 记VUE的v-on:textInput无法执行事件的BUG

    <div id="wrap"> <input type="text" v-on:textInput="fn"> &l ...