Переместить прямоугольник в NSView

У меня есть подкласс "графика" NSView, где нарисованы некоторые прямоугольники.

Теперь мне нужен общедоступный метод для перемещения/изменения размера прямоугольников. Я пытался установить новое происхождение, но это не работает для меня.

rect.origin.x = anything;

Теперь, как я могу переместить прямоугольники?

С уважением


person user3195648    schedule 16.10.2014    source источник
comment
Этот код ничего не меняет на стороне NSView, вы просто изменяете прямоугольник и надеетесь, что представление это заметит. Это так не работает.   -  person CodaFi    schedule 17.10.2014


Ответы (1)


Вы рисуете прямоугольники в методе drawRect, который запускается каждый раз, когда NSView считает, что ему нужно повторно отобразить себя.

Ваша проблема в том, что вы устанавливаете начальное расположение прямоугольников в этом методе, поэтому каждое изменение, которое вы делаете в другом методе, не имеет значения и будет сбрасываться каждый раз. Вместо этого вы должны установить начальное местоположение прямоугольников в таких методах, как init или awakeFromNib, которые происходят только один раз.

После того, как ваша кнопка изменила значения начала координат прямоугольника, вы можете указать виду перерисовать себя, используя:

[self setNeedsDisplay:YES];

Так что добавьте это после кода, который меняет исходную точку, и все будет в порядке.

person Yotam Vaknin    schedule 16.10.2014
comment
Привет, сначала спасибо за ваш ответ. Я уже пытался сделать это в том же классе NSView, но затем он говорит мне: нет известного метода класса для селектора setNeedsDisplay. - person user3195648; 17.10.2014
comment
Подождите, теперь это метод экземпляра, но он тоже не работает. Код: - (void)move:(int)d{ if (d==1) { stab1.origin.x = 5; [self setNeedsDisplay:YES]; NSLog(@"test"); } } Метод вызывается и в журнале появляется test, но stab1 не перестраивается? - person user3195648; 17.10.2014
comment
Можете ли вы опубликовать немного больше кода вашего класса? Как вызывается метод Move? - person Yotam Vaknin; 17.10.2014
comment
Да, извините, вот ссылка, по которой я сделал скриншот:ссылка - person user3195648; 17.10.2014
comment
Да, вот оно :) ссылка - person user3195648; 18.10.2014
comment
Теперь я вижу вашу проблему, отредактировано с ответом. - person Yotam Vaknin; 18.10.2014
comment
Спасибо, я пробовал, но я думаю, что делаю это неправильно. Я сделал новый скриншот:ссылка Прямоугольники инициализируются правильно, и исходная точка меняется. Я вижу это в консоли, но она не перерисовывается, верно? - person user3195648; 18.10.2014