我正在尝试了解石英2d坐标系,目前我正在阅读Apple参考指南和旧书"Quartz 2d graphics for mac os x developer".
我理解用户空间和设备空间概念的概念,设备空间可以有不同的默认坐标系,设备空间坐标不能修改,我们通过修改其坐标系加入设备空间来映射用户空间实现欲望的结果.
用于mac os x开发者书的Quartz 2d图形说:
变换坐标系时,必须有另一个坐标系来与之进行比较.转换提供从一个坐标系到另一个坐标系的相对映射.在变换后的坐标系中绘制时,变换会将图形映射回第一个坐标系.固定坐标系中该图形的外观受到转换的影响.
我没有大胆地提到这一点.
和
Quartz使用单独的坐标系 - 用户空间 - 使用当前变换矩阵或CTM将其映射到输出设备 - 设备空间的坐标系来实现设备独立性.矩阵是用于有效地描述一组相关方程的数学构造.当前变换矩阵是称为仿射变换的特定类型的矩阵,其通过应用平移,旋转和缩放操作(移动,旋转和调整坐标系的大小的计算)将点从一个坐标空间映射到另一个坐标空间.
当前转换矩阵具有次要目的:它允许您转换对象的绘制方式.例如,要绘制一个旋转45度的框,可以在绘制框之前旋转页面的坐标系(CTM).Quartz使用旋转坐标系绘制到输出设备.
令人困惑的是"Quartz使用旋转的坐标系统绘制到输出设备.",如果我想绘制一个旋转的对象(图像等)而旋转其他旋转则会发生什么?我们有旋转的整个坐标旋转的每个东西都会旋转吗?
我正在尝试不同的实验,但无法绕过这个,我创建了一个图像,我在Photoshop中绘制了两行复制左下角坐标系,然后添加到我的项目中,通过调用CGContextRotateCTM(myContext, 45);drawrect方法可视地看到坐标是如何表现的,但它没有对使用界面生成器在uiimage中放置图像而包含在xib文件中的图像做任何事情.
此代码来自石英2D编程指南
CGContextRef myContext = UIGraphicsGetCurrentContext();
CGRect contextRect = self.bounds;
CGContextTranslateCTM(myContext, 0, contextRect.size.height);
CGContextRotateCTM(myContext, 45); //my modification
CGContextScaleCTM(myContext, 1, -1);
float w, h;
w = contextRect.size.width;
h = contextRect.size.height;
CGAffineTransform myTextTransform;
CGContextSelectFont (myContext, "Helvetica-Bold", h/10, kCGEncodingMacRoman);
CGContextSetCharacterSpacing (myContext, 10);
CGContextSetTextDrawingMode (myContext, kCGTextFillStroke);
CGContextSetRGBFillColor (myContext, 0, 1, 0, .5);
CGContextSetRGBStrokeColor (myContext, 0, 0, 1, 1);
myTextTransform = CGAffineTransformMakeRotation(0);
CGContextSetTextMatrix (myContext, myTextTransform);
CGContextShowTextAtPoint (myContext, 0, 50, "Quartz 2D", 9);
Run Code Online (Sandbox Code Playgroud)
但是这段代码修改了屏幕上绘制的文字而不是我添加的图片?
这也来自Quartz 2D编程指南:
...应用一个转换,将原点转换为PDF上下文的左上角,并将y坐标缩放-1.
使用缩放变换来否定y坐标会改变Quartz绘图中的一些约定.例如,如果调用CGContextDrawImage将图像绘制到上下文中,则在将图像绘制到目标时,图像将被变换修改....
我已经做了这件事-1但对图像没有影响,这件事情仍然不清楚.
我已多次阅读此文档,尝试在谷歌搜索但没有有用的教程,也没有最新的书籍只有2004年,2005年,2006年的书籍.任何人都可以帮助这个或者可以参考我有用的资源来深入学习这个.
拼命等待回复,真的需要帮助.谢谢.
| 归档时间: |
|
| 查看次数: |
6360 次 |
| 最近记录: |