2015-06-05 32 views
12

Jaka jest różnica między CGSize i CGRect?Różnica między CGSize i CGRect

Jako początkujący czytelnik CGGeometry Reference nie było to od razu oczywiste, szczególnie dlatego, że były odniesienia do rozmiaru będącego wektorem. Byłem trochę zaskoczony, że nie mogłem znaleźć tego podstawowego pytania na StackOverflow, więc postanowiłem zbadać to bardziej i zamieścić poniżej swoją odpowiedź.

Odpowiedz

21

CGSize

CGSize ma szerokość i wysokość. Nie jest technicznie uważany za prostokąt (co jest jednym z powodów, dla których początkowo myliłem go z CGRect), ale raczej tylko wielkością. Jednakże, dla celów ilustracji, zostanie reprezentuję jako prostokąt poniżej:

enter image description here

Połączenie szerokości i hej jest znane jako struktury, co jest skrótem od struktury, i początkowo pochodzi od C (ale będę używał składni Swift zamiast Celu C tutaj). Struktura jest po prostu grupą powiązanych logicznie zmiennych. Widać tu strukturę CGSize:

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

gdzie CGFloat jest albo float (32 bitów) lub double (64 bitów). (Patrz What's the difference between using CGFloat and float?)

Można zrobić CGSize wykonując następujące czynności:

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

CGRect

CGRect jest prostokątem. Jednak nazwa nie jest od razu oczywista, ponieważ oprócz szerokości i wysokości ma również swoje pochodzenie.

enter image description here

CGsize, dla porównania, nie ma pochodzenie.

CGRect to również struktura. Jeśli tak, to jest to struktura struktur: CGPoint (początek) i CGSize (szerokość i wysokość). Oto ona:

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

gdzie CGPoint jest

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

Można zrobić CGRect wykonując następujące czynności:

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

Negatywna szerokość i wysokość

szerokość i wysokość wartości mogą być ujemne. Możemy zobaczyć, jak to wygląda z CGRect.Zauważ, jak na różnych zakątków pojawia pochodzenie:

enter image description here

Wektory

documentation for CGSize mówi

CGSize struktura jest czasem używane do reprezentowania wektora odległości, zamiast fizycznego rozmiaru. Jako wektor jego wartości mogą być ujemne. Aby znormalizować strukturę CGRect, tak aby jej rozmiar był reprezentowany przez wartości dodatnie, wywołaj funkcję CGRectStandardize.

Vectors w matematyce mają one wielkość (lub długość) i kierunek. Chociaż CGSize nie ma początku, można zobaczyć na poniższym diagramie, w jaki sposób szerokość i wysokość wraz z powiązanymi wartościami dodatnimi lub ujemnymi określają zarówno długość, jak i kierunek.

enter image description here

Dalsze Reading

+0

Świetne wyjaśnienie! – Haileapp

4

Krótka wersja: Ich nazwy są mylące, ponieważ mogą one być stosowane zarówno do reprezentowania prostokątów.

CGSize ma szerokość i wysokość

enter image description here

CGRect zawiera X, Y, szerokość i wysokość

enter image description here

Można myśleć o CGRect jako CGSize ze współrzędnymi .

CGRect jest powszechnie używany do określenia ramki UIView, które (górna, lewa) współrzędne są względem (górnych, lewych) współrzędnych widoku rodzica.

enter image description here