我的应用使用分页水平滚动视图。每个页面都有UIControls,用户可以点击。
UIScrollView可以很好地处理触摸和滑动的取消。如果用户开始足够快地滑动,则总是轻扫。如果用户触摸足够长时间以激活突出显示的状态,则滚动视图不会尝试滑动。
我尝试使用UIPanGestureRecognizer子类复制此行为,以便我可以在滚动视图中响应向下滑动。但是,如果UIControl被突出显示,我无法取消手势。
到目前为止,我已完成以下工作:
self.refreshGesture.cancelsTouchesInView = YES;
self.refreshGesture.delaysTouchesBegan = NO;
self.refreshGesture.delaysTouchesEnded = NO;
这似乎与UIScrollView通过触摸到视图的方式重复,但它并没有复制UIScrollView的平移手势识别器被取消的方式。无论用户滑动的速度有多慢,或者UIControl的状态如何,都会始终触发self.refreshGesture
。
我已尝试在我的手势上设置代表,这可能是要走的路。但我还没有发现一种有效的组合。例如,仅检查触摸是否在UIControl内开始取消太频繁。我也尝试在我的控件中覆盖gestureRecognizerShouldBegin
,但这看起来像是一个黑客,并且具有深远的影响(例如,干扰了UITextView的手势)。
在此GIF中,您可以看到控件在触摸时激活,如果发生这种情况,滚动视图会取消滚动。但我的向下手势并没有以同样的方式取消:
答案 0 :(得分:0)
我无法完全复制此内容,但WWDC 2014 #235建议了两种可能性。
UIScrollViewDelegate
。