Как вы переворачиваете систему координат NSView? - PullRequest
28 голосов
/ 18 апреля 2009

Я создал NSScrollView в конструкторе интерфейсов, который имеет переменное количество полууниверсальных NSView, которые можно программно добавлять и удалять из него. Когда я добавляю subViews к documentView, они появляются в левом нижнем углу вместо левого верхнего угла. Я вижу, что вы можете проверить isFlipped bool, чтобы выяснить, перевернута ли система координат представления, но я не могу найти способ установить его как перевернутый

Кто-нибудь знает, что мне не хватает?

Ответы [ 4 ]

46 голосов
/ 18 апреля 2009

В вашем NSView подклассе переопределите isFlipped:

isFlipped

Логическое значение, указывающее, использует ли представление перевернутую систему координат.

Декларация

var isFlipped: Bool { get }

Обсуждение

Значением по умолчанию этого свойства является false, что приводит к неперевернутой системе координат.

[...]

Если вы хотите, чтобы ваше представление использовало перевернутую систему координат, переопределите это свойство и верните true.

Источник: isFlipped - NSView | Документация для разработчиков Apple

24 голосов
/ 11 ноября 2014

Для тех, кто хочет сделать это в Swift, вот как вы переопределяете в своем пользовательском классе:

class FlippedView: NSView {
    override var flipped:Bool {
        get {
            return true
        }
    }
}
4 голосов
/ 02 ноября 2016

Идея состоит в том, что у каждого отдельного представления есть свой собственный способ рисования (например, с использованием вычисленных человеком путей), который может стать действительно странным, если вы внезапно перевернете его координатную плоскость (растры могут быть хорошими, в то время как пути могут рисовать вверх ногами). вниз, вычисления могут привести к тому, что что-то будет за кадром и т. д.). Так что это не устанавливается, но подклассы могут указывать isFlipped, потому что они должны точно знать, как рисуется представление.

Подклассы также могут устанавливать его, но тогда они должны ожидать, что он изменится в любое время.

Что касается кода, вот ответ Джея in Swift 3 :

class FlippedView: NSView {
    override var isFlipped: Bool { return true }
}
1 голос
/ 06 марта 2019

Поскольку Карл Карлсон спросил , вот ответ Джея в Objective-C:

Заголовок (.h)

@interface XYZFlippedView: NSView

- (BOOL) isFlipped;

@end

Реализация (.m)

@implementation XYZFlippedView

- (BOOL) isFlipped
{
    return YES;
}

@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...