-(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. Linux基础命令之总结一

    [root@ping ~]# tree -L 1 /   #使用tree 命令查看根目录下的一层的目录结构 ls - list directory contents[root@ping ~]# ls ...

  2. document.querySelectorAll() 与document.getElementTagName() 的区别

    这个区别我估计大神都不知道,问题源于博主,细节被一个妹子发现的 事情经过是这样 <ul> <li>item</li> <li></li> & ...

  3. CSS学习(页外引用还不懂)

    CSS的语法结构为   选择符 {属性:值:}    Selector {Property : Value:} 选择符:通配 *{....}  , 元素  body{....} .h1{....}.p ...

  4. Python之编写登陆接口

    1.输入用户名密码: 2.认证成功后显示欢迎信息: 3.错误三次后,账号被锁定. 账号文件:user.txt 锁定文件:locked.txt 流程图如下: # -*- coding:utf-8 -*- ...

  5. 关于Android log拿不到的情况

    遇到很多开发者说crash了,log没有看到..出现类似情况的基本原因是因为现在的国产厂商如crash了会直接将进程杀掉,于是你的studio就看不到了,可以往下面几个方向去想办法找到crash的lo ...

  6. 进击的AssetBundles和它的工具们

    0x00 前言 周末的时候在家看了下去年的Unite16 LA的视频.其中一个session很有趣,是AssetBundles开发团队Reichert的一个"总结过往,畅想未来"的 ...

  7. Java自学手记——注解

    注意区分注释和注解,注释是给人看的,注解是给程序看的. 注解的作用是代替配置文件,在servlet3.0中,就可以不再使用web.xml文件,而是所有配置都是用注解!比如注解类 @WebServlet ...

  8. Unreal Engine 4(虚幻UE4) GameplayAbilities插件入门教程(一)

    本文系笔者的实习生分享会内容预备兼GameplayAbilities的初学者教程. 本文适合已有四十天UE4开发经验的初学者. 参考资料:https://wiki.unrealengine.com/G ...

  9. linux centos7 安装redis

    首先看官方教程:http://redis.io/download Download, extract and compile Redis with: $ wget http://download.re ...

  10. Oracle PIVOT 行转列方法

    数据库中業種的存储如下图: SELECT * FROM M_TORIHIKISAKI_GYOSYU 其中GYIUSYU_CD字段代表不同的業種 而画面需要实现下图所示样式:(将每条数据的業種横向展开显 ...