【发布时间】:2017-05-17 02:28:09
【问题描述】:
我的应用使用分页的水平滚动视图。每个页面都有用户可以点击的 UIControls。
UIScrollView 在处理取消触摸和滑动方面做得很好。如果用户开始滑动的速度足够快,则始终是滑动。如果用户按下足够长的时间来激活高亮状态,则滚动视图不会尝试滑动。
我正在尝试使用 UIPanGestureRecognizer 子类复制此行为,以便我可以响应滚动视图中的向下滑动。但是,如果 UIControls 突出显示,我无法取消手势。
到目前为止,我已经完成了以下工作:
self.refreshGesture.cancelsTouchesInView = YES;
self.refreshGesture.delaysTouchesBegan = NO;
self.refreshGesture.delaysTouchesEnded = NO;
这似乎复制了 UIScrollView 传递触摸 到 视图的方式,但它并没有复制 UIScrollView 的平移手势识别器被取消的方式。无论用户滑动多慢,或者 UIControls 的状态如何,self.refreshGesture 总是会被触发。
我已经尝试在我的手势上设置代理,这可能是要走的路。但我还没有找到有效的组合。例如,仅检查触摸是否在 UIControl 内启动会过于频繁地取消。我还尝试在我的控件中覆盖 gestureRecognizerShouldBegin,但这似乎是一种 hack,并且具有深远的影响(例如,干扰 UITextView 的手势)。
在这个 GIF 中,您可以看到控件在触摸时激活,如果发生这种情况,滚动视图会取消滚动。但我的向下平移手势并没有以同样的方式取消:
【问题讨论】:
标签: ios uiscrollview uigesturerecognizer