当视图显示为幻灯片时,自动滚动 UICollectionView 元素。
Posted
技术标签:
【中文标题】当视图显示为幻灯片时,自动滚动 UICollectionView 元素。【英文标题】:Scroll the UICollectionView elements automatically as the view appears like a slideshow. 【发布时间】:2017-03-06 06:03:37 【问题描述】:我正在 swift 3 中处理一个项目,目前我可以通过一个接一个地拖动来浏览 UICollectionView 项目。我的要求是在屏幕出现时将它们(项目)显示为幻灯片而不拖动它们(需要禁用它)。我现在的代码如下。由于我是新来的 swift 帮助将不胜感激。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "SuggestedCell", for: indexPath) as! SuggestedMP3CollectionViewCell
//background of collectionview
let view=UIView()
view.backgroundColor=UIColor(patternImage:collectionViewImageArray [indexPath.row])
cell.backgroundView=view
cell.featuredSongLabel.text = "Featured Song"
cell.suggestedHealerNameLabel.text = "Healer"
cell.suggestedTeaserDescriptionLabel.text = "Teaser"
cell.suggestedMusicImageView.image = imageArray [indexPath.row]
// cell.suggestedMusicImageView.image = collectionViewImageArray [indexPath.row]
return cell
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return 20
//return collectionViewCount!
func numberOfSections(in collectionView: UICollectionView) -> Int
return 1
【问题讨论】:
【参考方案1】:当您配置收藏视图或重新加载它时,您需要添加一个用于自动滚动的计时器。
let kAutoScrollDuration: CGFloat = 4.0
var timer = Timer.scheduledTimer(timeInterval: kAutoScrollDuration, target: self, selector: #selector(self.nextPage), userInfo: nil, repeats: true)
RunLoop.main.addTimer(timer, forMode: NSRunLoopCommonModes)
现在你的计时器将在指定的时间间隔后调用 nextPage
func nextPage()
// 1.back to the middle of sections
var currentIndexPathReset = self.resetIndexPath()
// 2.next position
var nextItem: Int = currentIndexPathReset.item + 1
if nextItem == self.banners.count
nextItem = 0
var nextIndexPath = IndexPath(item: nextItem, section: 0)
// 3.scroll to next position
self.collectionView?.scrollToItem(at: nextIndexPath, atScrollPosition: .left, animated: true)
现在,如果我们已经到达最后一个索引,那么我们需要重置 indexPath,因此我们有 resetIndexPath 方法,它也会返回 currentIndexPath。
func resetIndexPath() -> IndexPath
// currentIndexPath
var currentIndexPath: IndexPath? = self.collectionView?.indexPathsForVisibleItems?.last
// back to the middle of sections
var currentIndexPathReset = IndexPath(item: currentIndexPath?.item, section: 0)
self.collectionView?.scrollToItem(at: currentIndexPathReset, atScrollPosition: .left, animated: false)
return currentIndexPathReset!
【讨论】:
在“nextPage”功能中能否解释一下什么是“self.banner.count” 对我来说 self.banner.count 给出了 collectionView 中的单元格数量,因为 self.banner 是一个对象数组 非常感谢以上是关于当视图显示为幻灯片时,自动滚动 UICollectionView 元素。的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xcode 项目中的 Scroll View 上无限滚动?