【问题标题】:Disable scrollViewDidScroll: when scrolling UICollectionView - iOS禁用 scrollViewDidScroll:滚动 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?

【问题讨论】:

  • 可能检查滚动方向:stackoverflow.com/questions/31857333/…
  • 或检查类类型- (void)scrollViewDidScroll:(UIScrollView *)scrollView { if ([scrollView isKindOfClass:[UICollectionView class]] == YES) { // do the trick } }

标签: ios objective-c uicollectionview


【解决方案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
    }
}

【讨论】:

    猜你喜欢
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多