2011-07-29 11 views
5

Tak oto jest moje zrozumienie: istnieje setNeedsDisplay zarówno w klasie UIView i CALayer, UIView jest klasą złożoną, która zawiera CALayer. Ale UIView używa drawRect:, podczas gdy CALayer używa drawLayer:inContext:. Oba używają nazwy setNeedsDisplay. Czy to jakiś protokół czy coś takiego? Tak myślę, że w pewnym momencie implementacji UIView tworzony jest CALayer i delegat tej warstwy jest ustawiony na klasę UIView? Jaki jest dokładnie związek między tymi dwoma klasami? Więc drawRect: w UIView jest zasadniczo parsowanie jego zawartości i wywołanie drawLayer:inContext: jego warstwy? Jaki to wzór? Próbuję owijać głowę, jak działają te dwie klasy, dzięki.Jaki jest związek między UIView i CALayer

Odpowiedz

0

To wszystko szczegóły implementacji Apple, więc nie wiem na pewno. Ponadto różne klasy widoku będą miały różne relacje z warstwą.

Na przykład UIImageView jest explicitly documented do nie wezwanie drawRect:. Jest tak prawdopodobnie dlatego, że ustawienie obrazu faktycznie bezpośrednio aktualizuje własność warstwy contents bez przechodzenia przez metody renderowania.

To powiedziawszy, wyobrażam sobie, że najbardziej podstawowym zachowaniem jest to, że setNeedsDisplay po prostu przekazuje połączenie do warstwy. Następnie, gdy wywoływany jest widok drawLayer:inContext:, ustawia on kontekst kontekstowy UIGraphics i wywołuje drawRect:.

Powiązane problemy