ParallaxOverlay
ParallaxOverlay 是如果您想在 UICollectionView
中的 overlay 视图中使用视差效果的快速解决方案。
安装
SPM
ParallaxOverlay
通过 Swift Package Manager 提供支持。
使用 Xcode 11,转到 文件 -> Swift Packages -> 添加包依赖
并输入 https://github.com/fortmarek/ParallaxOverlay
CocoaPods
ParallaxOverlay 通过 CocoaPods 提供。要安装,只需将以下行添加到 Podfile
pod 'ParallaxOverlay'
实现这个非常简单,首先使用提供的自定义 UICollectionViewFlowLayout
let parallaxLayout = ParallaxLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: parallaxLayout)
// Our collection view needs to be bigger than our `view`, otherwise the cells would die when off-screen and our parallax values would just disappear
let collectionViewOverlap: CGFloat = 30
collectionView.contentInset = UIEdgeInsets(top: 0, left: -collectionViewOverlap, bottom: 0, right: collectionViewOverlap)
collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: -collectionViewOverlap).isActive = true
collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: collectionViewOverlap).isActive = true
然后转到您在 UICollectionView
中使用的 UICollectionViewCell
,并在这个 UICollectionView
中实现 func apply(_ layoutAttributes: UICollectionViewLayoutAttributes)
函数,我们需要指定如何实际上应用我们的视差
// Applying parallaxValue
override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) {
super.apply(layoutAttributes)
guard let layoutAttributes = layoutAttributes as? ParallaxLayoutAttributes else { return }
// Max horizontal parallax from initial position
let maxHorizontalParallax: CGFloat = 80
// Default leading offset of infoStackView
yourParallaxConstraint.constant = layoutAttributes.parallaxValue * maxHorizontalParallax
}
在这个函数中,我们只需将 parallaxValue
应用于我们希望移动轴的约束。
... 然后我们就准备好了!