gpt4 book ai didi

ios - 为 UISwipeGestureRecognizer 设置方向

转载 作者:IT王子 更新时间:2023-10-29 07:27:59 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com