检测在手势识别器对象区域之外开始的滑动

Posted

技术标签:

【中文标题】检测在手势识别器对象区域之外开始的滑动【英文标题】:Detecting a swipe that started outside of Gesture Recognizer object's area 【发布时间】:2013-05-19 14:38:07 【问题描述】:

我正在尝试以一种非常具体的方式检测滑动,但结果好坏参半。我的第一个问题是仅在屏幕的某个区域识别滑动,现在已解决。我目前的问题是:假设我的视图中有一个事物列,并且我使该列的尺寸对应于我的手势识别器。使用该应用程序时,滑动必须在这些维度内开始,才能被识别为滑动。相反,即使用户开始在列区域之外滑动,我也需要识别滑动。事实上,我什至不在乎它是否是滑动,即使是点击或其他什么都可以,我只想知道用户的手指是否曾经在该列中(在这种情况下,他们肯定会从列区域之外)。

这是我当前的代码,其中的单词,但滑动必须在列内开始:

- (IBAction)swiperMethod:(UISwipeGestureRecognizer *)sender 
    CGPoint point = [sender locationInView:self.view];
    if(point.y < 316 && point.y > 76 && point.x < 234 && point.x > 164)
    
        _sampleText.text=@"hi";
    


- (void)viewDidLoad

    [super viewDidLoad];
    UISwipeGestureRecognizer *leftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swiperMethod:)];
    [leftRecognizer setDirection: UISwipeGestureRecognizerDirectionLeft];
    [[self view] addGestureRecognizer:leftRecognizer];
    // Do any additional setup after loading the view, typically from a nib.

是否有人可以告诉我如何识别滑动(或任何手势,我不关心它是否特别是滑动)即使用户只是将他/她的手指拖过该区域?

谢谢!

【问题讨论】:

没人有什么想法吗?还是我的问题不准确? 【参考方案1】:

这个方法有效!

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

    UITouch * touch = [[event allTouches] anyObject];
    CGPoint point = [touch locationInView:touch.view];
    if(point.y < 316 && point.y > 76 && point.x < 234 && point.x > 164)
    
        _sample.image = [UIImage imageNamed:@"normal.png"];
    
    else
    
        _star.image = [UIImage imageNamed:@"alternate.png"];
    


【讨论】:

嘿 jake9115!快速提问,如果用户也从屏幕上开始触摸,这是否有效?我有一个隐藏菜单,我想从右侧拉入,通常触摸会在屏幕外开始...

以上是关于检测在手势识别器对象区域之外开始的滑动的主要内容,如果未能解决你的问题,请参考以下文章

ScrollView - 手势识别器 - 垂直滑动

手势识别器 - 新区域

视图未检测到滑动图像库的手势识别器

识别 UIView 中的滑动手势以使用手势识别器滚动滚动视图

iOS 上的全系统手势识别

iOS:从 iPad 屏幕外开始滑动时,无法识别滑动手势