禁用 scrollViewDidScroll:滚动 UICollectionView 时 - iOS

Posted

技术标签:

【中文标题】禁用 scrollViewDidScroll:滚动 UICollectionView 时 - iOS【英文标题】:Disable scrollViewDidScroll: when scrolling UICollectionView - iOS 【发布时间】:2018-09-27 17:23:13 【问题描述】:

我已经在我的视图控制器中实现了 scrollViewDidScroll: 以在我上下滚动视图时产生一些动画。

但是,当我在 viewcontroller 中(水平)滚动我的 collectionview 时,它会与我在 scrollViewDidScroll 中的动画混淆:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 

    newAlpha = 1 - scrollView.contentOffset.y / 200;
    self.introImageView.alpha = newAlpha;
    //... -> prevent scrolling when collectionview is scrolled

当水平滚动我的collectionview时,如何防止调用scrollViewDidScroll?

【问题讨论】:

可能检查滚动方向:***.com/questions/31857333/… 或检查类类型- (void)scrollViewDidScroll:(UIScrollView *)scrollView if ([scrollView isKindOfClass:[UICollectionView class]] == YES) // do the trick 【参考方案1】:

最好的方法不是禁用委托方法,而是确保仅在滚动视图调用该代码时才调用该代码。这是一个例子

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
    if (scrollView == self.myScrollView) 
        newAlpha = 1 - scrollView.contentOffset.y / 200;
        self.introImageView.alpha = newAlpha;
     else 
       //collectionView would fall here
    


【讨论】:

你也可以像上面@GIJOW那样使用检查类的方法,但是如果你有多个滚动视图,这个选项也可以工作,并保证它只会在类上被调用你想要它。 谢谢!这对我有用,因为我有多个具有不同逻辑的 collectionView,因此,使这种方法更加整洁。【参考方案2】:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
    if ([scrollView isKindOfClass:[UICollectionView class]] == NO) 
        newAlpha = 1 - scrollView.contentOffset.y / 200;
        self.introImageView.alpha = newAlpha;
        //... -> prevent scrolling when collectionview is scrolled
    

【讨论】:

以上是关于禁用 scrollViewDidScroll:滚动 UICollectionView 时 - iOS的主要内容,如果未能解决你的问题,请参考以下文章

防止uiscrollview向右滚动

scrollViewDidScroll:以编程方式滚动时?

在滚动之前启动时调用 scrollViewDidScroll

UITableViewCell 滚动检测

如何在 scrollViewDidScroll 中添加 UIView 并使其滚动到最后?

scrollViewDidScroll 在上下滚动 tableview 时被调用 tablecell 内的 uiscrollview