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

使用Coordinator时,如何给视图控制器间添加自定义转场延迟?

在Coordinator模式下实现视图控制器转场延迟

要在Coordinator模式下给页面转场添加延迟,核心是将导航push操作包裹在延迟执行的代码块中,同时可以配合调整cell选中状态的时机优化交互体验,具体修改如下:

1. 修改Coordinator的导航逻辑

在ItemsCoordinator的passData方法中,使用GCD的asyncAfter实现延迟push:

class ItemsCoordinator: ItemsBaseCoordinator {
    
    func passData(i: Int) {
        // 设置延迟时长,示例为0.5秒,可按需调整
        let delayDuration = 0.5
        DispatchQueue.main.asyncAfter(deadline: .now() + delayDuration) { [weak self] in
            guard let self = self else { return }
            let vc = Items2ViewController()
            vc.selectedIndex = i
            self.navigationRootViewController?.pushViewController(vc, animated: true)
        }
    }
}

2. 优化列表交互体验(可选)

在ItemsViewController的tableView(_:didSelectRowAt:)方法中,同步延迟取消cell的选中状态,让交互更自然:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    coordinator?.passData(i: indexPath.row)
    // 延迟取消选中,时长和转场延迟保持一致
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
        tableView.deselectRow(at: indexPath, animated: true)
    }
}

关键说明

  • 用[weak self]避免Coordinator与导航控制器之间的循环引用,保证内存安全。
  • 延迟时长可根据需求调整(比如0.3-1秒),平衡交互反馈和跳转流畅度。
  • 如果不需要转场动画,可将pushViewController的animated参数设为false,不影响延迟逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:30:59