2011-12-13 21 views
41

Qual è la differenza tra limiti e telaio? In realtà, perché esistono anche "limiti"? La dimensione dei "limiti" è uguale alla dimensione della cornice e l'origine del vincolo deve sempre essere 0,0.limiti di NSView vs telaio

+1

Possibile duplicato di [Cocoa: Qual è la differenza tra il frame ei limiti?] (Http://stackoverflow.com/questions/1210047/cocoa-whats-the-difference-between-the-frame-and-the -bounds) – daisy

risposta

90

Dalla Guida View and Window Architecture programmazione per iOS:

una sottofinestra tiene traccia la sua dimensione e la posizione con il suo telaio, limiti, e centro proprietà:

Il proprietà telaio contiene il rettangolo telaio , che specifica la dimensione e la posizione della vista nel sistema di coordinate della sua superview.

Il limiti proprietà contiene il rettangolo limiti, che specifica la dimensione della vista (e la sua origine contenuto) in proprio locale sistema di coordinate della visualizzazione.

La struttura centrale contiene noto punto centrale della vista nel sistema di coordinate del superview.

Ecco una buona visualizzazione di tale spiegazione:

enter image description here

+7

Corretto. Vedi la mia domanda. I limiti sarebbero sempre 0,0 per l'origine e le dimensioni sono identiche. Quindi, perché allora avere dei limiti, dal momento che il frame include tutte le informazioni del bound comunque? – David

+2

Non ho mai veramente guardato questo. Ma sembra chiaro che hai bisogno di due riferimenti. Perché 40,40 non sarebbe giusto per l'origine del contenuto della vista, ma correggere per un riferimento di dove la vista è all'interno della superview. Immagino anche che la vista debba conoscere il proprio spazio contenuto (limiti) e fornire informazioni su dove dovrebbe essere (Frame). Le informazioni potrebbero sembrare uguali ma in realtà sono due cose diverse. Guardali come una vista Cornice di riferimento a dove si trova. Ed è confini che forma stessa – markhunte

+10

Mentre questa risposta è in genere corretta, dal momento che questa è una domanda Mac (è contrassegnata 'NSView'), la documentazione richiesta sia il [visualizza guida di programmazione per Cacao] (http://developer.apple.com /library/mac/#documentation/Cocoa/Conceptual/CocoaViewsGuide/Introduction/Introduction.html) piuttosto che la versione iOS si è collegato al. Nota che sul Mac il sistema di coordinate è ruotato di default, con il punto di origine nell'angolo in basso a sinistra. –

8

I documenti di mele nella prima risposta non coprire ciò che accade al telaio e dei limiti dopo la rotazione di orientamento orizzontale. Quindi per essere più completo, dovresti sapere che il frame della finestra e la vista root non cambiano dopo la rotazione, ma i limiti lo fanno. See this article per un piccolo dettaglio in più e state attenti a usare il frame come riferimento per qualsiasi cosa diversa dall'orientamento verticale.

Dall'articolo:

Se il controller della vista è di livello superiore vista non-finestra (vale a dire, è il più a fondo controller della vista), quindi

self.frame 

è sempre in orientamento verticale. Wha? Sì, sempre in verticale - ciò che cambia è la trasformazione della tua vista. Così il vostro

self.bounds 

è sempre preciso (tenendo presente l'ultimo punto), ma

self.frame 

può o non può dare le proporzioni che l'utente sta veramente vedendo, dal telaio di ogni vista è riportato in base alle coordinate della superview e prende in considerazione tutte le trasformazioni applicate alla vista .

9

L'origine del vincolata non è sempre 0,0. È facile capire la differenza tra frame e bound, se si osserva la proprietà dei limiti di modifica di UIScrollView durante lo scorrimento.

Ad esempio, si ha UIScrollView con frame (0, 0, 320, 460), limiti (0, 0, 320, 460) e ContentSize (640, 460).La sua cornice sarà sempre (0, 0, 320, 460), ma la coordinata X dei limiti cambierà a seconda della distanza di scorrimento.

Può essere utile se si desidera modificare qualcosa in UIScrollView (creare e rimuovere pagine in modo dinamico ad esempio), quindi si desidera conoscere la distanza di scorrimento.

1

Un frame di visualizzazioni ha le dimensioni di un rettangolo in cui può essere inserito completamente. Sembra sempre che i limiti e la cornice siano gli stessi, ma non è così. Considera un quadrato che è appena ruotato di circa 45 gradi!

Qui il riquadro di questo quadrato ruotato sarà il rettangolo per riempirlo completamente e quindi sarà diverso dai limiti di questo oggetto.

P.S principalmente negli oggetti ruotati, i frame e i limiti tendono a differire.