You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现引导启动屏轮播完3个页面后停止自动切换

解决引导屏轮播一轮后停止自动切换的方案

首先,我们需要跟踪页面切换的进度,这样才能准确判断什么时候完成了一轮完整的轮播。这里给你两种贴合不同需求的实现思路,你可以根据自己的场景选择:


方案一:展示完最后一个页面后停止(停在末页)

如果希望引导屏从第一页依次切换到最后一页后,就停止自动切换,不再循环回首页,用这个方案就合适。

实现步骤:

  1. 新增两个变量,用来跟踪当前页面位置和总页面数量:
private var pageChangeTimer: Timer?
let pageChangeInterval: TimeInterval = 5.0
// 当前页面索引,假设从0开始计数(对应第一个引导页)
private var currentPageIndex = 0
// 引导屏总页面数,这里固定为3
private let totalPages = 3
  1. 修改定时器的回调逻辑,每次切换页面后检查是否到达最后一页,到达就停止定时器:
pageChangeTimer = Timer.scheduledTimer(withTimeInterval: pageChangeInterval, repeats: true) { [weak self] timer in
    guard let self = self else { return }
    // 执行你的页面切换逻辑
    self.rotateScreen()
    // 更新当前页面索引
    self.currentPageIndex += 1
    
    // 当当前页面是最后一页时,说明已经完成一轮展示
    if self.currentPageIndex >= self.totalPages - 1 {
        // 停止定时器并置空,避免内存泄漏
        timer.invalidate()
        self.pageChangeTimer = nil
    }
}

方案二:完整循环一轮后停止(回到首页后停止)

如果需要引导屏完成「第一页→第二页→第三页→第一页」的完整循环后再停止,就用这个方案。

实现步骤:

  1. 新增切换次数计数器和总页面数变量:
private var pageChangeTimer: Timer?
let pageChangeInterval: TimeInterval = 5.0
// 记录页面切换的次数,初始为0
private var switchCount = 0
// 引导屏总页面数,这里固定为3
private let totalPages = 3
  1. 修改定时器回调,每次切换后累加计数,达到总页面数时停止定时器:
pageChangeTimer = Timer.scheduledTimer(withTimeInterval: pageChangeInterval, repeats: true) { [weak self] timer in
    guard let self = self else { return }
    // 执行你的页面切换逻辑
    self.rotateScreen()
    // 更新切换次数
    self.switchCount += 1
    
    // 切换次数等于总页面数时,说明完成了一轮完整循环
    if self.switchCount == self.totalPages {
        timer.invalidate()
        self.pageChangeTimer = nil
    }
}

额外提醒:

为了避免内存泄漏,记得在页面销毁时(比如deinit方法或者viewWillDisappear生命周期里)主动清理定时器:

deinit {
    pageChangeTimer?.invalidate()
    pageChangeTimer = nil
}

如果你的rotateScreen()方法里已经有维护页面索引的逻辑,那可以直接复用那个变量,不用额外新增currentPageIndex,减少重复代码。

内容的提问来源于stack exchange,提问作者Anpas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:07:26