From a79f5140b58a6cd36a8db8bebdb4b5107168822c Mon Sep 17 00:00:00 2001 From: CMK Date: Wed, 24 Feb 2021 17:23:01 +0800 Subject: [PATCH] feat: profile timeline scroll performance --- ...adMoreConfigurableTableViewContainer.swift | 7 ++++++ .../HomeTimelineViewController.swift | 22 +++++++------------ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Mastodon/Protocol/LoadMoreConfigurableTableViewContainer.swift b/Mastodon/Protocol/LoadMoreConfigurableTableViewContainer.swift index bc90ab1ed..4f32be54a 100644 --- a/Mastodon/Protocol/LoadMoreConfigurableTableViewContainer.swift +++ b/Mastodon/Protocol/LoadMoreConfigurableTableViewContainer.swift @@ -23,6 +23,13 @@ extension LoadMoreConfigurableTableViewContainer { func handleScrollViewDidScroll(_ scrollView: UIScrollView) { guard scrollView === loadMoreConfigurableTableView else { return } + // check if current scroll position is the bottom of table + let contentOffsetY = loadMoreConfigurableTableView.contentOffset.y + let bottomVisiblePageContentOffsetY = loadMoreConfigurableTableView.contentSize.height - (1.5 * loadMoreConfigurableTableView.visibleSize.height) + guard contentOffsetY > bottomVisiblePageContentOffsetY else { + return + } + let cells = loadMoreConfigurableTableView.visibleCells.compactMap { $0 as? BottomLoaderTableViewCell } guard let loaderTableViewCell = cells.first else { return } diff --git a/Mastodon/Scene/HomeTimeline/HomeTimelineViewController.swift b/Mastodon/Scene/HomeTimeline/HomeTimelineViewController.swift index 153f46130..906708fac 100644 --- a/Mastodon/Scene/HomeTimeline/HomeTimelineViewController.swift +++ b/Mastodon/Scene/HomeTimeline/HomeTimelineViewController.swift @@ -175,23 +175,17 @@ extension HomeTimelineViewController { // MARK: - UIScrollViewDelegate extension HomeTimelineViewController { func scrollViewDidScroll(_ scrollView: UIScrollView) { - guard scrollView === tableView else { return } - let cells = tableView.visibleCells.compactMap { $0 as? TimelineBottomLoaderTableViewCell } - guard let loaderTableViewCell = cells.first else { return } - - if let tabBar = tabBarController?.tabBar, let window = view.window { - let loaderTableViewCellFrameInWindow = tableView.convert(loaderTableViewCell.frame, to: nil) - let windowHeight = window.frame.height - let loaderAppear = (loaderTableViewCellFrameInWindow.origin.y + 0.8 * loaderTableViewCell.frame.height) < (windowHeight - tabBar.frame.height) - if loaderAppear { - viewModel.loadoldestStateMachine.enter(HomeTimelineViewModel.LoadOldestState.Loading.self) - } - } else { - viewModel.loadoldestStateMachine.enter(HomeTimelineViewModel.LoadOldestState.Loading.self) - } + handleScrollViewDidScroll(scrollView) } } +extension HomeTimelineViewController: LoadMoreConfigurableTableViewContainer { + typealias BottomLoaderTableViewCell = TimelineBottomLoaderTableViewCell + typealias LoadingState = HomeTimelineViewModel.LoadOldestState.Loading + var loadMoreConfigurableTableView: UITableView { return tableView } + var loadMoreConfigurableStateMachine: GKStateMachine { return viewModel.loadoldestStateMachine } +} + // MARK: - UITableViewDelegate extension HomeTimelineViewController: UITableViewDelegate {