사이드 스 와이프 메뉴가 더 많은 정보가 각 iPhone 응용 프로그램에 적용됨에 따라 더욱 일반적인 인터페이스 요소가되고있는 것으로 보입니다. Facebook은 최신 버전으로이를 포함 시켰으며 새로운 Gmail 앱에도 포함되어있는 것으로 보입니다 . 더 일반적인 인터페이스 요소가되고 있기 때문에 누군가가 이와 같은 것을 개발하는 가장 효율적인 방법에 대해 생각하고 있는지 궁금합니다. 나는 이것을 구축하는 방법에 대한 내 자신의 생각을 가지고 있지만 다른 사람들의 생각을 듣고 싶어합니다.
답변
나는 최근에 이것을 만났고 실제로 코드를 보거나 컨트롤을 테스트하지는 않았지만 아주 괜찮은 출발점이 될 것 같습니다.
편집 : 독자는 다른 답변도 살펴 봐야합니다 🙂
답변
Tom Adriaenssen의 훌륭한 라이브러리가 있습니다 : Inferis / ViewDeck
사용하기가 쉽고 상당히 큰 관심을 끌고 있습니다.
편집하다:
좀 더 가벼운 것을 원한다면 mutualmobile / MMDrawerController를 확인하십시오.
ViewDeck의 모든 기능을 갖추고 있지는 않지만 수정 및 확장이 더 간단합니다.
답변
이를 위해 라이브러리를 만들었습니다. MFSideMenu 라고 합니다 .
아이폰 + 아이 패드, 세로 + 가로, 왼쪽 또는 오른쪽 메뉴, UITabBarController, 팬 제스처 지원 등이 있습니다.
답변
답변
키 생각 당신은해야한다는 설정 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 에서 오픈 소스 프로젝트를 확인하십시오 .