翻转Y轴?

时间:2013-10-05 14:41:17

标签: ios cocoa-touch cocos2d-iphone coordinates

可可触摸的坐标方式在左上角是0,0。我想知道的是,是否有可能“翻转”它以便0,0位于左下角?

我希望协调系统像cocos2d一样,0,0点位于左下角。是否有可能在可可触摸中实现这一点?

1 个答案:

答案 0 :(得分:2)

你问了一个关于“可可”的问题,但实际上,Cocoa长期以来在翻转和未翻录的视图之间有着非常明显的区别。在Cocoa中,您只需要override a method。 (并且在Cocoa中“翻转”意味着Cocoa Touch的做法。默认 - “未解开”-in Cocoa是左下角的原点。)

但你不是在编程Cocoa;你正在编写Cocoa Touch。

所以,你有一个翻转的上下文,大概是因为你从UIKit得到它(你创建的CGContexts没有通过UIKit被解开),你需要解开它。 (或者你有一个没有解开的背景,想要翻转它。)

无论哪种方式,解决方案都是一样的:

  1. 按上下文/视图的整个高度向上/向下(正y)进行翻译。
  2. 将y轴缩放-1。
  3. 翻译起源于此;翻译整个高度将原点移动到对角。

    缩放改变轴;将y轴缩放为负1会将其向相反方向翻转,因此向上翻转的是向下,反之亦然。

    这就是你如何从左上角原点到左下角翻转(或解除)上下文,反之亦然。

    无法使用或不应该尝试的事情:

    • 在图层上设置geometryFlipped。它会影响子图层,但不会影响自定义图形。 (当然,如果你的所有“绘图”都是形状图层,文本图层和普通图层,那么你可以设置这个属性而不用担心变换。)
    • 覆盖CALayer子类中的contentsAreFlipped。文档说不要这样做。
    • 设置视图或其图层的transform。文档说明transform应用于的坐标空间的原点位于中心(或anchorPoint),而不是角落。这很诱人,但我希望随之而来的是欢闹。