我想向基于 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/