Facebook의 새로운 iOS 앱과 같은 사이드 와이프 메뉴를 개발하는 가장 좋은 방법은 무엇입니까? 일반적인 인터페이스 요소가되고있는 것으로 보입니다. Facebook은

사이드 스 와이프 메뉴가 더 많은 정보가 각 iPhone 응용 프로그램에 적용됨에 따라 더욱 일반적인 인터페이스 요소가되고있는 것으로 보입니다. Facebook은 최신 버전으로이를 포함 시켰으며 새로운 Gmail 앱에도 포함되어있는 것으로 보입니다 . 더 일반적인 인터페이스 요소가되고 있기 때문에 누군가가 이와 같은 것을 개발하는 가장 효율적인 방법에 대해 생각하고 있는지 궁금합니다. 나는 이것을 구축하는 방법에 대한 내 자신의 생각을 가지고 있지만 다른 사람들의 생각을 듣고 싶어합니다.

페이스 북 슬쩍 탐색



답변

나는 최근에 이것을 만났고 실제로 코드를 보거나 컨트롤을 테스트하지는 않았지만 아주 괜찮은 출발점이 될 것 같습니다.

jtrevealsidebar

편집 : 독자는 다른 답변도 살펴 봐야합니다 🙂


답변

Tom Adriaenssen의 훌륭한 라이브러리가 있습니다 : Inferis / ViewDeck

사용하기가 쉽고 상당히 큰 관심을 끌고 있습니다.

편집하다:

좀 더 가벼운 것을 원한다면 mutualmobile / MMDrawerController를 확인하십시오.

ViewDeck의 모든 기능을 갖추고 있지는 않지만 수정 및 확장이 더 간단합니다.


답변

이를 위해 라이브러리를 만들었습니다. MFSideMenu 라고 합니다 .

아이폰 + 아이 패드, 세로 + 가로, 왼쪽 또는 오른쪽 메뉴, UITabBarController, 팬 제스처 지원 등이 있습니다.


답변

MMDrawerController를 확인하십시오.

MMDrawerController

우리가 좋아하는 라이브러리를 찾을 수 없었으므로 우리는 우리 자신의 것을 굴 렸습니다.


답변

키 생각 당신은해야한다는 설정 self.navigationController.view의 프레임 또는 센터 . 이 두 이벤트 는 처리 할 수 있다고는. (1) barButtonItem을 누릅니다 . (2) 스 와이프로 인한 팬 동작 .

다음과 같이 뷰 컨트롤러를 백그라운드로 보낼 수 있습니다.

[self.view sendSubviewToBack:menuViewController.view];

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(buttonPressed:)];
    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    [self.navigationController.view addGestureRecognizer:panGestureRecognizer];
    self.navigationItem.leftBarButtonItem = barButtonItem;
}

- (void)buttonPressed:(id)sender {

    CGRect destination = self.navigationController.view.frame;

    if (destination.origin.x > 0) {
        destination.origin.x = 0;
    } else {
        destination.origin.x = 320;
    }

    [UIView animateWithDuration:0.25 animations:^{
        self.navigationController.view.frame = destination;
    }];
}

- (void)handlePan:(UIPanGestureRecognizer *)recognizer
{
    static CGPoint originalCenter;

    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
        originalCenter = recognizer.view.center;

    } else if (recognizer.state == UIGestureRecognizerStateChanged)
    {
        CGPoint translation = [recognizer translationInView:self.view];

        recognizer.view.center = CGPointMake(originalCenter.x + translation.x, originalCenter.y);
    }
    else if (recognizer.state == UIGestureRecognizerStateEnded || recognizer.state == UIGestureRecognizerStateCancelled || recognizer.state == UIGestureRecognizerStateFailed)
    {
        if (recognizer.view.frame.origin.x < 160) {
            [UIView animateWithDuration:0.25 animations:^{
                recognizer.view.center = CGPointMake(384, 487.5);
            }];
        } else {
            [UIView animateWithDuration:0.25 animations:^{
                recognizer.view.center = CGPointMake(384 + 320, 487.5);
            }];
        }
    }
}

답변

JASidePanels 가 더 좋습니다 . iPhone과 iPad 모두에서 쉽게 구현되고 작동합니다.

Github 링크 : JASidePanels


답변

Facebook의 구현은 UINavigationBar에 UIPanGestureRecognizer를 배치합니다. 따라서 필요한 곳에서 스 와이프를 잡을 수 있습니다.

이를 통해 x / z의 터치 방향과 발생 속도를 직접 인식하는 등의 작업을 수행 할 수 있습니다.

또한 UIViews (아마도 다른 작업-> 따라서 다른 컨트롤러로 한 번에 하나 이상의 화면에서)와 같은 종류의 땜질은 iOS의 새로운 ViewController-Containment 기능을 사용해야합니다. 그것없이 모든 구현은 단순히 애플이 의도하지 않은 방식으로 뷰 계층 구조를 고려하기 때문에 나쁘다.

참고 사항 : 가능한 한 Facebook과 가까운 방법으로 궁금한 점이 있다면 Github PKRevealController 에서 오픈 소스 프로젝트를 확인하십시오 .