Domanda

UIView ha le proprietà frame, bounds, center e origin, e tutti sembrano essere correlati. La maggior parte del tempo, ho a che fare con <=> quando si imposta la posizione e le dimensioni di un <=>. Capisco che <=> sta usando sistema di coordinate globale e <=> sta usando la coordinata della vista locale (quindi la sua X e Y sono 0, ma non sempre), ma è ancora confuso per me quando usare quello.

In quale contesto (e che cosa è il momento giusto) le altre proprietà (<=>, <=>, <=>) dovrebbe essere utilizzato?

È stato utile?

Soluzione

La risposta di Marco sopra è corretto, ma solo per espandere sulla questione del "sotto quale contesto" ...

struttura - questa è la proprietà che si usa più spesso per le normali applicazioni per iPhone. maggior parte dei controlli saranno disposte rispetto al controllo "contenente" così la frame.origin sarà direttamente conforme a cui è necessario il controllo per visualizzare e frame.size determinerà quanto grande per rendere il controllo.

Centro - questa è la proprietà è probabile che concentrarsi su per i giochi e le animazioni in cui possono verificarsi movimento o ridimensionamento sprite base. Con l'animazione e la rotazione di default sarà basato sul centro della UIView. E raramente ha senso per cercare di gestire tali oggetti dalla struttura telaio.

limiti - questa struttura non è una struttura di posizionamento, ma definisce l'area disegnabile del "relativo" UIView al telaio. Per impostazione predefinita, questa proprietà è di solito (0, 0, di larghezza , Altezza ). La modifica di questa struttura vi permetterà di disegnare al di fuori della cornice o di limitare il disegno a un'area più piccola all'interno della cornice. Una buona discussione di questo può essere trovato al link qui sotto. E 'raro per questa proprietà da manipolare a meno che non ci sia necessità specifica di regolare la regione di disegno. L'unica eccezione è che la maggior parte dei programmi utilizzeranno la [[UIScreen mainScreen] bounds] all'avvio per determinare l'area visibile per l'applicazione e la configurazione iniziale, la loro cornice di UIView di conseguenza.

Perché c'è un rettangolo di cornice e con un rettangolo limiti in un UIView?

Speriamo che questo aiuta a chiarire le circostanze in cui potrebbe abituarsi ogni proprietà.

Altri suggerimenti

Sono valori correlati, e tenute coerente con i metodi setter / getter (e sfruttando il fatto che telaio è un valore puramente sintetizzato, non sostenuto da una variabile di istanza effettivo).

Le equazioni principali sono:

frame.origin = center - bounds.size / 2

(che è lo stesso)

center = frame.origin + bounds.size / 2

(e c'è anche)

frame.size = bounds.size

Non è il codice, basta equazioni per esprimere l'invariante tra le tre proprietà. Queste equazioni assumono anche di trasformare il vostro punto di vista è l'identità, che è di default. Se non lo è, allora i limiti e il centro mantengono lo stesso significato, ma può cambiare telaio. A meno che non si sta facendo rotazioni non ad angolo retto, la cornice sarà sempre la vista trasformata in termini di coordinate del Superview.

Questa roba è spiegato più in dettaglio con un utile mini-biblioteca qui:

http://bynomial.com/blog/?p=24

Le proprietà center, bounds e frame sono interconnessi: cambiare una aggiornerà gli altri, in modo da usarli nel modo desiderato. Ad esempio, invece di modificare i params x / y del <=> per centrare una vista, solo aggiornare il <=> struttura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top