2013-03-04 2 views
0

Я создаю пользовательскую панель выполнения для своего приложения.Обновление пользовательского UIView

Я подклассифицировал UIView и весь чертеж обрабатывается в drawRect.

Теперь пользовательский индикатор выполнения имеет 6 свойств, которые изменяют способ отображения.

minProgress 
maxProgress 
progress 
onColor 
offColor 
numberOfSections 

Все это набор значений по умолчанию в подклассе, но есть несколько мест, где все эти значения изменяются в методе viewWillAppear контроллера.

На данный момент я написал функцию сеттер для всех свойств, которые выглядят, как это ...

- (void)setProgress:(float)progress 
{ 
    _progress = progress; 

    [self setNeedsDisplay]; 
} 

Но это означает, что метод DrawRect будет называться 6 раз, прежде чем на самом деле показываются на экране ? Кажется, это плохой способ сделать это.

Правильно ли я об этом? Есть ли другой способ сделать это?

+0

Нет необходимости называть '[self setNeedsDisplay];'. У меня есть представление, которое управляет индикатором выполнения, и я не вызываю этот метод, а индикатор выполнения меняет значение, когда я запрашиваю – CainaSouza

+0

. Потому что изменение самого свойства не будет перерисовывать вид. Только вызов setNeedsDisplay приведет к обновлению представления. – Fogmeister

+0

У меня есть представление, которое управляет индикатором выполнения, и я не вызываю этот метод, и индикатор выполнения изменяет его значение, когда я запрашиваю – CainaSouza

ответ

3

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

+0

А, это имеет смысл. Поэтому я называю это 6 раз в viewWillAppear, но drawRect запускается только один раз, когда представление действительно появляется. Спасибо д – Fogmeister