我在myView
上有一个名为myViewController
的UIView。我有一个名为swipeLeft
的UIGestureRecognizer(下面的代码),用于检测用户何时向其滑动。
问题是:myViewController
在整个屏幕上识别相同的手势并执行另一个操作。因此,当myMethod
swipeLeft
的{{1}}区域为myViewController
时,我希望我的应用myView
执行UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self
action:@selector(myMethod:)];
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
swipeLeft.delaysTouchesBegan = YES;
[self.myView addGestureRecognizer:swipeLeft];
。
myViewController
更多详细信息:我正在使用RESideMenu,而myViewController
是正确的菜单,因此当它可见时,myView
的整个视图会识别所有方向的滑动。我想在这个特定的UIView {{1}}中更改识别器。
谢谢!
答案 0 :(得分:2)
首先,您需要将滑动手势添加到视图控制器头文件中。
@property (strong, nonatomic) UISwipeGestureRecognizer *swipeLeft;
如果您查看DEMORootViewController.m,您将看到此调用:
self.rightMenuViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"rightMenuViewController"];
这将调用你的awakeFromNib,这是你第一次做某事的机会。在这里,您将创建滑动手势。但是,您无法将其添加到视图中,因为此时您的插座尚未设置。第一次设置它们是在viewDidLoad中,因此您可以在其中将手势添加到视图中。因此,将其添加到视图控制器实现文件
- (void)awakeFromNib
{
self.swipeLeft = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(myMethod:)];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self.swipeView addGestureRecognizer:self.swipeLeft];
}
- (void)myMethod:(UISwipeGestureRecognizer *)swipe
{
NSLog(@"Did swipe") ;
}
最后,每当我们的swipeLeft手势发生时,您都需要告诉RESideMenu.m中的平移手势失败。这样做的方法是在第220行将以下代码添加到RESideMenu.m。这是在viewDidLoad方法的末尾。
if ([self.rightMenuViewController isKindOfClass:[DEMOVC class]]) {
DEMOVC *rightVC = (DEMOVC *)self.rightMenuViewController;
if (rightVC.swipeLeft) {
[panGestureRecognizer requireGestureRecognizerToFail:rightVC.swipeGesture];
} } }
这假设您的自定义VC名为DEMOVC。您还需要将自定义VC导入RESideMenu.m,如下所示:
#import "DEMOVC.h"
请告诉我这是否适合您,如果还有别的,我可以帮助您。