2013-04-11 2 views

ответ

10

Короткий ответ: Нет

Вы называете setNeedsDisplay, когда вам нужно метод drawRect называть, и в соответствии с UIView Class Reference .-

Изменение кадра прямоугольник автоматически перерисовывает приемник без вызова метода drawRect:. Если вы хотите, чтобы метод drawRect: , вызываемый при изменении прямоугольника рамки, задает свойство contentMode UIViewContentModeRedraw.

+0

Но вызов 'setNeedsDisplay' после каждого' setFrame' и '.frame =' равен 'contentMode = UIViewContentModeRedraw'? – Dmitry

+3

Не совсем: 'UIViewContentModeRedraw Redisplays представление, когда границы изменяются, вызывая метод setNeedsDisplay.' Bounds свойство не эквивалентно кадру. – ssantos

+0

Спасибо, 'setFrame' абсолютно эквивалентен' .frame'? – Dmitry

0

Ответ Да и Нет и, в зависимости от ситуации,

Случай 1. Если вы рисуете что-то, переопределив метод drawRect в пользовательском представлении , то есть подклассе UIView, тогда вам нужно будет вызвать setNeedsDisplay, иначе рисунок или этот шаблон получат , растянутый в соответствии с новым фреймом, и будет выглядеть плохо. Если вы хотите перерисовать его, вызовите setNeedsDisplay.

Дело 2. Если на все, что вы рисунок то, что будет выглядеть хорошо, даже если она растягивается, который я думаю, это редкая возможность,

Или вы не переопределять DrawRect вообще , то вам не нужно звонок setNeedsDisplay.

+0

Не совсем правильно, «растяжение» будет происходить только на основе параметра contentMode (которое по умолчанию в большинстве случаев установлено на масштаб). Однако «UIViewcontentModeRedraw» означает, что вам не нужно будет вызывать setNeedsDisplay, если фактические границы представления изменились, так как он вызвал бы setNeedsDisplay от вашего имени. – strange

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