2009-04-18 7 views
22

He creado un NSScrollView en el constructor de interfaces que tiene una cantidad variable de NSViews semi exclusivas que se pueden agregar y eliminar programáticamente de él. 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.¿Cómo se voltea el sistema de coordenadas de un NSView?

¿Alguien sabe lo que me estoy perdiendo?

Respuesta

38

En la subclase NSView, reemplazar el método isFlipped:

isFlipped se vuelve positivo si el receptor usos volteado coordenadas de dibujo o NO si se utiliza coordenadas nativos.

- (BOOL)isFlipped

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

+0

Para aquellos de nosotros que son un poco lento, le esto de manifiesto en los ejemplos truncadas del .hy archivos .m? –

21

Para cualquier persona que desee hacer esto en Swift así es como se reemplaza en su clase personalizada:

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

¿Puedes hacer qué sin subclasificar? – yukas

+2

Parece tan obvio que debería haber una manera de hacerlo en el constructor de Interfaz sin tener que recurrir a la creación de subclases. – iphaaw

+1

No veo ninguna propiedad para configurar esto en IB. En cuanto a hacerlo sin subclases, es una propiedad de solo lectura, por lo que la subclase es la mejor opción. – Jay

1

La idea es que cada vista individual tiene su propia forma de dibujo en sí (por ejemplo, utilizando humana -rutas calculadas) que podrían ponerse realmente endebles si de repente volteas su plano de coordenadas (los rásteres podrían estar bien, mientras que los caminos podrían estar boca abajo, los cálculos podrían 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 hacer que se pueda ajustar, pero luego deben esperar que cambie en cualquier momento.

En cuanto a código, aquí está Jay's answer en Swift 3:

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