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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; min-height: 13.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #703daa }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3e1e81 }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #008400 }
span.s1 { }
span.s2 { color: #ba2da2 }
span.s3 { color: #703daa }
span.s4 { color: #000000 }
span.s5 { font: 11.0px "PingFang SC" }
span.s6 { color: #3e1e81 }
span.s7 { color: #272ad8 }
span.s8 { font: 11.0px Menlo; color: #000000 }
span.s9 { font: 11.0px Menlo }
span.s10 { color: #78492a }
span.s11 { color: #d12f1b }
span.s12 { font: 11.0px "PingFang SC"; color: #d12f1b }

 1 -(void)drawRect:(CGRect)rect{
 2
 3     // 画同心圆,初始化Bezier对象
 4     UIBezierPath *path = [[UIBezierPath  alloc]init];
 5     float maxRadio = 50.0;
 6     float currentRadio;
 7
 8     // 设置画笔颜色,Bezier类没有设置线条颜色的属性,但是在OtherView中说可以用UIColor类设置颜色(线条和填充)
 9      [[UIColor redColor] setStroke];
10
11
12     for  (currentRadio = maxRadio; currentRadio > 0; currentRadio -= 10) {
13         // 拿起画笔 ,移动画笔到下一个图形的起点 ,不然会直接移动过去,会有两个图形间会有连接线
14         [path  moveToPoint:CGPointMake(200+currentRadio, 250)]  ;
15
16         //clockwise 顺时针属性 为yes,表示顺时针画(0-1.5M_PI),NO表示画(1.5M_PI - 2M_PI)
17         [path addArcWithCenter:CGPointMake(200 , 250) radius:currentRadio startAngle:0   endAngle:2*
18          M_PI clockwise:YES];
19
20
21     }
22
23     // 在uiimage 和nsstring 中系统提供了想用的方法,来绘制。
24    //图片
25     UIImage *logoIMage = [UIImage imageNamed:@"3.png"];
26     [logoIMage drawInRect:CGRectMake(183, 233, 34, 34)];
27
28     // 字符串
29     NSString * str = [NSString stringWithFormat:@"我是画上去的"];      /*文本属性             相应的文本属性有很多,可以参看辣条的http://blog.csdn.net/qq_32531823/article/details/54379623      */
30     [str drawInRect:CGRectMake(20, 700, 300, 50) withAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]}];
31
32
33   //线条宽度
34 //    path.lineWidth = 5.0;
35 // 线头样式 无,方头,圆头
36 //    path.lineCapStyle = 2;
37
38
39    // 开始画
40     [path stroke];
41
42 }

以上这些绘制原理都是基于 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, 1, 0, 0, 1);
    //创建一个可变路径
    CGMutablePathRef  cgpath = CGPathCreateMutable();
    //路径开始点
    CGPathMoveToPoint(cgpath, NULL, 200, 100);
    //添加一条线到点200,200
    CGPathAddLineToPoint(cgpath, NULL, 200, 200);
    //添加路径到图形上下文
    CGContextAddPath(currentCotext, cgpath);
    // 画图形上下文的路径
    CGContextStrokePath(currentCotext);
    // release 掉 路径指针
    CGPathRelease(cgpath);
}
时间: 2024-10-10 15:43:31

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

Java使用POI对Excel进行基本操作(4)-Excel中绘制图片

1.在Excel中绘制图片 public static void main(String[] args) throws Exception { // 定义一个工作簿 Workbook workbook = new XSSFWorkbook(); // 创建一个sheet页 Sheet sheet = workbook.createSheet("第一个sheet页"); FileInputStream fis = new FileInputStream("E:\\桌面壁纸\\y

二维码生成,二维码中嵌套图片,文字生成图片

package com.fh.util; import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream; import javax.

利用PorterDuffXfermode绘制图片文字

PorterDuffXfermode是Android中用来对图层进行操作的类,类似于数学中的交集.并集,将上层(src)和下层(dst)进行特定的方式进行混合显示. 构造方法:PorterDuffXfermode(PorterDuff.Mode mode) 下图显示对应的PorterDuff.Mode所对应的效果 这次实现的图片文字是用的SrcIn模式,也就是先画文字然后画图,取其交集区域显示上层图层 完整代码展示 package com.yuyigufen.customview; import

H5在canvas中绘制图片时候遇到跨域问题

在前端绘制图片时需要用到其他服务器的图片,当然没有读取成功. 在网上一顿搜索,设置了图片允许跨域. img.crossOrigin = "Anonymous" 在调试中也可以看到图片,不过还是绘制失败.经过一波XXX式的试探和查找,找到一个解决方案. 在在iis中配置响应头,可能是之前获取图片的时候没有能够通过允许的类型. Access-Control-Allow-Credentials:true Access-Control-Allow-Headers:origin,x-reques

职场专业图片文字识别的方法,你知道吗

在职场中又一个专业的图片文字识别方法,工作不是经常整理图片文字的员工不知道,那就是使用一下专业的OCR文字识别软件,在加上专业的操作方法,就可以快速的把图片上的文字识别出来了.在平时生活中实现图片文字识别的方法不是很好用,而且操作步骤很繁琐,下面小编就分享一个专业的图片文字识别方法.工具和原料:1:带有文字的图片:2:OCR文字识别工具.操作方法:第一步:[打开OCR软件]:在电脑上打开文字识别软件,大家可以通过浏览器搜索关键词"迅捷OCR文字识别软件"找到OCR软件.第二步:[极速识

Xcode绘制图片水印

步骤: 0.加载原生图片; 1.获取上下文: 2.绘制原生图片: 3.给原生图片添加文字: 4.获取绘制后的图片: 5.关闭上下文 代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //1.加载原生图片 UIImage *image = [UIImage imageNamed:@"高圆圆"]; //

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

在开发中经常会碰到需要对按钮中的图片文字位置做调整的需求.第一种方式是通过设置按钮中图片文字的偏移量.通过方法setTitleEdgeInsets和setImageEdgeInsets实现 代码如下: /*!**方式一***/ - (void)updateBtnStyle_rightImage:(UIButton *)btn { CGFloat btnImageWidth = btn.imageView.bounds.size.width; CGFloat btnLabelWidth = btn

C# 使用Graphics绘制图片时发生闪烁的问题

在做某功能时,需要实现用鼠标滚轮放大缩小图片,直接在MouseWheel中绘制图片时发生闪烁 百度后顺利解决 几个步骤 1.设置Form的DoubleBuffered属性为True 2.在MouseWheel中调用 this.Invalidate()方法(会触发OnPaint事件) 3.重写OnPaint,在OnPaint中绘制需要绘制的图像 代码如下: public partial class Form1 : Form { int width, height; string path = "C

179在屏幕中绘制一个三角形

效果如下: ViewController.h 1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UIViewController 4 @end ViewController.m 1 #import "ViewController.h" 2 #import "KMTriangleView.h" 3 4 @interface ViewController () 5 - (void)layout