Подтвердить что ты не робот

Как вы переключаете систему координат NSView?

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

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

4b9b3361

Ответ 1

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

isFlipped Возвращает YES, если приемник использует развернутые координаты чертежа или NO если он использует собственные координаты.

- (BOOL)isFlipped

Обсуждение Реализация по умолчанию возвращает NO; подклассы, которые используют перевернутые координаты должны переопределить этот метод возвращает YES.

Ответ 2

Для всех желающих сделать это в Swift здесь, как вы переопределяете свой собственный класс:

class FlippedView: NSView {
    override var flipped:Bool {
        get {
            return true
        }
    }
}

Ответ 3

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

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

Что касается кода, здесь Jay answer в Swift 3:

class FlippedView: NSView {
    override var isFlipped: Bool { return true }
}