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

StackOverflow https://stackoverflow.com/questions/826933

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top