Как я могу передать операции изменения представления с моего контроллера представления при ускорении?

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

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

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

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

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

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

Любые предложения, как я мог бы получить это право?


person Thanks    schedule 05.05.2009    source источник


Ответы (2)


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

person Ed Marty    schedule 06.05.2009
comment
Отличная информация об освобождении делегата. Я даже не думал об этом, но это то, что я делаю все время в мире .Net, поэтому я должен был это сделать. Спасибо! - person ; 06.05.2009

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

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

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

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

person Benny Wong    schedule 05.05.2009
comment
Спасибо. Я хочу получить доступ к представлениям (конкретно: объекты UIImageView) внутри UIScrollView. - person Thanks; 06.05.2009