SWIFT: 如何修复单元格荧光笔并使整个集合视图滚动而不是荧光笔?
SWIFT: How to fix cell highlighter and make the whole collection view scroll instead of the highlighter?
我正在构建一个 TVOS 应用程序,其中我有这个 collectionView:
当前单元格(滚动到的单元格)以橙色突出显示。
例如,此处用户滚动到第三个单元格:
我想要达到的目标:
当用户滚动到另一个单元格时,我希望 橙色方块 保留在 第一个单元格 和 整个集合中 向左滚动(如果用户向相反方向滚动,则向右滚动。
老实说,我不知道如何实现这一点,或者我应该使用什么。
我应该将整个集合视图嵌入到滚动视图中吗?
不管怎样,下面是该集合视图的实现方式:
extension MoviesViewController2: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print("first function collectionView detected")
return items2.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier:
cellIdentifier, for: indexPath) as! movieCardCell
cell.movieImageView.sd_setImage(with: URL(string: items2[indexPath.item].imageURL))
return cell
}
// Handle collectionViewItem selection
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("didSelectItem\(indexPath)")
}
// Highlight the current cell
func collectionView(_ collectionView: UICollectionView, didUpdateFocusIn context: UICollectionViewFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
if let pindex = context.previouslyFocusedIndexPath, let cell = collectionView.cellForItem(at: pindex) {
cell.contentView.layer.borderWidth = 0.0
cell.contentView.layer.shadowRadius = 0.0
cell.contentView.layer.shadowOpacity = 0.0
}
if let index = context.nextFocusedIndexPath, let cell = collectionView.cellForItem(at: index) {
cell.contentView.layer.borderWidth = 8.0
cell.contentView.layer.borderColor = UIColor.orange.cgColor
cell.contentView.layer.shadowColor = UIColor.orange.cgColor
cell.contentView.layer.shadowRadius = 10.0
cell.contentView.layer.shadowOpacity = 0.9
cell.contentView.layer.shadowOffset = CGSize(width: 0, height: 0)
collectionView.scrollToItem(at: index, at: [.centeredHorizontally, .centeredVertically], animated: true)
}
}
}
如果有人能回答上面的问题,那就太好了。也欢迎任何提示或我应该使用什么。
据我了解,您希望橙色矩形始终保持在同一个位置。滚动时你可以让它消失,并且 re-appear 一旦滚动停止可能但这是一个细节。
因此,您可以放置一个 UIView
与单元格具有相同尺寸(因为所有单元格似乎都具有相同的高度和宽度),并在用户停止滚动时使其显示。
无论如何,我正在再次查看您的问题,我认为我没有正确理解您的问题,特别是这部分 The current cell (The cell which has scrolled to), gets highlighted in Orange.
与 When the user scrolls to another cell, I want the Orange square, to remain in the first cell
的结合
流程可能如下:
- 将您的 collectionView 的大小设置为单个单元格大小。并向左对齐
- 将您的 collectionView 的 clipsToBounds 属性 设置为 false
- 启用 UICollectionView 分页。
- 在您的 collectionView 之上放置一个矩形视图
我正在构建一个 TVOS 应用程序,其中我有这个 collectionView:
例如,此处用户滚动到第三个单元格:
当用户滚动到另一个单元格时,我希望 橙色方块 保留在 第一个单元格 和 整个集合中 向左滚动(如果用户向相反方向滚动,则向右滚动。
老实说,我不知道如何实现这一点,或者我应该使用什么。
我应该将整个集合视图嵌入到滚动视图中吗?
不管怎样,下面是该集合视图的实现方式:
extension MoviesViewController2: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print("first function collectionView detected")
return items2.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier:
cellIdentifier, for: indexPath) as! movieCardCell
cell.movieImageView.sd_setImage(with: URL(string: items2[indexPath.item].imageURL))
return cell
}
// Handle collectionViewItem selection
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("didSelectItem\(indexPath)")
}
// Highlight the current cell
func collectionView(_ collectionView: UICollectionView, didUpdateFocusIn context: UICollectionViewFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
if let pindex = context.previouslyFocusedIndexPath, let cell = collectionView.cellForItem(at: pindex) {
cell.contentView.layer.borderWidth = 0.0
cell.contentView.layer.shadowRadius = 0.0
cell.contentView.layer.shadowOpacity = 0.0
}
if let index = context.nextFocusedIndexPath, let cell = collectionView.cellForItem(at: index) {
cell.contentView.layer.borderWidth = 8.0
cell.contentView.layer.borderColor = UIColor.orange.cgColor
cell.contentView.layer.shadowColor = UIColor.orange.cgColor
cell.contentView.layer.shadowRadius = 10.0
cell.contentView.layer.shadowOpacity = 0.9
cell.contentView.layer.shadowOffset = CGSize(width: 0, height: 0)
collectionView.scrollToItem(at: index, at: [.centeredHorizontally, .centeredVertically], animated: true)
}
}
}
如果有人能回答上面的问题,那就太好了。也欢迎任何提示或我应该使用什么。
据我了解,您希望橙色矩形始终保持在同一个位置。滚动时你可以让它消失,并且 re-appear 一旦滚动停止可能但这是一个细节。
因此,您可以放置一个 UIView
与单元格具有相同尺寸(因为所有单元格似乎都具有相同的高度和宽度),并在用户停止滚动时使其显示。
无论如何,我正在再次查看您的问题,我认为我没有正确理解您的问题,特别是这部分 The current cell (The cell which has scrolled to), gets highlighted in Orange.
与 When the user scrolls to another cell, I want the Orange square, to remain in the first cell
流程可能如下:
- 将您的 collectionView 的大小设置为单个单元格大小。并向左对齐
- 将您的 collectionView 的 clipsToBounds 属性 设置为 false
- 启用 UICollectionView 分页。
- 在您的 collectionView 之上放置一个矩形视图