在開發項目時,遇到了一個問題:
我的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的指針
新聞熱點
疑難解答