2013-08-18 8 views
2

У меня есть UIView, который я импортирую, чтобы отображать пути bezier с setNeedsDisplay из суперкласса.[UIView setNeedsDisplay]: есть ли простой способ узнать, когда drawRect завершен?

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

В качестве быстрого исправления я создал NSTimer за 0,3 секунды до вызова метода. Это работает, но может быть ненадежным. Я также мог бы отправить уведомление от UIView обратно в суперкласс, но это кажется неправильным.

Я проверил документацию, но ничего не могу узнать о уведомлении о завершении. Есть ли встроенная функция для этого?

+0

как о вызове, что другой метод в конце 'тела drawRect' в? – vikingosegundo

+0

Может быть, когда вы зарегистрировались в уведомлении, вы используете неверный наблюдатель? – Kepler

+0

drawRect находится в импортированном классе, мне нужно вызвать метод, который находится в суперклассе, насколько я знаю, вы не можете это сделать? – PaulMrG

ответ

0

Извините, если я неверно ответил (мой английский не очень хорош). Попробуйте объявить метод супер-представления, который перезагружает uiview (с помощью более простых путей) и изменяет код, когда вы отправляете уведомление по коду, когда вы вызовете этот метод. Или просто попробуйте

[superView performSelectpr:@selector(reloadSubview)]; 
+0

Это не сработает, если я использую UIView в других классах. Пробовал это в любом случае только сейчас, но это не позволит мне объявить класс в заголовке, дает ошибку «Неизвестное имя типа». – PaulMrG

+0

Извините, я не могу предложить больше – Kepler

2

Вы можете объявить новый метод

- (void)setNeedsDisplayCompletion:(MYCompletion)completion; 

, но перед этим объявить ЬурейеЕ

typedef void((^MYCompletion)()); 

затем реализовать его

- (void)setNeedsDisplayCompletion:(MyCompletion)completion { 
    self._completion = [completion copy]; 
    [self setNeedsDisplay]; 
} 

затем использовать блок завершения в drawRect

[super drawRect:rect]; 
if (self._completion) { 
    self._completion(); 
} 

P.S. _completion это свойство

@property (nonatomic, strong) MyCompletion _completion; 

Теперь вы можете использовать свой новый метод

[self._uiTextView setNeedsDisplayCompletion:^{ 
    [self setNeedsLayout]; 
}];