2013-02-13 2 views
0

У меня есть окно, которое рисует с помощью NSBezierPath, есть отдельное окно со слайдерами и желает обновлять чертеж всякий раз, когда движок перемещается. Нужен ли отдельный подкласс каждого окна и отдельных объектов? Каков правильный способ делать выходы и владельца файла в этом сценарии?Каков правильный способ обновления чертежа из отдельного окна?

В этом случае у меня есть два окна, подключенные к одному классу. Окно не будет обновлять чертеж, но окно с ползунком будет нарисовано. Я не понимаю, почему это путает себя с отправителем. Отправитель - это слайдер.

- (IBAction)branchSliderChange:(id)sender { 
    numberofbranches = [ _branchSlider intValue ] ; 
    [_branchLabel setIntegerValue: numberofbranches ]; 
    [self drawRect:self.bounds]; 
    [self setNeedsDisplay:YES]; 
} 

ответ

1

Во-первых, вы никогда не называют drawRect:, что называют какао. Вы просто указываете, когда вам нужно нарисовать setNeedsDisplay:.

Peer views (windows) не разговаривают друг с другом. Они либо разговаривают через контроллер, либо через модель. Модель - это объекты, в которых хранятся данные, отображаемые всеми представлениями. Объекты модели отделены от пользовательского интерфейса (views) и контроллеров.

Например, если ваш слайдер изменяет текущий цвет, контроллер ползунка обновит вашу модель, чтобы указать текущий цвет. Ползунок (и его контроллер) не должен волновать, вызывает ли это рисование в каком-либо другом виде или нет; это не их дело. Затем контроллер чертежного вида должен наблюдать изменение модели (через KVO, уведомления, делегирование) и соответствующим образом обновлять ее представление.

Если несколько видов совместно используют контроллер, и информация не влияет на что-либо вне этого контроллера, изменение может не доходить до модели. Контроллер может просто обновить все, что он контролирует. Но в вашем случае, когда есть другое окно, возможно, задействовано несколько контроллеров, поэтому вам, вероятно, нужно сохранить это в классе модели.

См. Model-View-Controller в Концепции в Руководстве по программированию Objective-C. Это одна из самых важных концепций развития какао, поэтому вы хотите убедиться, что вы это понимаете.

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