NSRect等绘图用法.docx_第1页
NSRect等绘图用法.docx_第2页
NSRect等绘图用法.docx_第3页
NSRect等绘图用法.docx_第4页
NSRect等绘图用法.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Quartz 介绍Quartz 是 Cocoa 全部图表算法的核心。它是图表算法数据结构和画图的基础,也是 Mac OS X 的窗口服务器。此入门级的教程会介绍 Cocoa 图表算法的基本概念,包括:矩形,点,颜色和系统坐标。矩形和点在Quartz 的所有绘图包括矩形。在 Cocoa,你可以用NSRect结构去描述一个矩形的位置和尺寸:(矩形不能自动进行描绘。在下面的例子中带有图表说明)typedef struct NSPoint origin;NSSize size;NSRect;/ 在原点画一个 20x20 大小的正方形。NSRectmyRect;myRect.origin.x = 0;myRect.origin.y = 0;myRect.size.width = 20;myRect.size.height = 20;原点是画矩形开始的地方。点由NSPoint 来描述,有坐标 x 和 y:typedef struct float x;float y;NSPoint;/ 画三个点NSPointpoint1;point1.x = 4;point1.y = 11;NSPointpoint2;point2.x = 12;point2.y = 21;NSPointpoint3;point3.x = 19;point3.y = 8;矩形的大小区域是一个NSSize,包含了长和宽。没有办法去描述一个 NSSize 实例,它必须作为矩形的一部分来使用。typedef struct float width;float height;NSSize;Cocoa 大部分的两维画图是基于以上三个机构。注意,它们不是 Objective-C 的类。你能直接在这些结构里调用方法,但是函数的形式。所有在 Quartz 的尺寸都是 float 值,这比整形的坐标更好地控制画图。简单的函数Cocoa有很多创建几何机构的函数。大部分列在NSGeometry.h文件的函数库里。/ 在坐标(20,20)处画一个点NSPoint newPoint =NSMakePoint( 20, 20 );/ 面积大小为为长 100,高 100NSSize newSize =NSMakeSize( 100, 100 );/ 利用前面的点和面积画一个矩形NSRect newRect =NSMakeRect( newPoint.x,newPoint.y,newSize.width,newSize.height );/ 也可以这样写NSRect newRect =NSMakeRect( 20, 20, 100, 100 );使用这些函数来创建结构,而不是手动来画,令代码清楚,搜索更方便。Quartz 中的坐标Cocoa 里画图的区域被作为一个矩形。Quartz 调用这个画图区域“bounds”。一个 NSPoint 点就能描绘 bounds 视图的任何位置。标准的 Quartz 系统坐标是基于 PDF 模式,也就是说画图要从左下角开始。这就是你在几何教科书里面看到的。有时候,如果原点在左上角,写画图代码更容易。例如,这和设计网页的原理一样。Quartz 调用这个倒装的系统坐标。使用 NSView 的convertPoint:fromView:和convertPoint:toView: 方法,就能对标准视图和倒装视图的点进行置换。矩形作为一个对象因为矩形不是对象,你不能直接地保存几何机构到一个 NSArray, NSDictionary, 或者 NSSet,但你能把他们包在一个 NSValue 对象里:NSRect newRect = NSMakeRect ( 20, 20, 100, 100 );NSValue *rectObject= NSValuevalueWithRect: newRect;NSMutableArray * myArray = NSMutableArray array;myArray addObject:rectObject;NSRect originalRect = myArray objectAtIndex: 0rectValue;NSValue 的方法与 NSPoint 和 NSSize 的方法相似。你也能用NSStringFromRect函数来记载矩形的信息:NSRect newRect = NSMakeRect ( 20, 20, 100, 100 );NSLog (%,NSStringFromRect( newRect );另外一个函数NSRectFromString对带有合适格式的矩形描述返回一个矩形。这两个函数在 NSPoint 和 NSSize 里面也有。派生的矩形Cocoa 提供函数来创建新基于原来矩形的新矩形。下面介绍如何得到一个和原矩形有相同尺寸的矩形,但新矩形下右下方偏移。(offset)/ 创建一个矩形,在坐标(5x5)处得到新矩形NSRect rect1;rect1.origin.x = 0;rect1.origin.y = 0;rect1.size.width = 30;rect1.size.height = 25;NSRect rect2;rect2 =NSOffsetRect( rect1, 5, 5 );如果你想往相反方向移动,只要给 offset 设定负值就可以。下面介绍如何获得两个矩形的重叠区域:/ 获得两个矩形重叠的区域NSRect rect1;rect1.origin.x = 0;rect1.origin.y = 0;rect1.size.width = 30;rect1.size.height = 25;NSRect rect2;rect2 = NSOffsetRect ( rect1, 5, 5 );NSRect rect3;rect3 =NSIntersectionRect( rect1, rect2 );下面介绍如何去创建一个矩形,它包着两个其他的矩形(union 在一起)。/获得一个包含两个矩形的矩形NSRect rect1;rect1.origin.x = 0;rect1.origin.y = 0;rect1.size.width = 30;rect1.size.height = 25;NSRect rect2;rect2 = NSOffsetRect ( rect1, 5, 5 );NSRect rect3;rect3 =NSUnionRect( rect1, rect2 );如果你想创建一个外边界,一个嵌入矩形是很有用的,然后创建一个矩形来放内部的内容:/ 获得一个收缩的矩形NSRect rect1;rect1.origin.x = 0;rect1.origin.y = 0;rect1.size.width = 30;rect1.size.height = 25;NSRect rect2;rect2 =NSInsetRect( rect1, 5, 5 );对比矩形和点有一组函数来检查点和矩形的同等之处,和检查点和矩形是否在其他的矩形里面一样。NSRect rect1;rect1.origin.x = 0;rect1.origin.y = 0;rect1.size.width = 30;rect1.size.height = 25;NSPoint point1 = NSMakePoint ( 8,21 );BOOL isInRect;isInRect =NSPointInRect( point1, rect1 );下面表格列出了最常用的函数比较。这些函数都会返回一个值 YES 或者 NO。Comparison FunctionsNSEqualRectsAre rects identical?NSEqualPointsAre points identical?NSEqualSizesAre sizes identical?NSContainsRectDoes the first rect contain the other?NSIntersectsRectDo the rects at least partially overlap?NSPointInRectIs the point inside the rect?NSMouseInRectIs the mouse cursor in this rect?NSIsEmptyRectIs the rect empty (no area)?这些函数能在 NSGeometry.h 文件找到。画图NSRects 和 NSPoints 只是描述几何体,他们并不能执行画图。让我们来看看一些在 NSGraphics.h 文件的基本画图函数。NSColor * gray = NSColor grayColor;NSColor * white = NSColor whiteColor;/ 填充背景色gray set;NSRectFill( self bounds );/ 填充目标矩形NSRect rect1 = NSMakeRect ( 21,21,210,210 );white set;NSRectFill( rect1 );结果如下:上面的例子使用了NSColor类。当你在颜色对象调用 -set方法时,Quartz 使用它在所有的画图,直到你 set 一个新的颜色为止。下面介绍如何去画矩形的边缘:NSColor * gray = NSColor grayColor;NSColor * white = NSColor whiteColor;/ 填充背景色gray set;NSRectFill ( self bounds );/ 画矩形边缘NSRect rect1 = NSMakeRect ( 21,21,210,210 );white set;NSFrameRectWithWidth( rect1, 1 );结果如图:你也能调用 NSFrameRect 使用默认的线宽度。画组图一次性画一组矩形比一个个矩形来调用 NSRectFill 更快。下面介绍一个包含更多用法的例子,构建C 语言风格的 NSRects 和 NSColor 数组,然后传递这两个数组到NSRectFillListWithColors。/ 基础定义NSColor grayColor set;NSRectFill ( self bounds );int count = 12;NSRect startingRect = NSMakeRect ( 21,21,50,50 );/ 创建矩形和颜色数组NSRect rectArray count;NSColor * colorArraycount;rectArray 0 = startingRect;colorArray0 = NSColor redColor;/ 填充数组int i;NSRect oneRect = rectArray0;for ( i = 1; i NSMaxX(self bounds) )oneRect.origin.x = startingRect.origin.x;oneRect.origin.y += 100;/ 矩形递增rectArray i = oneRect;/ 颜色递增colorArrayi = NSColorcolorWithCalibratedHue: (i*0.04)saturation: 1brightness: 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论