最近项目中遇到一个问题,一个界面底部是一个UIScrollView,UIScrollView上放的是UICollectionView,UICollectionView的cell上放的有播放器,当播放时发现播放器上的 UISlider 控件无法拉动,必须按着UISlider0.5s左右才能拉动,为了解决这个问题在网上找了很多方法,都是模糊不清,最后参照网上的方法自己无意解决了这个问题。
网上找到的方法是先自定义一个UIScrollView,把 UIScrollView 的delaysContentTouches 设置为 NO,canCancelContentTouches 设置为YES,然后再在自定义的UIScrollView中重写 - (BOOL)touchesShouldCancelInContentView:(UIView *)view方法就可以解决手势无法识别问题。但是如果一个视图中包含了多个重叠的 UIScrollView 的话,每个UIScrollView都必须实现此方法才能生效。
我的视图因为包含了UIScrollView,UICollectionView(继承UIScrollView),所以UIScrollView、UICollectionView都必须实现以上方法,我的解决方法
_bgScrollView = [[BaseHomeScrollerView alloc] initWithFrame:CGRectMake(0, DEVICE_64 + DEVICE_44, DEVICE_WIDTH, DEVICE_HEIGHT - DEVICE_64 - DEVICE_44)];
_bgScrollView.delaysContentTouches = NO;
_bgScrollView.canCancelContentTouches = YES;
HomePageCollectionView *listView = [[HomePageCollectionView alloc] initWithFrame:CGRectMake(DEVICE_WIDTH * i, 0, DEVICE_WIDTH, self.bgScrollView.frame.size.height) collectionViewLayout:layout];
listView.delaysContentTouches = NO;
listView.canCancelContentTouches = YES;
(HomePageCollectionView是放在BaseHomeScrollerView上的,所以都要重写- (BOOL)touchesShouldCancelInContentView:(UIView *)view方法)
然后运行,播放器上的UISlider就可以轻松的拉动了