2013-07-13 3 views
0

광산은 실제로 프로그래밍 문제는 아니지만 IOS 프로그래밍에서 모델보기 컨트롤러 디자인 패턴과 관련된 디자인 문제입니다. 나는 IOS에 익숙하지 않지만 올바른 방법으로 일을하고 싶습니다. 그래서 나는 몇몇 애니메이션을하는이 뷰를 가지고 있지만 애니메이션이 끝나면 컨트롤러에 "통지"하고 싶습니다. 보기가 컨트롤러에 대한 참조를 가질 수 없다는 것을 알고 있습니다. 페이지 읽기 : 첫 번째 도면에서 볼 https://developer.apple.com/library/ios/#referencelibrary/GettingStarted/RoadMapiOS/chapters/StreamlineYourAppswithDesignPatterns/StreamlineYourApps/StreamlineYourApps.html보기에서 컨트롤러로 통보하는 MVC 디자인 문제

을 - 제어 통신은 사용자 액션 (뷰에서 IBActions) 및 컨트롤러 업데이트이다. 내가 생각 가능한 해결 방법 :

  • 알림, 심지어는 (은
  • 컨트롤러를 폴링 애니메이션이 완료 될 때까지 뷰의 속성의 상태를 확인 할 수있는 그림에 존재하지 않는 메인 스레드를 차단할 수 있습니다 내가 틀리지 않다면)
  • 주요 가치 관찰, 통보처럼 보입니다.

교환에 대한 아이디어 나 모범 사례가 있습니까? 미리 감사드립니다.

답변

2

, 그들은 당신이 여러 개체를 통지 할 때 더 나은 사용되는 것, 또는 당신은 당신이 통지 할 개체를 모르겠어요. 컨트롤러에서 뷰에 대한 참조를 얻는 쉬운 방법이없는 경우에도 사용할 수 있지만 대개는 그렇지 않습니다. 위임장을 벗어난 한 가지 방법이 아마도 최선의 방법 일 것입니다. 뷰는 델리게이트 프로토콜을 정의하고 애니메이션이 끝나면 델리게이트 메소드를 호출합니다. 뷰의 위임자로 자신을 설정하는 컨트롤러는 해당 애니메이션의 끝 부분에 적절히 응답하는 위임 메서드를 구현합니다.

+0

감사합니다. 위임에 대해 생각해 보지 않았습니다. 유효한 접근 방법 인 것 같습니다. – Sanandrea

0

코드를 제공하지 않으므로 ViewController가 애니메이션을 유발 한 객체라고 가정합니다. 그렇다면 애니메이션의 끝은 블록 내부에서 처리되어야합니다. 예 : NSNotifications를 사용할 수 있지만

[UIView animateWithDuration:0.5 
       animations:^(void) { your animation code here } 
       completion:^(BOOL finished) { your completion code here }]; 
+0

아니요,보기는 애니메이션을 시작하는보기입니다. 뷰 컨트롤러에는 서브 뷰에 대한 참조가 있으므로 깔끔한 방법으로 컨트롤러를 수행 할 수 없습니다. 감사합니다 – Sanandrea

+0

그러면 알림이 가장 좋은 해결책이라고 생각합니다. –

관련 문제