如何使用 Timer 在 UITableView 内自动滚动 UICollectionView?

Posted

技术标签:

【中文标题】如何使用 Timer 在 UITableView 内自动滚动 UICollectionView?【英文标题】:How to auto scroll a UICollectionView inside a UITableView using Timer? 【发布时间】:2019-03-28 22:36:55 【问题描述】:

我希望我的应用程序中的横幅使用计时器自动滚动。如果集合视图是单独的,我可以执行滚动,但是当我的集合视图位于 tableview 中时,我不知道如何执行。

var r = 0
let t = Timer.init(timeInterval: 2, repeats: true)  (timer) in
    let index = IndexPath(item: r, section: 0)
    cell.cltView.scrollToItem(at: index, at: .left, animated: true)
    if r == 6 
       r = 0
    else 
       r = r+1
    

我在 cellForRowAt indexPath 中使用此代码,但它似乎不起作用。

【问题讨论】:

【参考方案1】:

定时器现在只是初始化了,还没有使用。要开始该过程,您需要添加:-

t.fire()

【讨论】:

我有,但它不工作我只是想知道我应该把这段代码放在哪里。我试过 cellForRowAt 和 cellForItemAt 他们都不起作用【参考方案2】:

我通过创建一个函数然后在 cellForItemAt 上调用它来实现我的目标 它解决了我的问题。

func scrollCollection(cltView: UICollectionView) 
    var r = 0

    let t = Timer.scheduledTimer(withTimeInterval: 2, repeats: true)  (timer) in
        print(r)
        let index = IndexPath(item: r, section: 0)
        cltView.scrollToItem(at: index, at: .left, animated: true)
        if r == 6 
            r = 0
        else 
            r = r+1
        
    
    t.fire()


这是我使用的函数,我刚刚调用了它

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)

let mainImg = cell.viewWithTag(20) as! UIImageView

mainImg.image = UIImage(named: banners[indexPath.item])
if op 
    scrollCollection(cltView: collectionView)
    op = false


return cell

我放了一个检查标记,这样我就不会一次又一次地调用它。

【讨论】:

我们可以无限滚动吗?因为使用上面的代码它正在滚动,但在到达最后一个索引后它正在移动到第一个索引(这里集合视图滚动到第一个索引)。

以上是关于如何使用 Timer 在 UITableView 内自动滚动 UICollectionView?的主要内容,如果未能解决你的问题,请参考以下文章

自动刷新 UITableView 帮助

当为每个 UITableViewCell 运行 Timer 时,它们没有被正确回收

如何在 C# 中创建计时器而不使用 System.Timers.Timer 或 System.Threading.Timer

滚动 UITableView 期间计时器将重置并停止运行

应用层timer_如何序列化timer

如何获取错误对象?在deadline_timer中使用成员函数时