가속시기시기 컨트롤러에서 뷰 변화 작동을 아웃소싱하려면 어떻게해야합니까?
-
05-07-2019 - |
문제
보기 컨트롤러 클래스가 있습니다. 가속도계가 움직임을 감지하고 가속도계를 호출 할 때 내 관점에서 몇 가지 일을하고 싶습니다 : didaccelerate : method in the delegate 객체.
그 대표 대상은 여기 내 뇌의 문제입니다. 현재, 내 뇌는 얼고 더 나은 것을 얻지 못합니다. 당신이 무슨 생각을하는지 제게 알려주세요!
솔루션 1) 내보기 컨트롤러 클래스 I에서 i는 uiaccelerometerdelegate 프로토콜을 준수하고 해당 가속도계를 구현합니다 : didaccelerate : method. -ApplicationDidFinishLaunching : 내 AppDelegate 클래스의 메소드 I에서는 컨트롤러 객체를 가속시 수신 방법 호출 대의원으로 설정합니다. 나는 그것이 정말 좋지 않다고 생각합니다.
솔루션 2) 나는 accelerationdelegate라는 빈 새 개체를 만듭니다. 해당 uiaccelerometerdelegate protocol을 준수하고, 그 가속도계 : didaccelerate : method and at -applicationDidFinishLaunching : 내 AppDelegate 클래스의 메소드 나는 메서드 호출 수신을위한 위임자로 컨트롤러 개체를 설정했습니다. 가속시.
그러나 솔루션 2를 위해 내 뇌가 조금 붙어있었습니다! 해당 객체 내부의 View Controller에서 View Objects에 어떻게 액세스합니까?
여기서 문제는 주변에 하나 이상의 뷰 컨트롤러가 있다는 것입니다. 탭 바 컨트롤러를 사용하여 간격을 전환합니다.
내가 어떻게 제대로 얻을 수 있는지 제안하는 것이 있습니까?
해결책
가속이 하나의 뷰 컨트롤러에만 해당되는 경우 뷰 컨트롤러가 자체 하위 뷰를 변경하는 데 필요한 정보를 수신하도록하는 것이 합리적입니다. 그러나보기 컨트롤러를 뷰가 나타날 때 대의원으로 설정하고 사라질 때 대의원을 NULL로 설정하는 것이 좋습니다. (구체적으로, - (void) viewWillAppear:
그리고 - (void) viewWillDisappear:
)
다른 팁
두 번째 방법이 더 좋다는 데 동의합니다. 현재 선택한 탭보기 또는 앱의 특정보기 만 액세스하려고합니까?
어쨌든, 내가 할 일은 당신을위한 속성을 설정하는 것입니다. UITabViewController
당신의 UIApplicationDelegate
대의원에서 액세스 할 수 있도록 [[UIApplication sharedApplication] delegate]
). 예를 들어:
YourApplicationDelegate *appDelegate = (YourApplicationDelegate *)[[UIApplication sharedApplication] delegate];
FirstUIViewController *firstViewController = appDelegate.firstViewController;
[firstViewController doStuff];
어디 firstViewController
대의원의 재산입니다.