【发布时间】:2019-01-11 22:17:14
【问题描述】:
我正在寻找一种方法,当您滚动到 collectionView 中的另一个单元格时,您可以更改 imageView 中的图像。
所以当滚动单元格的(1)我想改变图像(2)。
创建这个的最佳方法是什么?
我已经做了很多研究,但从未找到解决方案。
【问题讨论】:
我正在寻找一种方法,当您滚动到 collectionView 中的另一个单元格时,您可以更改 imageView 中的图像。
所以当滚动单元格的(1)我想改变图像(2)。
创建这个的最佳方法是什么?
我已经做了很多研究,但从未找到解决方案。
【问题讨论】:
UICollectionView 是UIScrollView 的子类,所以,
collectionView.delegate = self
UIScrollViewDelegate
现在实现scrollViewDidScroll 像:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let visibleRect = CGRect(origin: collectionView.contentOffset, size: collectionView.bounds.size)
let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
let visibleIndexPath = collectionView.indexPathForItem(at: visiblePoint)
}
在上面的代码中,我们将为您的collectionView 获取可见项。
现在您可以使用此visibleIndexPath 来更新您的外部图像。
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let visibleRect = CGRect(origin: collectionView.contentOffset, size: collectionView.bounds.size)
let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
let visibleIndexPath = collectionView.indexPathForItem(at: visiblePoint)
outerImageView.image = UIImage(named: outerImageNames[visibleIndexPath.row])
}
这里outerImageView 指的是您的外部图像,outerImageNames 是一个图像名称字符串数组。
我假设外部UIImageView 的图像存在于您的捆绑包中。但如果图像来自其他来源,则可以调整图像设置逻辑。如果图像来自异步 API(文件系统或网络调用),我强烈建议使用重缓存(如果是这种情况,请考虑使用 KingFisher 或 SDWebImage)。
【讨论】: