您的位置:首页 > 其它

iphone中的绘图相关资料

2013-01-05 19:02 218 查看
文章出处: http://donbe.blog.163.com/blog/static/138048021201043093737950/
iphone中

主要通过下面的几个技术来绘图

OpenGL, Quartz, UIKit, or Core Animation

UIKit 是非线程安全的,所以最好把所有的绘图都放在主线程上执行

不管使用的哪个技术来绘图,所有的绘图都是在 UIView object 中进行, view决定绘图在那里进行

绘画周期

当一个view需要更新某一部分内容的时候,view会请求 drawRect: 方法

在view第一次请求drawRect方法的时候,传递的rectangle 参数一般是view的整个rectangle ,后续更新的时候,传递的一般是

需要更新的那部分rectangle 

在几种情况下,view会重新绘图

1。移动或者移除另外一个view

2。设置view的hidden 属性为NO, view重新出现

3。滚动view,当滚出或者滚进来的时候

4。明确的请求setNeedsDisplay和setNeedsDisplayInRect:方法

当请求了一个 drawRect:方法,view会标志自己已经被更新了,然后等待下一个更新请求的到达

坐标系统

current transformation matrix (CTM)

默认坐标原点是左上角

如果需要改变坐标系统

有两种方法

1。CGContext Reference :http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html#//apple_ref/doc/uid/TP30000950

2。CGAffineTransform :http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/reference.html#//apple_ref/c/tdef/CGAffineTransform

图形上下文(Graphics Contexts)

当请求drawRect:方法 ,view object会自动配置图形环境,作为环境的一部分,uiview会创建一个图形上下文(a CGContextRef opaque type)

图形上下文定义基本图形属性,如颜色,剪切区域,线的宽度和样式信息,字体信息,合成选项,等等。

也可以自己创建图形上下文用 CGBitmapContextCreate 或者 CGPDFContextCreate 函数

需要注意的是,自己创建的图形上下文的原点是在左下角

CGContextSetRGBStrokeColor and CGContextSetRGBFillColor两个函数设置当前的笔锋色和填充色.

iphone支持的图形格式

.png

.tiff, .tif

.jpeg, .jpg

.gif

.bmp, .BMPf

.ico

.cur

.xbm

绘画技巧

1。部分更新: 假如在 drawRect: 中,更新rectangle 中的部分

2。如果一个view中没有透明部分,那么把 opaque 属性设置为 YES,这样会省很多的cpu

3。如果一张png图片没有任何透明的部分,那么久删除alpha通道,这样渲染的时候会省很多功夫

4。滚动的时候重用table cells和views

5。正常情况下,在view请求 drawRect: 之前都会清除current context buffer,来更新相同区域.如果在滚动的时候,反复的清除,

很浪费时间,这样的话就把view的clearsContextBeforeDrawing 设置成NO.

6。在绘图的时候,尽量少的图形状态改变.因为改变绘图状态需要window的server

提高图片质量

1。首选png图片格式

2。使用图片的时候,尽量的不要去改变大小,假如需要使用这个图片在很多地方,那么尽量使用和他们比较接近的图片大小的图片

Quartz 是Core Graphics的心脏, 主要提供以下东西

Graphics contexts

Paths

Images and bitmaps

Transparency layers

Colors, pattern colors, and color spaces

Gradients and shadings

Fonts

PDF content

更多的详细内容在:http://developer.apple.com/iphone/library/documentation/CoreGraphics/Reference/CoreGraphics_Framework/index.html#//apple_ref/doc/uid/TP40007127

UIKit 是在Quartz的基本功能上的封装.他主要提供以下类

1。UIImage

2。UIColor

3。UIFont

4。UIScreen

5。生成png或者jpeg,用UIImage表现出来的函数

6。画矩形,和剪裁绘图区域的函数

7。改变和获取当前的图形上下文

更多的内容在:http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIKit_Framework/index.html#//apple_ref/doc/uid/TP40006955

配置图形上下文

在drawRect:中,view已经自动的为我们创建了图形上下文,我们可以通过函数UIGraphicsGetCurrentContext 获取.



 

图形上下文使用堆栈来保存图像状态,CGContextSaveGState函数保存当前图像状态

CGContextRestoreGState函数来回到前面的版本

图片的绘画和创建

下面的几个场景,最好使用下面的方法

1>当view中只有一张图片,那么使用UIImageView 来加载图片

2>用代码创建一张图片

两种方法,

1, 先用UIGraphicsBeginImageContext 创建一个基于图片的图形上下文

画好图形后,用UIGraphicsGetImageFromCurrentImageContext 函数,生成图片

画完,最后用UIGraphicsEndImageContext 关闭图形上下文

2。用CGBitmapContextCreate 创建图形上下文,

在上面画图片,用CGBitmapContextCreateImage 创建CGImageRef 

最后用CGImageRef来创建 UIImage 

3>把一张图片保存为jpg或者png

加载一张图片,然后用UIImageJPEGRepresentation 或者UIImagePNGRepresentation 函数获取加载的图片的NSData ,然后用

NSData生成png或者jpg 

创建和绘制路径

一个路径是一个二维几何场景,

UIKit 中包含 UIRectFrame UIRectFill 这 两个方法来创建简单的路径,比如矩形.

Core Graphics中还包含了椭圆,等等.

CGContextBeginPath 来创建一个基于路径的图形上下文,然后开始创建路径

完事后,生成 CGPathRef 或者 CGMutablePathRef 

最后用CGContextStrokePath 和CGContextFillPath 填充颜色.

参考:http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/GraphicsandDrawing/GraphicsandDrawing.html#//apple_ref/doc/uid/TP40007072-CH10-SW7
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: