iphone - 如何补偿核心显卡坐标系翻转,方便绘图?

标签 iphone core-graphics

这确实很痛苦,但是当我在 -drawRect: 中绘制 UIImage 时,它​​总是颠倒的。

当我翻转坐标时,图像绘制正确,但代价是所有其他 CG 函数绘制“错误”(翻转)。

当你必须绘制图像和其他东西时,你的策略是什么?有什么经验法则可以避免一次又一次陷入这个问题吗?

此外,当我翻转 y 轴时,一件令人讨厌的事情是,UIImageView 框架中的 CGRect 是错误的。原点没有像预期那样出现在左上角 10,10,而是出现在底部。

但与此同时,CGContext 的所有正常画线函数都采用正确的坐标。在 -drawRect 中以左上角为原点 10,10 绘制一条线,实际上会从左上角开始。但同时这也很奇怪,因为核心显卡实际上有一个翻转的坐标系,y 0 位于底部。

所以看起来有些东西确实不一致。使用 CGContext 函数绘图将坐标视为“预期”(来吧,没有人认为坐标是从左下角开始的,这很愚蠢),而绘制任何类型的图像仍然以“错误”的方式工作。

你使用辅助方法来绘制图像吗?或者有什么有用的东西可以让图像绘制不再是一件痛苦的事情?

最佳答案

问题:原点在左下角;正 y 向上(负 y 向下)。
目标:原点在左上角;正 y 向下(负 y 向上)。

解决方案:

  1. 将原点向上移动 View 的高度。
  2. 对 y 轴取负值(乘以 -1)。

在代码中执行此操作的方法是 translate向上移动 View 边界的高度和 scale按 (1, -1) 的顺序。

Quartz 2D Programming Guide 有几个部分与此主题相关的,包括 “Drawing to a Graphics Context on iPhone OS”和整个chapter on Transforms 。当然,您确实应该阅读整篇文章。

关于iphone - 如何补偿核心显卡坐标系翻转,方便绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2695262/

相关文章:

ios - 我可以通过 iAds 和应用内购买来删除单个应用中的广告吗?

macos - 为什么 TrueType 字体在 Mac 上仅使用 "Quadratic Curves"?

iphone - 如何遵守自制协议(protocol)?

iphone - 如何通过 iPhone 设备使用 Time Profiler 仪器

iphone - 直接发布到应用程序的墙上

ios - 为 UIView 的 CoreGraphics/drawRect 内容制作动画

cocoa-touch - 插值 CGAffineTransform

objective-c - 测试屏幕保护程序是否正在运行或工作区是否已锁定

iphone - 如何避免在 Core Graphics 中调用 png_read_filter_row 和 transform_premul_argb_fn?

ios - 在 Swift Parse SDK 中使用 Pointer<_User> 进行查询