我试图了解石英2d坐标系,目前我正在阅读苹果参考指南和老书“mac x developer的quartz 2d图形”。
我理解了用户空间的概念和设备空间的概念,即设备空间可以有不同的默认坐标系,设备空间坐标不能被修改,我们通过修改用户空间的坐标系,加入设备空间来映射用户空间,以达到预期的效果。
mac x开发人员书中的石英2d图形显示:
在转换一个坐标系时,必须有另一个坐标系统来比较它。转换提供了一个从一个坐标系到另一个坐标系的相对映射。在转换后的坐标系中绘制时,转换将图形映射回第一个坐标系。该图形在固定坐标系中的出现受变换的影响。
我没有用粗体来表达这一点。
和
石英2D编程指南说:
石英通过一个独立的坐标系--用户空间--将其映射到输出设备的坐标系--设备空间--使用当前的转换矩阵( CTM )来实现设备独立。矩阵是一种用于有效描述一组相关方程的数学结构。当前变换矩阵是一种特殊类型的矩阵,称为仿射变换,它通过应用平移、旋转和缩放操作(移动、旋转和调整坐标系大小的计算)将点从一个坐标空间映射到另一个坐标空间。 当前转换矩阵有一个次要用途:它允许您转换对象的绘制方式。例如,要绘制旋转45度的框,在绘制框之前先旋转页面的坐标系( CTM)。Quartz使用旋转坐标系绘制输出设备。
混淆是“石英用旋转坐标系画到输出设备上”,如果我想画一个旋转的物体(图像等),另一个不旋转,那会发生什么呢?我们有整个坐标旋转,每一件东西都会画旋转吗?
我正在尝试不同的实验,但无法理解这一点,我在photoshop中创建了我绘制的两条线复制左下角坐标系的图像,然后添加到我的项目中,以查看坐标在drawrect方法中调用CGContextRotateCTM(myContext, 45);是如何运行的,但它并没有对我在xib文件中包含的图像做任何事情,我使用接口生成器将图像放置在uiimage中。
此代码来自石英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);但这段代码是在修改屏幕上绘制的文本,而不是我添加的图像?
这也来自Quartz 2D编程指南:
..。应用转换,将原点转换为PDF上下文的左上角,并将y坐标缩放为-1。 使用缩放变换来否定y坐标改变了石英绘图中的一些惯例。例如,如果调用CGContextDrawImage将图像绘制到上下文中,则图像在被绘制到目标时会被转换修改。..。
我已经在做这个-1件事,但对形象没有任何影响,而这-1件事对我来说还不清楚。
我已经读了几次这个文档,尝试搜索谷歌,但没有有用的教程,也没有最新的书籍,只有写在2004,2005,2006。任何一个人能在这方面提供帮助,或者给我提供有用的资源来深入学习。
拼命等待回复,真的需要帮助。谢谢。
发布于 2012-02-23 13:36:27
发布于 2012-02-23 07:58:02
您是在使用UIImageView子类并重写drawRect吗?这是不支持的(请参阅文档),这可能是图像不受任何转换影响的原因。
如果您想要进行大量的转换和定制绘图代码,那么您应该使用UIView子类并使用CGContextDrawImage()手动绘制映像。
任何转换都应用于在转换之后完成的绘图操作。您将在文档中看到代码示例,其中保存图形状态,应用转换,完成一些绘图,然后恢复上下文。这是如何绘制一些组件旋转和一些没有。
希望你的问题的第二部分会变得清楚,一旦你画你的图像通过CG代码,而不是通过图像视图。
https://stackoverflow.com/questions/9408498
复制相似问题