UIView. Как заново отобразить «управляемый данными» UIView? - PullRequest
1 голос
/ 04 октября 2009

Я делаю приложение для научной визуализации для iPhone. Периодически подкласс UIView будет получать некоторые данные из сети, которые он должен отобразить через переопределенный метод drawRect: *. 1001 *

Моя проблема заключается в том, что нет никакого способа указать Cocoa-Touch, что эти данные поступили - или изменились - кроме [myView setNeedsDisplay], который игнорируется, за исключением изменений в границах UIView. Я пытался скрыться и показать. Nuthin.

К сожалению, поскольку все, что я сделал, это изменило некоторое внутреннее состояние UIView [myView setNeedsDisplay]. Это изменение совершенно невидимо для Cocoa-Touch. Это изменение не является одним из критериев, которые требуют перерисовки - в соответствии с Cocoa-Touch - поэтому мой UIView находится там, без изменений.

Это очень, очень, очень расстраивает. Я врезался в стену здесь.

Может кто-нибудь предложить метод, трюк, хак, который побудит мой UIView перерисовать.

Cheers, Дуг

1 Ответ

5 голосов
/ 04 октября 2009

[myView setNeedsDisplay] должно привести к отправке drawRect: на myView в следующий раз, когда вы вернетесь в цикл выполнения, и появится myView. Если изменение границ приводит к перерисовке представления (myView.contentMode равно UIViewContentModeRedraw), тогда setNeedsDisplay должно работать, поскольку именно так перерисовка сигнализируется изменением границ. Подробности см. В справочнике классов UIView .

Ваш drawRect: вызывается при первом показе представления? В противном случае он может быть написан с ошибкой, переопределен в подклассе или даже на неправильном объекте.

Виден ли вид и на экране? Оно не будет нарисовано, если оно не на экране.

Возвращается ли управление к циклу событий? drawRect: не будет вызываться, если ваше приложение занято.

...