iphone中Quarz 2D的使用

1.可以依靠两个不同的库来满足我们绘图的需要,一个库是Quartz 2D,它是Core Graphics框架的一部分;另一个库是OpenGL ES,它是跨平台的图形库。

 

2.OpenGL ES是跨平台图形库OpenGL的简化版、OpenGL ES是OpenGL的一个子集,OpenGL ES是专为iphone之类的嵌入式系统(因此缩写为字母ES)设计的。

 

3.Quartz是一组函数、数据类型以及对象,专门用于直接在内存中对视图或图像进行绘制。Quartz将正在绘制的视图或图像视为一个虚拟的画布,并遵循所谓的绘画者模型。

 

4.OpenGL ES以状态机的形式实现,OpenGL ES不允许执行直接影响视图、窗口或图像的操作,它维护一个虚拟的三维世界。当向这个世界中添加对象时,OpenGL会跟踪所有对象的状态

 

5.Quartz相对比较容易使用。它提供了各种直线、形状以及图像绘制函数。尽管易于使用,但Quartz 2D仅限于二维绘图。尽管许多Quartz函数会在绘图时利用硬件加速,但无法保证在Quartz中执行的任何操作都得到了加速。

 

6.尽管OpenGL非常复杂,并且概念上也比较难理解,但是它的强大性是毫无疑问的。它同时提供了二维和三维绘图工具。他经过专门设计,目的是为了充分利用硬件加速。它还非常适用于编写游戏和其他复杂的、图形密集的程序。

 

7.使用Quartz绘制图形时,通常会向绘制图形的视图中添加绘图代码。例如,可能会创建UIView的子类。并向该类的drawRect:方法中添加Quartz函数调用。drawRect:方法是UIView类定义的一部分,并且每次需要重绘视图时都会调用该方法。如果在drawRect:中插入Quartz代码,则会先调用改代码,然后重绘视图。

 

7.在Quartz 2D中,和在其他Core Graphics中一样,绘图是在图形上下文中进行的,通常,只称为上下文。

 

8下面这行代码将检索当前上下文:

            CGContextRef context=UIGraphicsGetCurrentContext();

 

9.我们使用Core Graphics C函数,而不是使用Objective-C对象来绘图。Core Graphics和OpenGL都是基于C的API的,因此大多数代码将由C函数调用组成。

 

10.在Core Graphics中,有两种颜色与绘图操作关联:笔画颜色和填充颜色。笔画颜色用于绘制直线以及形状的轮廓,填充颜色用于填充形状。

 

11.根据苹果公司发布的“iPhone人机界面指南”,导航栏是专门放在屏幕顶部的,而工具栏则是专门放在底部的。

 

11.如果想在iphone应用程序中,使用Quartz来绘制图形,需要在view中添加drawRect方法。drawRect方法是系统的方法

            -(void) drawRect:(CGRect) rect{

                        ……

            }

 

12. -(void) drawRect:(CGRect *) rect{

            //得到当前上下文

            CGContextRef context=UIGraphicsGetCurrentContext();

            //设置画笔的宽度

            CGContextSetLineWidth(context,2.0);

            //设置画笔的颜色

            CGContextSetStrokeColorWithColor(context, self.currentColor.CGColor);

            //设置画笔的画出图形的填充色

            CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);  

            switch (shapeType) {

                        //绘制直线

                        case kLineShape:

                                    //从哪一点开始

                                    CGContextMoveToPoint(context,firstTouch.x,firstTouch.y);

                                    //到哪一点结束

                                    CGContextAddLineToPoint(context, lastTouch.x,lastTouch.y);

                                    //绘制

                                    CGContextStrokePath(context);

                                    break;

                        //绘制长方形(正方形)

                        case kRectShape:

                                    //在当前用户滑动的文本框内添加一个长方形(正方形)

                                    CGContextAddRect(context, [self getRect]);

                                    //绘制

                                    CGContextDrawPath(context, kCGPathFillStroke);

                                    break;

                        //绘制圆形

                        case kEllipseShape:

                                    //在当前用户滑动的文本框内添加一个圆形

                                    CGContextAddEllipseInRect(context, [self getRect]);

                                    CGContextDrawPath(context, kCGPathFillStroke);

                                    break;

                        //绘制图形 其中drawImage是UIImage类型

                        case kImageShape:{

                                    //设置水平偏移量

                                    CGFloat horizontalOffset=drawImage.size.width/2;

                                    //设置数值偏移量

                                    CGFloat verticalOffset=drawImage.size.height/2;

                                    CGPoint drawPoint=CGPointMake(lastTouch.x-horizontalOffset,lastTouch.y-verticalOffset);

                                    //开始绘制

                                    [drawImage drawAtPoint:drawPoint];

                                    break;}

                        default:

                                    break;

            }

}

以下是代码:

在UIView的子类中添加如下代码
 1 - (void)drawRect:(CGRect)rect
 2 {
 3     //得到当前上下文
 4     CGContextRef context=UIGraphicsGetCurrentContext();
 5     //设置画笔的粗细
 6     CGContextSetLineWidth(context, 2);
 7     //设置画笔的颜色
 8     CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
 9     //设置填充色
10     CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
11     
12     //画线
13     [self drawLine:context];
14     //画矩形
15     [self drawrectShape:context];
16     //画圆
17     [self drawEllipseShape:context];
18     //画图片
19     [self drawImage];
20     //写字
21     [self drawText];
22     //画弧形
23     [self drawArc:context];
24 }
25 
26 
27 //画线
28 -(void) drawLine:(CGContextRef) context{
29     UIGraphicsPushContext(context);
30 
31     //将画笔移动至点x=20 y=20
32     CGContextMoveToPoint(context, 20, 20);
33     //将画笔从点x=20 y=20 移动至点 x=300 y=300
34     CGContextAddLineToPoint(context, 300, 300);
35     //画线
36     CGContextStrokePath(context);
37     
38     UIGraphicsPopContext();
39 }
40 
41 //画矩形
42 -(void) drawrectShape:(CGContextRef) context{
43     UIGraphicsPushContext(context);
44     //添加一个CGRect为(30, 190, 100, 50)的矩形
45     CGContextAddRect(context, CGRectMake(30, 190, 100, 50));
46     //画矩形   第二个参数可以为:kCGPathFill,kCGPathEOFill,kCGPathStroke,kCGPathFillStroke,kCGPathEOFillStroke 表示填充的方式
47     CGContextDrawPath(context, kCGPathFillStroke);
48     UIGraphicsPopContext();
49 }
50 
51 //画圆
52 -(void) drawEllipseShape:(CGContextRef) context{
53     UIGraphicsPushContext(context);
54     //添加一个在矩形CGRect区域(80, 30, 100, 50)中的圆
55     CGContextAddEllipseInRect(context, CGRectMake(80, 30, 100, 50));
56     CGContextDrawPath(context, kCGPathFillStroke);
57     
58     UIGraphicsPopContext();
59 }
60 
61 //写字
62 -(void) drawText{
63     UIFont *font=[UIFont fontWithName:@"Arial" size:16.0];
64     
65     NSString *str=[[NSString alloc] initWithString:@"大家好!"];
66     [[UIColor yellowColor] set];//设置字体颜色
67     [str drawAtPoint:CGPointMake(100, 100) withFont:font];
68     [str release];
69 }
70 
71 //画图片
72 -(void) drawImage{
73     UIImage *image=[UIImage imageNamed:@"money.png"];
74     [image drawInRect:CGRectMake(20, 100, 100, 100)];
75 }
76 
77 //画弧形
78 -(void) drawArc:(CGContextRef) context{
79     CGContextBeginPath(context);   
80     CGContextSetRGBStrokeColor(context, 0, 1, 0, 1); 
81     //第一个参数context为当前上下文,第二个参数和第三个参数为圆心坐标点,第四个参数为半径,
82     //第五个参数和第六个参数是开始的弧度和结束的弧度,最后一个参数0表示顺时针,1表示逆时针
83     CGContextAddArc(context, 100, 100, 100, 0* PI/ 180, 360* PI/ 180, 0);   
84     CGContextStrokePath(context);        
85 }

 

posted on 2012-04-29 19:22  iYiming  阅读(645)  评论(0编辑  收藏  举报

导航