ios - 为 UISwipeGestureRecognizer 设置方向

标签 ios iphone swipe uiswipegesturerecognizer

我想向基于 View 的 iPhone 项目添加简单的滑动手势识别。应识别所有方向(右、下、左、上)的手势。

在 UISwipeGestureRecognizer 的文档中有说明:

You may specify multiple directions by specifying multiple UISwipeGestureRecognizerDirection constants using bitwise-OR operands. The default direction is UISwipeGestureRecognizerDirectionRight.

但是对我来说它不起作用。当所有四个方向都进行“或”运算时,仅识别左右滑动。

- (void)viewDidLoad {
    UISwipeGestureRecognizer *recognizer;

    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
    [recognizer setDirection:(UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionUp)];
    [[self view] addGestureRecognizer:recognizer];
    [recognizer release]; 
    [super viewDidLoad];
}

-(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {
    NSLog(@"Swipe received.");
}

我通过向 View 添加四个识别器来修复此问题,但我很想知道为什么它没有像文档中宣传的那样工作?

- (void)viewDidLoad {
    UISwipeGestureRecognizer *recognizer;

    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
    [recognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
    [[self view] addGestureRecognizer:recognizer];
    [recognizer release];

    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
    [recognizer setDirection:(UISwipeGestureRecognizerDirectionUp)];
    [[self view] addGestureRecognizer:recognizer];
    [recognizer release];

    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
    [recognizer setDirection:(UISwipeGestureRecognizerDirectionDown)];
    [[self view] addGestureRecognizer:recognizer];
    [recognizer release];

    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
    [recognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)];
    [[self view] addGestureRecognizer:recognizer];
    [recognizer release];

    [super viewDidLoad];
}

-(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {
    NSLog(@"Swipe received.");
}

最佳答案

似乎有一个错误。您可以像以前一样指定允许的方向。但是,当您尝试访问触发操作选择器方法中的滑动的实际方向时,您仍然会得到您最初设置的位掩码(对于允许的方向)。

这意味着当允许超过 1 个方向时,对实际方向的检查将始终失败。 当您在选择器方法(即 -(void)scrollViewSwiped:(UISwipeGestureRecognizer *)recognizer)中输出“方向”的值时,您可以很容易地自己看到它。

向 Apple 提交错误报告 (#8276386)。

[更新] 我得到了 Apple 的答复,说该行为按预期工作。

例如,在表格 View 中,您可以在表格 View 单元格中向左或向右滑动以触发“删除”(这会将滑动手势的方向设置为向左和向右)

这意味着原来的解决方法是它应该使用的方式。 direction 属性只能用于正确识别手势,但不能在成功识别时执行的方法中比较触发识别的实际方向。

关于ios - 为 UISwipeGestureRecognizer 设置方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3319209/

相关文章:

iphone - Facebook iPhone 应用程序-启动图标效果

ios - 使用 Swift 从 iOS 应用程序上传文件到 Dropbox

ios - 使用 swift 调用电话不适用于某些号码

swift - 如何访问桌面 View 的平移手势?

java - LibGDX - 向上滑动或向右滑动等?

ios - 在 Xcode 中滚动时固定导航栏

ios - 从 JSON 解码后访问对象属性时发生崩溃

iphone: -[CFString release]: 消息发送到已释放的实例

iphone - 使用 xcodebuild 命令行将应用程序放到 iPhone 上

jquery - 为每个 slider DIV生成Swipe JS slider