2015-06-05 12 views
12

Qual è la differenza tra CGSize e CGRect?Differenza tra CGSize e CGRect

Come un principiante che leggeva il CGGeometry Reference non era immediatamente ovvio, soprattutto perché c'erano dei riferimenti alla dimensione come un vettore. Sono stato un po 'sorpreso dal fatto che non ho trovato questa domanda di base su StackOverflow, quindi ho deciso di ricercarlo di più e postare la mia risposta qui sotto.

risposta

21

CGSize

CGSize è una larghezza e un'altezza. Non è tecnicamente considerato un rettangolo (che è uno dei motivi per cui l'ho confuso con CGRect all'inizio), ma piuttosto solo una dimensione. Tuttavia, a scopo illustrativo, io rappresentare come un rettangolo sotto:

enter image description here

Questa combinazione di larghezza e altezza è nota come una struttura, che è l'abbreviazione di struttura, ed originalmente proviene dal C lingua (ma userò la sintassi Swift piuttosto che Objective C qui). Una struttura è solo un gruppo di variabili logicamente correlate. Qui si può vedere la struttura CGSize:

struct CGSize { 
    var width: CGFloat 
    var height: CGFloat 
} 

dove CGFloat è o un float (32 bit) o ​​(bit 64) double. (Vedere What's the difference between using CGFloat and float?)

si può fare una CGSize effettuando le seguenti operazioni:

var size = CGSize(width: 50, height: 30) 

CGRect

CGRect è un rettangolo. Ciò che non è immediatamente ovvio dal nome, però, è che oltre a una larghezza e un'altezza, ha anche un'origine.

enter image description here

CGsize, in confronto, non ha un'origine.

CGRect è anche una struttura. Se è vero, è una struttura di strutture: uno CGPoint (l'origine) e lo CGSize (la larghezza e l'altezza). Eccolo:

struct CGRect { 
    var origin: CGPoint 
    var size: CGSize 
} 

dove CGPoint è

struct CGPoint { 
    var x: CGFloat 
    var y: CGFloat 
} 

si può fare una CGRect effettuando le seguenti operazioni:

var rect = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 50, height: 30)) 

larghezza negativa e l'altezza

La larghezza e l'altezza i valori possono essere negativi. Possiamo vedere come si presenta con CGRect.Notate come appare l'origine in diversi angoli:

enter image description here

Vettori

Il documentation for CGSize dice

Una struttura CGSize è talvolta usato per rappresentare un vettore di distanza, piuttosto che una dimensione fisica. Come vettore, i suoi valori possono essere negativi. Per normalizzare una struttura CGRect in modo che la sua dimensione sia rappresentata da valori positivi, chiamare la funzione CGRectStandardize.

Vectors in matematica hanno una grandezza (o lunghezza) e una direzione. Sebbene CGSize non abbia un'origine, dal diagramma seguente è possibile vedere come la larghezza e l'altezza insieme ai relativi valori positivi o negativi forniscono sia la lunghezza che la direzione.

enter image description here

Letture

+0

Grande spiegazione! – Haileapp

4

Versione corta: I loro nomi sono confuse, perché entrambi possono essere utilizzati per rappresentare rettangoli.

CGSize ha larghezza e altezza

enter image description here

CGRect ha x, y, larghezza e altezza

enter image description here

Si può pensare CGRect come CGSize con coordinate .

CGRect è comunemente usato per specificare un frame di UIView, le cui coordinate (in alto a sinistra) sono relative alle coordinate (in alto a sinistra) della vista genitore.

enter image description here