2009-04-18 14 views
22

Ho creato un NSScrollView nel builder dell'interfaccia che ha un numero variabile di NSViews semi-univoci che possono essere aggiunti e rimossi programmaticamente da esso. Quando aggiungo subViews a documentView, vengono visualizzati nell'angolo in basso a sinistra anziché nell'angolo in alto a sinistra. Vedo che è possibile controllare il bool isFlipped per capire se il sistema di coordinate della vista è capovolto, ma non riesco a trovare un modo per impostarlo come capovolto.Come si capovolge il sistema di coordinate di un NSView?

Qualcuno sa cosa mi manca?

risposta

38

nella sottoclasse NSView, l'override del metodo isFlipped:

isFlipped Restituisce YES se il ricevitore usi capovolte coordinate disegno o NO se utilizza le coordinate nativi.

- (BOOL)isFlipped

Discussione L'implementazione predefinita rendimenti NO; le sottoclassi che utilizzano le coordinate ruotate di devono sostituire questo metodo con lo per restituire SÌ.

+0

Per quelli di noi che sono un po 'lento, vuoi spiegare tutto questo negli esempi troncata del file .he .m? –

21

Per tutti coloro che desiderano fare questo in Swift ecco come si ignora nella classe personalizzata:

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

Puoi fare cosa senza sottoclassi? – yukas

+2

Sembra così ovvio che ci dovrebbe essere un modo per farlo nel generatore di interfaccia senza dover ricorrere alla sottoclasse. – iphaaw

+1

Non vedo alcuna proprietà per l'impostazione in IB. Per quanto riguarda farlo senza sottoclassi, è una proprietà di sola lettura, quindi la sottoclassificazione è la soluzione migliore. – Jay

1

L'idea è che ogni individuo vista ha il suo modo di disegnare se stesso (ad esempio, utilizzando umana -Calcoli calcolati) che potrebbero diventare veramente confusi se si capovolge improvvisamente il suo piano di coordinate (i raster potrebbero andare bene mentre i percorsi potrebbero essere disegnati capovolti, i calcoli potrebbero mettere le cose fuori dallo schermo, ecc.). Quindi non è impostabile, ma le sottoclassi possono specificare isFlipped perché devono sicuramente sapere come viene disegnata la vista.

Le sottoclassi possono anche renderlo impostabile, ma in seguito devono aspettarsi che cambi in qualsiasi momento.

Per quanto riguarda il codice, ecco Jay's answer in Swift 3:

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