Mac OS X Какао, переключение координат Y в глобальном пространстве координат экрана - PullRequest
1 голос
/ 01 августа 2011

Как перевернуть значение y точки NSP в перевернутое координатное пространство.

У меня есть два источника точек, оба в глобальном пространстве экрана, но один перевернут:

  1. один из координатного пространства экрана с 0,0 = верхним левым.

  2. один из координатного пространства экрана с 0,0 = внизу слева.

Мне нужно перевернуть второй (внизу слева), чтобы он находился в том же месте, что и первый, вверху слева. Как я могу сделать это на NSPoint или CGPoint?

Ответы [ 3 ]

3 голосов
/ 12 декабря 2015

Для Mac OSX Cocoa вы можете перевернуть y Координату для вида, просто переопределите isFlipped, чтобы вернуть YES для каждого вида:

- (BOOL)isFlipped {
    return YES;
}
1 голос
/ 24 июля 2017

Если у вас несколько мониторов, общая высота глобального координатного пространства может быть больше, чем вертикальная высота на любом отдельном дисплее. Я посчитал необходимым использовать следующий код (указанный 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)
1 голос
/ 20 марта 2017

Допустим, у вас есть точка в левом нижнем координатном пространстве, которая называется «оригинальная точка». Чтобы перевернуть эту точку в верхнее левое координатное пространство, вы можете использовать следующий код:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...