Использование делегата CALayer

У меня есть UIView, слои которого будут иметь подуровней. Я хотел бы присвоить делегатам к каждому из тех подуровней, таким образом, метод делегата может сказать слой, что потянуть. Мой вопрос:

Что я должен обеспечить как делегат CALAYER? В документации говорится для не использования UIView, в котором находятся слои, поскольку это резервируется для основного CALayer представления. Но, создавая другой класс только, чтобы быть делегатом CALayers я создаю, побеждает цель не разделения на подклассы CALayer. Что люди обычно используют в качестве делегата к CALayer? Или я должен просто разделить на подклассы?

Кроме того, почему случается так, что класс, реализовывая методы делегата не должен соответствовать своего рода протоколу CALayer? Это - более широкий всеобъемлющий вопрос, который я не вполне понимаю. Я думал все классы, требующие, чтобы реализация методов делегата потребовала, чтобы спецификация протокола для реализаторов соответствовала.

34
задан Shaun Budhram 6 January 2010 в 18:48
поделиться

2 ответа

Самым легким решением было бы создать небольшой вспомогательный класс в файле как UIView, который использует CALayer:

В MyView.h

@interface MyLayerDelegate : NSObject
. . .
@end

В MyView.m

@implementation MyLayerDelegate
- (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx
{
. . .
}
@end

Просто поместите их в в верхней части файла сразу под директивами #import. Таким образом, это больше похоже на использование «частного класса» для обработки рисунка (хотя это не так - экземпляр класса делегата может быть создан любым кодом, который импортирует заголовок).

28
ответ дан 27 November 2019 в 16:36
поделиться

Взгляните на документы по формальным и неформальным протоколам . CALayer реализует неформальный протокол, что означает, что вы можете установить любой объект в качестве его делегата, и он определит, может ли он посылать сообщения этому делегату, проверив делегата для конкретного селектора (т.е. -respondsToSelector).

Обычно я использую контроллер просмотра в качестве делегата для данного уровня.

9
ответ дан 27 November 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: