在UIScrollView中为标准Pan Gesture Recognizer添加功能

时间:2011-12-04 17:45:53

标签: ios uiview uiscrollview uigesturerecognizer

我正在尝试跟踪手指在UIScrollView中的位置。 我已经将UIScrollView子类化了(见下文),但不幸的是,我添加的手势识别器正在覆盖标准的手势识别器。

结果我得到了NSLog(@"Pan"),但不幸的是视图不再滚动了。

如何让两个手势识别器同时工作?

感谢。

- (void)viewDidLoad:(BOOL)animated
{
    [super viewDidLoad:animated];

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
    [scrollView addGestureRecognizer:panRecognizer];
}


- (void)pan:(id)sender {
    NSLog(@"Pan");
}

2 个答案:

答案 0 :(得分:14)

如果你想要它不要覆盖标准的那个,你只需要同时识别它们。

- (void)viewDidLoad:(BOOL)animated
{
    [super viewDidLoad:animated];

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
    panRecognizer.delegate = self;
    [scrollView addGestureRecognizer:panRecognizer];
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
     return TRUE;
}


- (void)pan:(id)sender {
    NSLog(@"Pan");
}

答案 1 :(得分:4)

编辑:此方法有效!您只需要尽快设置canCancelContentTouches(我在viewDidLoad中进行设置。)

原始答案:我尝试了一种新的方法,但不幸的是它没有完全发挥作用。

我没有添加手势识别器,而是继承UIScrollView并编写自己的touchesBegantouchesMoved等方法。

这样我知道用户在哪里触摸但不幸的是,每当我开始滚动时,即使将touchesCancelled设置为NO ,PanGestureRecognizer也会触发canCancelContentTouches

有人知道为什么吗?我还找到了this