当用户开始拖动时,我想检测我的 UIScrollView 中的(初始)触摸位置。我用谷歌搜索了这个问题,许多人似乎都在为这个问题而苦苦挣扎。现在,虽然我仍然无法理解为什么 Apple 不允许用户在滚动视图中访问触摸信息,但我还是忍不住自己找到了解决方案。但是我所有的尝试都失败了,所以我想问你。
这是我认为可行的方法:
我在我的 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;
/****
?????
*****/
}
正如评论所指出的,我想在获得点后禁用平移手势,然后禁用识别器(同时仍在拖动!)并将触摸“传递”到我的滚动视图,以便用户可以正常滚动。这完全可行吗?还有其他解决方案吗?