如果我在frontViewController中已经有一些其他滑动手势(在我的情况下是HomescreenViewController),我如何使用panGestureRecognizer打开sideMenu? 我的frontViewController包含一个包含5个页面的pageViewController。因此,左侧滑动和右侧滑动已经为pageViewController启用。
我在frontViewController的viewDidLoad中使用了以下代码:
_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;
但这也无效。我正在使用最新的SWRevealViewController版本2.4.0
这是我的frontViewController的视图层次结构。 HomescreenViewController> pagerView> PageviewController> listingViewController
此外,当出现侧面菜单时,frontviewController的部分处于活动状态,当我尝试通过向左滑动关闭侧面菜单时,它会将其识别为pageviewcontroller滑动。我希望第一个问题的解决方案也能解决这个问题。
UPDATE(回答):
看看问题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
方法中添加以下代码这是一个委托方法。因此,您应该在viewdidload中向委托人确认。
[_SWSwipeViewForPanGesture addGestureRecognizer:self.revealViewController.panGestureRecognizer];
[self.view bringSubviewToFront:_SWSwipeViewForPanGesture];
多数民众赞成。它只是有效!
答案 0 :(得分:4)
第一个问题的解决方案:
您无法识别一个视图上的两个滑动手势。所以基本上,你的第一个问题的回答是不可能的。您无法在SWRevealViewController
控制器中轻扫pageview
。
第二个问题的解决方案:
使用HomescreenViewController
ViewDidLoad
方法编写此代码。
- (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];
}
可能会对你有帮助。