DrawRect UIView не вызывается, когда пьяный

Я экспериментирую с продвинутыми методами Objective-C. Чего я хочу добиться, так это добавить определенный код чертежа к существующему UIView,

Я начал легко, я продолжил объявлять свой drawRect метод в категории:

@interface UIView (Swizzled)

- (void)my_drawRect:(CGRect)rect;

@end

Тогда я выпил drawRect метод UIView в реализации категории:

+ (void)load
{
    [self swizzleInstanceMethod:@selector(drawRect:) withMethod:@selector(my_drawRect:) inClass:[UIView class]];
}

- (void)my_drawRect:(CGRect)rect
{
    NSLog (@"Test.");
}

Реализация этого метода доступна на GitHub, а Swizzling работает во всех других случаях.

Так что по логике каждый раз drawRect называется, надо просто распечатать "Тест". Но это не работает, метод, который я пробовал, никогда не вызывается. Я узнал, что я сделал не так, но чем больше я на это смотрю, тем больше я верю, что проблема в другом.

Что делать, если drawRect метод даже не вызывается? Я попытался заставить его называться:

view.contentMode = UIViewContentModeRedraw;
[view setNeedsDisplay];

Тоже не работает

Итак, мой вопрос:

Как заставить UIView звонить drawRect в этом случае или даже моя извращенная реализация?

Спасибо!

1 ответ

Решение

Во-первых, читайте в drawRect или не в drawRect (когда следует использовать drawRect/Core Graphics против подпредставлений / изображений и почему?)

В принципе, UIView проверяет переопределение drawRect: или нет. Если вы не переопределите его, он может выполнить много оптимизаций при рисовании, и метод даже не будет вызван.

В этом случае вы не изменили это так UIView не видит причин для его вызова, даже если вы заменили пустую реализацию чем-то другим.

Другие вопросы по тегам