ios - 检测 UIScrollView 上的触摸位置?

标签 ios uiscrollview touch uigesturerecognizer uiresponder

我想在用户开始拖动时检测我的 UIScrollView 中的(初始)触摸位置。我用谷歌搜索了这个问题,很多人似乎都在为这个问题而苦苦挣扎。现在,虽然我仍然无法理解为什么 Apple 不允许用户在 ScrollView 中访问触摸信息,但我还是忍不住自己寻找解决方案。但是我所有的尝试都失败了,所以我想问你。

这是我认为可行的方法:

我在我的 UIScrollView 子类中设置了一个像这样的 UIPanGestureRecognizer,并将它添加到它的手势识别器中:

UIPanGestureRecognizer *tapDrag = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(touchedAndDragged:)];
tapDrag.cancelsTouchesInView = NO;
tapDrag.delegate = self;
[self addGestureRecognizer:tapDrag];  

以及对应的方法:

-(void)touchedAndDragged:(UIPanGestureRecognizer*)t{

     CGPoint loc = [t locationInView:self];
     //do something with location (that is exactly what I need)
     //...

     //Now DISABLE and forward touches to scroll view, so that it scrolls normally
     t.enabled = NO;
     /****
     ?????
     *****/

}

正如评论所指出的,我想在点到点后禁用平移手势,然后禁用识别器(同时仍在拖动!)并将触摸“传递”到我的 ScrollView ,以便用户可以滚动一般。这完全可行吗?还有其他解决方案吗?

最佳答案

好吧,UIScrollView 已经有一个内置的平移手势,您可以使用它。用法很简单,只需将类设置为 ScrollView 的委托(delegate)(利用 scrollViewWillBeginDragging)并使用 UIPanGestureRecognizer 的 -locationInView: 确定触摸位置。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    CGPoint location = [scrollView.panGestureRecognizer locationInView:scrollView];
    NSLog(@"%@",NSStringFromCGPoint(location));
}

关于ios - 检测 UIScrollView 上的触摸位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17344597/

相关文章:

ios - UIPageControl + 圆形(无限)滚动

ios - 当我通过滚动弹起时,我想更改图像边界的大小和表格边界的大小

android - 使用 and(&) 运算符在 switch case 期间出现重复大小写错误

c# - 使用 WPF/C# : how to define a threshold to tell apart clicks from panning 的触摸输入

iphone - 谷歌驱动器直接链接到文件

ios - 切换到其他选项卡后 UIMenuItem 未出现

ios - UIScrollView 不滚动

javascript - 触摸事件在 Android PhoneGap WebView(甚至内置浏览器)中不起作用

ios - 将字典键传递给 CFDictionaryGetValue

iphone - 我得到了一个 EXC_BAD_ACCESS,我似乎无法找出原因