- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Cocoa 图表算法1
Cocoa 图表算法1
Quartz 介绍
Quartz 是 Cocoa 全部图表算法的核心。它是图表算法数据结构和画图的基础,也是 Mac OS
X 的窗口服务器。
此入门级的教程会介绍 Cocoa 图表算法的基本概念,包括:矩形,点,颜色和系统坐标。
矩形和点
在 Quartz 的所有绘图包括矩形。在 Cocoa,你可以用 NSRect 结构去描述一个矩形的位置
和尺寸:
(矩形不能自动进行描绘。在下面的例子中带有图表说明)
typedef struct {
NSPoint origin;
NSSize size;
} NSRect ;
// 在原点画一个 20x20 大小的正方形。
NSRect myRect;
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 ;
// 画三个点
NSPoint point1;
point1.x = 4;
point1.y = 11;
NSPoint point2;
point2.x = 12;
point2.y = 21;
NSPoint point3;
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,高 100
NSSize 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 = [NSValue valueWithRect: newRect];
NSMutableArray * myArray = [NSMutableArray array];
[myArray addObject: rectObject];
NSRect originalRect = [[
文档评论(0)