Как я могу перенести операции изменения представления из моего контроллера представления при ускорениях?
-
05-07-2019 - |
Вопрос
У меня есть класс контроллера представления. Я хочу сделать некоторые вещи, на мой взгляд, когда акселерометр обнаруживает движение и вызывает акселерометр: 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
- это свойство вашего делегата.