setNeedsDisplay не работает?

У меня проблема с перерисовкой пользовательского представления в простом приложении какао. Рисование основано на одном параметре, который изменяется простым NSSlider. Однако, хотя я реализую методы -setParameter: и -parameter и привязываю значение ползунка к этому параметру в построителе интерфейса, я не могу создать собственное представление для перерисовки самого себя.

Код, выполняющий перерисовку, выглядит следующим образом:

- (void)setParameter:(int)newParameter {
  parameter = newParamter;
  NSLog(@"Updated parameter: %d", parameter);
  [self setNeedsDisplay:YES];
}

Я ПОЛУЧАЮ сообщение об установке нового параметра, хотя представление не перерисовывается. Любые идеи приветствуются!


person Eimantas    schedule 29.11.2008    source источник


Ответы (4)


Обычный синтаксис: [self setNeedsDisplay:YES], хотя я предполагаю, что это означает одно и то же. Вы реализуете метод - (void)drawRect:(NSRect)rect или используете метод drawRect: своего суперкласса?

person e.James    schedule 29.11.2008
comment
спасибо, что указали на опечатку с помощью true/YES. Я реализую свой собственный метод drawRect: - person Eimantas; 29.11.2008
comment
если вы поместите NSLog(@hi) в начало вашего метода DrawRect:, он будет вызван? - person e.James; 29.11.2008
comment
нет, не вызывается. он вызывается только один раз при запуске программы - person Eimantas; 29.11.2008
comment
Хм. Основываясь на информации, предоставленной до сих пор, я в тупике. Есть ли что-то необычное в вашей установке? - person e.James; 29.11.2008
comment
эта ветка вообще помогает? idevgames.com/forum/archive/index.php/t- 10114.html - person e.James; 29.11.2008
comment
ну я по другому решил. я удалил методы установки и получения и изменил их с помощью одного IBAction в пользовательском классе представления, который обновляет переменную экземпляра и вызывает setNeedsDisplay. Работает как шарм. Думаю, мне нужно больше домашней работы по теории KVC/KVO. Еще раз спасибо, eJames! - person Eimantas; 29.11.2008

Для тех, у кого возникла эта проблема при использовании подкласса NSOpenGLView, вы можете забыть использовать [[self openGLContext] flushBuffer] в конце drawRect:.

person Eric    schedule 08.12.2009

Иногда причина может быть очень простой: владелец файла не имеет связи с объектом UIView. т. е. его выход не настроен должным образом. Используйте IB, кнопку ctrl и метод перетаскивания :)

person dmi3j    schedule 17.05.2011
comment
Это очень хороший намек. На самом деле мой вид сейчас НЕ подключен, хотя я уверен, что когда-то мой вид был правильно подключен. Теперь у меня проблема, что я не могу подключить представление к владельцу файла. Мне кажется, что-то сломалось. - person Ronald Hofmann; 29.12.2012

В iOS 6 нет такой функции для вызова: setNeedsDisplay:YES. У меня та же проблема, и я пришел с этим решением: https://stackoverflow.com/a/15027374/1280800 .

Надеюсь, это поможет.

person dreamzor    schedule 22.02.2013