覆盖drawRect
时,我发现那里的坐标使用0,0作为左上角。
但Apple UIView编程指南说明了这一点:
某些iOS技术定义了默认坐标系,其原点和方向与UIKit使用的坐标系不同。例如,Core Graphics和OpenGL ES使用坐标系,其原点位于视图或窗口的左下角,其y轴相对于屏幕向上指向。
我很困惑;当他们在这里引用Core Graphics时,他们是在谈论与Quartz不同的东西吗?
答案 0 :(得分:8)
本文档中的“核心图形”意味着“Quartz”,是的。这只是过于简单化了。
当您自己创建CGContext
时,其坐标系的原点位于左下角。当UIKit创建用于绘制视图的CGContext
时,它会在调用-drawRect:
之前有助于翻转坐标系。
答案 1 :(得分:3)
就坐标而言,iOS上的Core Graphics和Quartz是同样的东西。 iOS Technologies Guide这样说:
核心图形(也称为Quartz)......
Core Graphics框架(CoreGraphics.framework)包含Quartz 2D绘图API的接口。 Quartz与Mac OS X中使用的高级矢量绘图引擎相同。
区别在于,技术上,Quartz是技术或机制,“Core Graphics”是框架的名称。 (在Mac OS上,当然,实际上有一个“Quartz”框架,它只是一个保护伞。)
答案 2 :(得分:3)
为了其他人找到这个主题的好处:
这里有一个坐标系的完整说明:Coordinate Systems in Cocoa
他们的不同并不完全有用。有一些方法可以在您的应用程序中的各种视图级别的坐标系之间进行转换!例如,这将在缩放图像上的可见屏幕中找到它在(20,20)处的点的坐标。结果是相对于缩放图像的原点,现在可能在空间中偏离。
croppingFrame.origin = [self convertPoint:CGPointMake(20.0, 20.0) fromCoordinateSpace:(self.window.screen.fixedCoordinateSpace)];