双列瀑布流 | 单列瀑布流 |
![]() |
![]() |
// 示例: YourLiveListViewController 代表您直播列表瀑布流的视图控制器class YourLiveListViewController: UIViewController {// 1. 声明 liveListView 作为成员变量// - style: .doubleColumn // 双列瀑布流// - style: .singleColumn // 单列瀑布流// 示例为双列瀑布流,如需单列传入 .singleColumn即可private let liveListView=LiveListView(style: .doubleColumn)public override func viewDidLoad() {super.viewDidLoad()// 2. 将 liveListView 添加到视图上view.addSubview(liveListView)liveListView.snp.makeConstraints { make inmake.edges.equalToSuperview()}// 3. 设置列表的点击事件代理liveListView.itemClickDelegate = self}}
OnItemClickDelegate回调点击事件,您只需在直播列表视图控制器中实现 OnItemClickDelegate 来响应用户的点击事件,并在 onItemClick 中实现跳转进入观众观看页的功能,观众观看页实现 可参考 观众观看:
// 在您的直播瀑布流列表视图控制器中实现 OnItemClickDelegate, 示例:YourLiveListViewControllerextension YourLiveListViewController: OnItemClickDelegate {func onItemClick(liveInfo: LiveInfo, frame: CGRect) {// 1. 实例化您的观众观看视图控制器let audienceVC =YourAudienceViewController(roomId: liveInfo.roomId)audienceVC.modalPresentationStyle = .fullScreen// 2. 跳转到您的观众观看视图控制器present(audienceVC, animated: false)}}
LiveListView 组件提供了 refreshLiveList 和 onRouteToNextPage 方法,方便您仅通过简单的一行代码调用,就能优化直播列表展示与视频流播放体验。具体优化方式如下:// 在您的直播瀑布流列表视图控制器中实现,示例:YourLiveListViewControllerclass YourLiveListViewController: UIViewController {override func viewDidAppear(_ animated: Bool) {super.viewDidAppear(animated)// refreshLiveList: 在viewDidAppear时调用此方法,以确保每次回到当前页面都能拿到最新的列表liveListView.refreshLiveList()}override func viewWillDisappear(_ animated: Bool) {super.viewWillDisappear(animated)// onRouteToNextPage: 在viewWillDisappear时调用此方法,当您进入别的页面时停止当前直播列表页播放的视频流liveListView.onRouteToNextPage()}}
LiveListDataSource 接口来自定义数据源,而不使用组件默认的列表数据。// 示例:YourLiveListViewController 代表您直播列表瀑布流的视图控制器class YourLiveListViewController: UIViewController {private let liveListView: LiveListView=LiveListView(style: .doubleColumn)public override func viewDidLoad() {super.viewDidLoad()view.addSubview(liveListView)liveListView.snp.makeConstraints { make inmake.edges.equalToSuperview()}liveListView.itemClickDelegate = self// 1. 设置自定义数据源代理liveListView.dataSource = self}}// 2. 实现自定义数据源代理: LiveListDataSourceextension YourLiveListViewController: LiveListDataSource {public func fetchLiveList(cursor: String, onSuccess: @escaping LiveListBlock, onError: @escaping TUIErrorBlock) {// 3. 对接自己的业务后台,按照下面的格式返回数据给UI组件var liveInfoList: [LiveInfo] = []var liveInfo = LiveInfo()liveInfo.roomId = "live_123456"liveInfo.name = "live_123456"liveInfoList.append(liveInfo)let cursor = "aabbccdd"onSuccess(cursor, liveInfoList)}}
LiveListViewAdapter 接口来完成。// 示例:YourLiveListViewController代表您直播列表瀑布流的视图控制器class YourLiveListViewController: UIViewController {private let liveListView: LiveListView=LiveListView(style: .doubleColumn)public override func viewDidLoad() {super.viewDidLoad()view.addSubview(liveListView)liveListView.snp.makeConstraints { make inmake.edges.equalToSuperview()}liveListView.itemClickDelegate = selfliveListView.dataSource = self// 1. 设置自定义挂件代理liveListView.adapter = self}}// 2. 实现自定义挂件代理extension YourLiveListViewController: LiveListViewAdapter {public func createLiveInfoView(info: LiveInfo) -> UIView {// 自定义挂件viewreturn YourCustomView(liveInfo: info)}public func updateLiveInfoView(view: UIView, info: LiveInfo) {if let infoView = view as? YourCustomView {// 更新挂件view中绑定的数据infoView.updateView(liveInfo: info)}}}
TUILiveKit 在 GitHub 仓库开源了直播转场动画 LiveTransitioningDelegate ,您只需设置 audienceVC.transitioningDelegate 即可实现跟 TUILiveKit 一样的转场动画:// 在您的直播瀑布流列表视图控制器中的 OnItemClickDelegate 回调中, 示例:YourLiveListViewControllerextension YourLiveListViewController: OnItemClickDelegate {func onItemClick(liveInfo: LiveInfo, frame: CGRect) {let audienceVC =YourAudienceViewController(roomId: liveInfo.roomId)audienceVC.modalPresentationStyle = .fullScreen// 设置过渡动画代理audienceVC.transitioningDelegate = LiveTransitioningDelegate(originFrame: frame)present(audienceVC, animated: false)}}
双列瀑布流直播列表转场动画 | 单列瀑布流转场动画 |
![]() | ![]() |
文档反馈