делает - [CALayer drawInContext:] что-то делает? - PullRequest
0 голосов
/ 11 января 2012

Согласно документации Реализация по умолчанию ничего не делает.

Но ... я выкидываю исключение из метода drawRect и вижу следующий callstack

3   EasyWakeup                          0x0003a7b6 -[AlarmIntervalView drawRect:] + 71
4   UIKit                               0x003f6187 -[UIView(CALayerDelegate) drawLayer:inContext:] + 426
5   QuartzCore                          0x011a8b5e -[CALayer drawInContext:] + 143

Так как яможет понять, что это означает реализацию по умолчанию - [CALayer drawInContext:] вызова метода делегата.Это правильно?Так как я знал технику метания, я ничего не уверен в цели ...

1 Ответ

4 голосов
/ 14 января 2012

Вы правы в том, что по умолчанию этот CALayer drawInContext: ничего не делает. Это верно, если уровень не имеет делегата и , который делегат уровня реализует drawLayer:inContext:. Таким образом, проблема с документацией заключается в том, что рядом с утверждением «Реализация по умолчанию ничего не делает» должна стоять небольшая звездочка.

Помните, что все представления поддерживаются каким-либо CALayer. Этот слой автоматически настраивается так, чтобы его вид был установлен в качестве делегата. Что не очевидно на первый взгляд, так это то, что UIView реализует делегат CALayer drawLayer:inContext:. Это то, что вы видите со всеми этими вызовами в стеке вызовов.

Ваш экземпляр AlarmIntervalView автоматически имеет резервный слой, а этому базовому слою назначен делегат для вашего экземпляра AlarmIntervalView. Некоторая часть системы вызывает вспомогательный слой drawInContext:, который проверяет наличие делегата (который у него есть), отправляет делегата respondsToSelector: с drawLayer:inContext: в качестве аргумента (на который UIView действительно отвечает) и, наконец, фактически отправляет сообщение drawLayer:inContext:. Реализация UIView drawLayer:inContext: вызывает ваш взгляд drawRect:.

Я не совсем уверен, почему вы упоминаете о мерзости.

[Мой ответ длинный, в основном для моей пользы. Это тоже помогает мне учиться.]

...