2009-10-04 4 views
1

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

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

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

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

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

Приветствия, Doug

ответ

5

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

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

Является ли вид видимым и на экране? Он не будет нарисован, если он выключен.

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

+0

Will, Хорошо, это странно. Я удалил вызов [myView setNeedsDisplay], потому что раньше он ничего не делал. Я просто вернул его, и drawRect уходит. Вздох. Спасибо за помощь. – dugla

Смежные вопросы