4

我需要根据用户是滑动屏幕顶部、屏幕中间还是屏幕底部来触发不同的事件。我试图找出最好/最简单的方法来做到这一点,因为我很确定没有办法从 UISwipeGestureRecognizer 获取位置。

第一个选项是使用“触摸”方法创建我自己的滑动识别器。这似乎非常困难(例如,试图区分滑动和拖动)。

第二种可能性是从“触摸”方法之一(例如touchesBegan)获取位置,并以某种方式将其与滑动相关联。也许在 touchesBegan 中设置一个计时器,然后如果滑动识别器在半秒左右触发,我就会知道滑动连接到该触摸。

我能想到的第三种可能性是在我的视图之上放置 3 个透明子视图,并为每个视图添加不同的滑动识别器。这对我来说似乎是最好的方法,只是透明视图无法识别触摸/滑动事件。那么我该如何解决这个问题呢?

有什么建议么?谢谢。

4

2 回答 2

12

您可能会使用 UISwipeGestureRecognizer 的 locationOfTouch 方法。

CGPoint pt = [recognizer locationOfTouch:0 inView:view];

我相信这将为您提供启动手势的触摸的原始 x,y 坐标。

于 2011-04-19T20:53:01.400 回答
0

我在我的一个项目中使用了你的第三种技术。透明视图可以识别滑动手势。这是我使用的代码,也许你忘记了一些东西。

-(id) initWithPageList:(id<PageListDisplayerDelegate>) iDelegate {
    self = [super init];
    if (self) {
        // Custom initialization
        self.delegate = iDelegate;
        UISwipeGestureRecognizer* swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(viewSwiped:)];
        swipeRecognizer.direction = UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft;
        [self.view addGestureRecognizer:swipeRecognizer];
        [swipeRecognizer release];
    }
    return self;

}

-(void) viewSwiped:(UISwipeGestureRecognizer*) sender {
    NSLog(@"View Swiped");
}
于 2011-05-05T09:09:35.030 回答