2012-02-25 2 views
2

나는 Facebook-esque 슬라이드 오버 UITableView를 사용할 것이다.잠깐 UINavigationView 이동하기 - Facebook 스타일

enter image description here

나는 것을 성취 한 애니메이션과 그림자 모두를 놓습니다. 내 걱정은 내가 그것을 완전히 잘못된 길로하고있다. 그리고 그것은 모든 것이 올바르게 작동하지 않는다는 것이다.

응용 프로그램에는 UINavigationController 인 rootViewController (UIWindow의)가 있습니다. UINavigationController (루트보기 컨트롤러) 내부의 뷰에는 leftBarButtonItem 속성이 설정되어 있습니다. 다음은 버튼을 누를 때 실행되는 코드입니다.

- (void)showFeedList { 
    //set the feed list as showing even before it is 
    feedListShowing = YES; 
    //to show the feed list, we need to instanciate one 
    feedSelectionListViewController = [[FeedSelectionListViewController alloc] initWithNibName: @"FeedSelectionListViewController" bundle: nil]; 
    //set the frame to 200 points to the left of the screen 
    feedSelectionListViewController.view.frame = CGRectOffset(feedSelectionListViewController.view.frame, -200, 20); 

    NSInteger offset = feedSelectionListViewController.view.frame.size.width; 

    //store a pointer to the root navigation controller, and add the list view controller's view to the navigation controller's view 
    UINavigationController *navigationController = (UINavigationController *)UIApplication.sharedApplication.delegate.window.rootViewController; 
    [navigationController.view addSubview: feedSelectionListViewController.view]; 

    //animate the navigation bar, feed selection list, and this view controller's view to the right 
    [UIView animateWithDuration: LIST_SHOW_TRANSITION_TIME animations: ^{ 
     self.view.frame = CGRectOffset(self.view.frame, offset, 0); 
     navigationController.navigationBar.frame = CGRectOffset(navigationController.navigationBar.frame, offset, 0); 
     feedSelectionListViewController.view.frame = CGRectOffset(feedSelectionListViewController.view.frame, offset, 0); 
    }]; 
} 

이것은 정말 지저분하고 모든 것이 제대로 작동하는 것은 아닙니다. 첫째, 사용자가 떠나서 응용 프로그램으로 돌아 오면 UINavigationBar가 프레임을 다시 설정 한 것처럼 보입니다. 통화 중 상태 표시 줄이 켜지거나 꺼질 때도 마찬가지입니다. 둘째, 오른쪽에있는보기 내의 모든보기가 오른쪽으로 이동하지 않습니다. 나는 이것이 왜 있는지 모른다. 내가

navigationController.view.frame = CGRectOffset(navigationController.view.frame, 200, 0); 

와 애니메이션 블록을 교체하는 경우

그러나, 그것은 잘 작동합니다. 네비게이션 컨트롤러에 의해 현재 디스플레이 된 뷰의 서브 뷰가 그에 따라 이동하고, 애플리케이션이 재개 될 때 모든 것이 올바른 위치에있게된다. 그러나 사이드 바보기가 터치 이벤트를 수신하지 못하고, 사이드 바에서 이루어진 터치가 이제 AppDelegate에 의해 처리됩니다. UIView의 프레임에 {-200, 0}의 원점이 있기 때문에 이것이 확실하지는 않지만 이것이 의심 스럽습니다.

나는 뭔가를 이해하고 있다고 생각하지 않습니다. 이것을하는 것이 올바른 방법일까요? 나는 그것을하는 다른 방법을 생각할 수 없다. 어쨌든, 사전에 모든지도 또는 제안에 대한 감사드립니다.

- 매트 당신이해야 할 노력하고 정확히 무엇을 당신은 이미 내 https://github.com/pkluz/PKRevealController

의이 라이브러리가 설치되어 찾고있는

답변

1

. 가늘고 사용하기 편리합니다. 자신을 다시 구현하면 실제 앱에서 작업 할 수 없게됩니다. :-)

구현 중에 발생하는 문제는 물론 코드를 숨김으로써 알 수있는 문제는 다양합니다. 주로 뷰 계층을 남용하고 있기 때문에 문제가 발생할 것이라는 사실이 중요합니다.

기본적으로 두 개의 UIViewController가 iPhone 화면을 관리합니다. 처음에는 Apple이 의도 한 것이 아니 었습니다. 어느 시점에서든 하나의 ViewController 만 존재한다고 생각했기 때문입니다. - 이것은 iPad와 UISplitViewController로 변경되었습니다. 최근 iOS 5에서 새로운 API를 사용하면 자신의 ViewController를 계층에 추가 할 수 있습니다.

문제는 FeedSelectionListViewController가 viewWill/Did/Appear/Disappear 및/또는 rotation 호출을 수신하는 데 어려움이 있다는 것입니다. 실제로 체인의 일부가 아니기 때문입니다.

내 대답은 내가 제공하는 라이브러리를 확인하거나 UIViewController 포함을 먼저 조사하는 것입니다. 코드가 특정 조건에서 작동 할 수는 있지만 일반적으로 올바른 접근 방식이 아닌 것을 보는 것은 고칠 수 없기 때문입니다.

+0

당신의 솔루션을 사용하는 것처럼 유혹하는 것처럼, 이것은 내 선생님을위한 프로젝트입니다 (그녀는 우리 학교 신문의 RSS 리더를 원합니다). 나는 꽤 바쁜 학생이므로 응용 프로그램 작업을 할 핑계가됩니다. 최근에 UIKit의 고급 기능을 사용하여 게임을 할 시간이별로 없었으므로 기술을 익히고 직접 구현하고 싶습니다 (드래그하고 탭하지 않기 위해 노력하고 있습니다). 나는 무슨 일이 일어나고 있는지 모르겠다 고 저를 괴롭혔습니다. 간단히 말해서, 나는 단지 사물을 받아들이는 것 대신에 왜 사물인지를 알고 싶어합니다. –

+0

나는 당신의 자신의 해결책으로 당신을 더 잘 인도하기 위하여 편집을 추가했다. – pkluz

+0

UIViewController 포함 메서드를 구현하는 내 자신의 UIViewController를 만드는 방법을 살펴 보겠습니다. - 당신의 안내에 감사드립니다. - 그러나 나는 아직도 혼란 스럽다. 내가 한 일이 왜 효과가 없었는가. UINavigationBar가 원래 위치로 돌아가는 이유와 UIView가 터치 이벤트를받지 못하는 이유와 UIView의 프레임을 변경해도 서브 뷰가 변경되지 않은 이유를 알고 싶습니다. 모두 매우 혼란 스럽습니다. –

관련 문제