我在我的应用程序中使用 UIScrollView,并使用 scrollviewDidScroll 方法移动不在 ScrollView 内的其他一些 View 。此行为应该仅在用户实际用手指移动 ScrollView 时发生,而不是在触摸事件结束时发生。
目前我正在使用 scrollview 的 dragging 属性来获得这种行为,但是它有一个问题:当用户在 scrollview 上滑动并在它停止减速之前再次触摸它时,dragging 属性不正确,尽管用户正在用手指拖动 ScrollView 。
最佳答案
UIScrollView 有一个 panGestureRecogniser 属性,它跟踪 ScrollView 中的平移手势。您可以在 scrollViewDidScroll 中跟踪平移手势的 state 以准确了解平移处于什么状态。
swift 4.0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.isEqual(yourScrollView) {
switch scrollView.panGestureRecognizer.state {
case .began:
// User began dragging
print("began")
case .changed:
// User is currently dragging the scroll view
print("changed")
case .possible:
// The scroll view scrolling but the user is no longer touching the scrollview (table is decelerating)
print("possible")
default:
break
}
}
}
objective-C
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if ([scrollView isEqual:yourScrollView]) {
switch (scrollView.panGestureRecognizer.state) {
case UIGestureRecognizerStateBegan:
// User began dragging
break;
case UIGestureRecognizerStateChanged:
// User is currently dragging the scroll view
break;
case UIGestureRecognizerStatePossible:
// The scroll view scrolling but the user is no longer touching the scrollview (table is decelerating)
break;
default:
break;
}
}
}
关于ios - UiScrollview scrollviewDidScroll 检测用户触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24584998/