Как я могу перенести операции изменения представления из моего контроллера представления при ускорениях? - PullRequest
1 голос
/ 06 мая 2009

У меня есть класс контроллера представления. Я хочу сделать некоторые вещи, на мой взгляд, когда акселерометр обнаруживает движение и вызывает акселерометр: didAccelerate: метод в объекте делегата.

Этот объект делегата - вот проблема моего мозга. В настоящее время мой мозг заморожен, и я не понимаю, что будет лучше. Дайте мне знать, что вы думаете!

Решение 1) В моем классе контроллера представления я соответствую протоколу UIAccelerometerDelegate и реализую этот акселерометр: didAccelerate: метод. В -applicationDidFinishLaunching: метод моего класса AppDelegate я установил этот объект контроллера представления как делегат для получения вызовов метода при ускорениях. Я думаю, что это не очень хорошо.

Решение 2) Я создаю пустой новый объект с именем AccelerationDelegate, соответствую этому протоколу UIAccelerometerDelegate, внедряю этот акселерометр: didAccelerate: метод и в -applicationDidFinishLaunching: метод моего класса AppDelegate устанавливаю этот объект контроллера представления в качестве делегата для получения вызовов метода при ускорениях.

Но для решения 2 мой мозг немного застрял! Как мне получить доступ к объектам вида из моего контроллера вида внутри этого объекта?

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

Какие-нибудь предложения, как я могу сделать это правильно?

Ответы [ 2 ]

2 голосов
/ 06 мая 2009

Я согласен, что второй способ лучше. Вы хотите получить доступ только к выбранному в данный момент представлению вкладки или только к определенному представлению в вашем приложении.

В любом случае я бы настроил свойства вашего UITabViewController в вашем UIApplicationDelegate, чтобы вы могли получить к нему доступ от делегата (вы можете получить делегат приложения, вызвав [[UIApplication sharedApplication] delegate]). Например:

YourApplicationDelegate *appDelegate = (YourApplicationDelegate *)[[UIApplication sharedApplication] delegate];
FirstUIViewController *firstViewController = appDelegate.firstViewController;
[firstViewController doStuff];

, где firstViewController - это свойство вашего делегата.

1 голос
/ 06 мая 2009

Если ваше ускорение относится только к одному контроллеру представления, то имеет смысл заставить контроллер представления получать информацию, необходимую для изменения его собственных подпредставлений. Тем не менее, может быть лучше установить контроллер представления в качестве делегата при отображении представления и установить для делегата значение NULL при его исчезновении. (В частности, - (void) viewWillAppear: и - (void) viewWillDisappear:)

...