禁用 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的主要内容,如果未能解决你的问题,请参考以下文章
在滚动之前启动时调用 scrollViewDidScroll
如何在 scrollViewDidScroll 中添加 UIView 并使其滚动到最后?
scrollViewDidScroll 在上下滚动 tableview 时被调用 tablecell 内的 uiscrollview