【问题标题】:Mac OS X Cocoa, Flipping Y Coordinate in Global Screen Coordinate SpaceMac OS X Cocoa,在全局屏幕坐标空间中翻转 Y 坐标
【发布时间】:2011-08-01 16:42:08
【问题描述】:

如何将 NSPoint 的 y 值翻转到翻转的坐标空间。

我有两个点源,都在全局屏幕空间中,但一个是翻转的:

  1. 屏幕坐标空间中的一个,0,0 = 左上角。

  2. 屏幕坐标空间中的一个,0,0 = 左下角。

我需要将第二个(左下角)翻转到与第一个相同的空间,左上角。如何在 NSPoint 或 CGPoint 上做到这一点?

【问题讨论】:

    标签: cocoa macos coordinates coordinate-systems


    【解决方案1】:

    对于 Mac OSX Cocoa,您可以翻转 y 坐标以获得视图,只需覆盖 isFlipped 即可为每个视图返回 YES

    - (BOOL)isFlipped {
        return YES;
    }
    

    【讨论】:

      【解决方案2】:

      如果您有多个显示器,则全局坐标空间的总高度可能大于任何单个显示器的垂直高度。我发现有必要使用以下代码(给定originalPoint)来找到它:

      let globalHeight = screens.map {$0.frame.origin.y + $0.frame.height}.max()!
      let flippedY = globalHeight - originalPoint.y
      let convertedPoint = NSPoint(x: originalPoint.x, y: flippedY)
      

      【讨论】:

        【解决方案3】:

        假设您在左下角坐标空间中有一个点,称为“originalPoint”。要将这个点翻转到左上角坐标空间,可以使用如下代码:

        let screenFrame = (NSScreen.main()?.frame)!
        let flippedY = screenFrame.size.height - originalPoint.y
        let convertedPoint = NSPoint(x: originalPoint.x, y: flippedY)
        

        我们也可以做一个扩展:

        extension NSPoint {
        
            var flipped: NSPoint {
        
                let screenFrame = (NSScreen.main()?.frame)!
                let screenY = screenFrame.size.height - self.y
                return NSPoint(x: self.x, y: screenY)  
            }
        }
        

        用途:

        let flippedPoint = originalPoint.flipped
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-01
          • 2015-04-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多