versiones plataforma objective framework ejemplos compiler caracteristicas objective-c cocoa

objective c - plataforma - ¿Cómo se cambia el sistema de coordenadas de un NSView?



versiones de objective c (3)

Creé un NSScrollView en el constructor de interfaces que tiene una cantidad variable de NSViews semi-únicos que se pueden agregar y eliminar mediante programación. Cuando agrego subViews a documentView, aparecen en la esquina inferior izquierda en lugar de la esquina superior izquierda. Veo que puede verificar el bool de isFlipped para descubrir si el sistema de coordenadas de la vista está volteado, pero no puedo encontrar la manera de configurarlo como volteado.

Alguien sabe lo que me estoy perdiendo?


En su subclase NSView, anule el método isFlipped:

isFlipped Devuelve YES si el receptor usa coordenadas de dibujo volteado o NO si usa coordenadas nativas.

- (BOOL)isFlipped

Discusión La implementación predeterminada devuelve NO; las subclases que usan coordenadas volteadas deben anular este método para devolver SÍ.


Para cualquiera que desee hacer esto en Swift, aquí le mostramos cómo anular su clase personalizada:

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


La idea es que cada vista individual tiene su propia forma de dibujarse (por ejemplo, usando rutas calculadas por el ser humano) que podría ponerse realmente inestable si de repente volteas su plano de coordenadas (los rásteres podrían estar bien mientras los caminos pueden dibujarse al revés, cálculos podría colocar cosas fuera de la pantalla, etc.). Por lo tanto, no es configurable, pero las subclases pueden especificar isFlipped porque definitivamente deben saber cómo se dibuja la vista.

Las subclases también pueden hacerlo configurable, pero luego deben esperar que cambie en cualquier momento.

En cuanto al código, aquí está la respuesta de Jay en Swift 3 :

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