2
  1. Как я могу использовать panGestureRecognizer открыть sideMenu, если у меня уже есть какие-то другие жесты салфетки в frontViewController (в моем случае это HomescreenViewController)? Мой frontViewController содержит pageViewController с 5 страницами. С левой стороны сабвуфера и правый салфетки уже включены для pageViewController.SWRevealViewController panGestureRecognizer с pageViewController прошивкой (меню сбоку на прикосновении)

    Я использовал следующий код в viewDidLoad из frontViewController:

    _sideButton.target = self.revealViewController; 
    _sideButton.action = @selector(revealToggle:); 
    [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer]; 
    [self.view addGestureRecognizer:self.revealViewController.tapGestureRecognizer]; 
    

    Это не будет делать работу вместе с правым движением pageViewController. Затем я использую этот код:

    self.revealViewController.draggableBorderWidth = self.view.frame.size.width/2; 
    

    Но это тоже не working.I я использую последнюю версию SWRevealViewController 2.4.0

    Это мнение иерархия моей frontViewController. HomescreenViewController> pagerView> PageviewController> listingViewController

  2. Кроме того, при появлении меню сбоку, то часть frontviewController активна, и когда я пытаюсь закрыть боковое меню, проведя пальцем влево, он распознает его как pageviewcontroller салфетки. Я надеюсь, что решение первой проблемы также решит это.

UPDATE (ответ): Look принял ответ на номер вопроса 2. Для первого вопроса, если вы столкнулись с такой проблемой, как у меня, просто создать представление с шириной 20 пикселей в направлении влево с помощью кода ниже и добавьте panGestureRecognizer к этому представлению (в viewWillAppear).

SWSwipeViewForPanGesture=[[UIView alloc]initWithFrame:CGRectMake(0, 0,20, self.view.frame.size.height)]; 
_SWSwipeViewForPanGesture.backgroundColor=[UIColor clearColor]; 
[self.view addSubview:_SWSwipeViewForPanGesture]; 
[_SWSwipeViewForPanGesture addGestureRecognizer:self.revealViewController.panGestureRecognizer]; 

Кроме того, я должен добавить следующий код в - (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position Этот метод является делегатом method.So, вы должны подтвердить делегату в viewdidload.

[_SWSwipeViewForPanGesture addGestureRecognizer:self.revealViewController.panGestureRecognizer]; 
[self.view bringSubviewToFront:_SWSwipeViewForPanGesture]; 

Thats it.It просто работает!

ответ

4

решение для первого вопроса:

Вы не можете распознать два салфетки жест на одном месте. Так что в принципе, ответ на ваш первый вопрос невозможен. Вы не можете протащить SWRevealViewController в свой контроллер pageview.

решение для второго вопроса:

Написать этот код в HomescreenViewControllerViewDidLoad метода.

- (void)viewDidLoad 
{ 
SWRevealViewController * revealController=[[SWRevealViewController alloc]init]; 
    revealController = [self revealViewController]; 
    [self.view addGestureRecognizer:revealController.panGestureRecognizer]; 
     revealController.delegate=self; 
    [revealController panGestureRecognizer]; 

    [revealController tapGestureRecognizer]; 
    [btnSideMenu addTarget:revealController action:@selector(revealToggle:) forControlEvents:UIControlEventTouchUpInside]; 

} 

После этого добавьте этот метод делегата от SWRevealViewController в свою HomescreenViewController.

- (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position 
{ 
    if (revealController.frontViewPosition == FrontViewPositionRight) 
    { 
     UIView *lockingView = [UIView new]; 
     lockingView.translatesAutoresizingMaskIntoConstraints = NO; 

     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:revealController action:@selector(revealToggle:)]; 
     [lockingView addGestureRecognizer:tap]; 
     [lockingView addGestureRecognizer:revealController.panGestureRecognizer]; 
     [lockingView setTag:1000]; 
     [revealController.frontViewController.view addSubview:lockingView]; 


     lockingView.backgroundColor=[UIColor ClearColor]; 

     NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(lockingView); 

     [revealController.frontViewController.view addConstraints: 
     [NSLayoutConstraint constraintsWithVisualFormat:@"|[lockingView]|" 
               options:0 
               metrics:nil 
                views:viewsDictionary]]; 
     [revealController.frontViewController.view addConstraints: 
     [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[lockingView]|" 
               options:0 
               metrics:nil 
                views:viewsDictionary]]; 
     [lockingView sizeToFit]; 
    } 
    else 
     [[revealController.frontViewController.view viewWithTag:1000] removeFromSuperview]; 
} 

Возможно, это поможет вам.

+0

Спасибо за ответ Bhumica. Вторая проблема решена. Есть ли способ отключить правку на странице viewcontroller, когда индекс равен нулю? Или мы можем добавить прозрачный вид (например, вы только что сделали) в левый конец HomescreenViewController и добавив в него opensController.panGestureRecognizer? – abhi1992

+0

В Ipad splitviewcontroller я увидел приложение, в котором, когда мы находимся в индексе 0, жестом салфетки работает, чтобы вывести меню вперед. – abhi1992

+0

@ abhi1992, но если вы поместите прозрачный вид на индекс страницы 0, чем вы бы проложили, чтобы перейти на следующую страницу.? – BHUMICA