Я провел некоторое время, прочесывая Интернет, но не нашел хорошего решения.По сути, проблема в том, что в моем сообщении коллекции сообщений (например, в виде списка сообщений в любом приложении) я хочу умный и плавный способ перезагрузки сообщений, не мешая пользовательскому интерфейсу представления, и не требуя использования перетаскивания вверх поПосмотреть.Я нашел несколько решений, таких как
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y < 0 {
self.loadMoreMessages()
}
}
Или
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
if scrollView.contentOffset.y < -100 {
self.loadMoreMessages()
}
}
Или
func scrollview(_ scrollView: UIScrollView) {
var visibleRect = CGRect()
visibleRect.origin = self.messagesCollectionView.contentOffset
visibleRect.size = self.messagesCollectionView.bounds.size
let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
guard let indexPath = self.messagesCollectionView.indexPathForItem(at: visiblePoint) else { return }
print(" \(indexPath)")
if indexPath.section == 3 {
self.loadMoreMessages()
}
}
Но все они страдают от запаздывания или плохого пользовательского опыта,Я искал статью об этом, но не могу найти.Обратите внимание, что мои loadMoreMessages:
@objc func loadMoreMessages() {
if channel.synchronizationStatus == .all {
channel.messages?.getBefore(UInt(messages.count), withCount: self.FETCH_COUNT) { (result, items) in
self.messages = self.messages.union(Set(items!))
self.sortMessages()
DispatchQueue.main.async {
self.messagesCollectionView.reloadData()
self.messagesCollectionView.reloadDataAndKeepOffset()
self.refreshControl.endRefreshing()
}
}
}
}
Мысли об этом были бы великими.