[原创]传递UIScrollView的滑动事件到其子视图中
在開發項目時,遇到了一個問題:
我的UIScrollViewOut中嵌入了一個UIScrollViewIn,
當我想要拖動UIScrollViewIn時,UIScrollViewOut卻動了,而UIScrollViewIn沒有動。但是只要按住UIScrollViewIn一會再拖動,UIScrollViewIn就可以滑動。
?
網上查閱UIScrollView的原理:
UIScrollView重載了hitTest方法,當手指touch的時候,UIScrollView會攔截所有event,然后等待150ms,在這段時間內,如果沒有手指沒有移動,當時間結束時,UIScrollView會發送tracking event到子視圖上,并且自身不滑動。在時間結束前,手指發生了移動,那么UIScrollView就會進行滑動,從而取消發送tracking。
?
看來是UIScrollViewOut的問題。直接拖動UIScrollViewIn,此時touch時間在150ms以內,UIScrollViewOut會認為是拖動自己,從而攔截了event,導致UIScrollViewIn接受不到滑動的event。但是只要按住UIScrollViewIn一會再拖動,此時此時touch時間超過150ms,因此滑動的event會發送到UIScrollViewIn上。
?
期間試過幾種方法,只有一種可行,就是重寫UIScrollViewOut的hitTest方法:當滑動UIScrollViewIn時,使UIScrollViewOut不可滑動。
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event {UIView* result = [super hitTest:point withEvent:event];if ([result.superview isKindOfClass:[UIScrollViewIn class]]){self.scrollEnabled = NO;}else {self.scrollEnabled = YES; }return result; }PS:
試過幾種方法都不行,例如:修改UIScrollViewIn為firstResponder;重寫UIScrollViewOut中hitTest方法,永遠返回UIScrollViewIn的指針
轉載于:https://www.cnblogs.com/yangz/p/3537459.html
總結
以上是生活随笔為你收集整理的[原创]传递UIScrollView的滑动事件到其子视图中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NGINX简介及工作原理
- 下一篇: CentOS 6.0安装JDK7