当视图显示为幻灯片时,自动滚动 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 上无限滚动?

UITableView 和 ScrollView 中的另一个视图

为啥我放置在滚动视图中的图像视图高度扭曲?

具有分页动画自动的滚动视图

键盘显示时更改自动布局常量