2012-01-03 2 views
4

С моей точки зрения, setNeedsDisplay влияет только на вид, который он вызывает. Есть ли простой способ сказать «обновить это представление и все его подпункты, рекурсивно?»setNeedsDisplay и subviews

В ответ на замечания, вот моя ситуация: У меня есть настраиваемое представление

@interface ContainerView : UIView 

этот вид делает не реализации drawRect. В моем xib есть экземпляр (container) ContainerView, который имеет некоторые (пользовательские) подпункты, добавленные к нему. Когда в коде я говорю

[container setNeedsDisplay] 

Ожидаю, что эти подпрограммы будут обновлены. Где я ошибаюсь?

+2

'setNeedsDisplay' должно вызвать обновление всех суб-видом вид. Не могли бы вы поделиться кодом, где этого не происходит? – dasblinkenlight

+0

@dasblinkenlight, я обновил свой вопрос, пожалуйста, посмотрите – georg

+0

«setNeedsDisplay должен инициировать обновление всех подменю представления» - нет, это не тот случай. '-setNeedsDisplay:' влияет только на представление, которое получает это сообщение. –

ответ

-1

UIView Class Reference

Класс UIView определяет прямоугольную область на экране и интерфейсы для управления контентом в этой области. Во время выполнения, объект вида обрабатывает рендеринг любого контента в своей области, а также обрабатывает любые взаимодействия с этим содержанием

setNeedsDisplay
Отмечает все границы прямоугольника приемника в необходимости перерисовывать.
Примечание. Если ваше представление поддерживается объектом CAEAGLLayer, этот метод не имеет эффекта. Он предназначен для использования только с представлениями, которые используют собственные технологии рисования (такие как UIKit и Core Graphics) для рендеринга их содержимого.

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

+0

Я обновил свой вопрос, пожалуйста, посмотрите – georg

+0

@ thg435 - Почему вы подклассифицируете UIView, если вы не реализуете 'drawRect:'? И какое обновление вы ожидаете, рисуя обновление? –

+0

Я ожидаю, что методы drawview типа subviews будут вызваны автоматически, когда я скажу '[container setNeedsDisplay]' ' – georg

0

Ok, UIView рисует себя, когда ее первой отображается. CALayers нет. Вызов setNeedsDisplay на UIView указывает на то, что он грязный, это автоматически также перерисовывает все SubViews (вызывая drawrect во всех subviews). Вызов setNeedsDisplay на CALayer не имеет такого же эффекта, он не будет перерисовывать подслои. Надеюсь это поможет.

С уважением

Ref
IOS 7 Программирование Преодолевая границы Роб Napier, Mugunth Кумар

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