テーブルビューがスクロールを終了したかどうかを確認する方法はありますか? table.isDragging
およびtable.isDecelerating
私が見つけることができる唯一の2つの方法です。テーブルビューのスクロールが終了したときに、どのように予測するか、通知を受け取ることができるかわかりません。
TableViewがスクロールしているかどうかをタイマーを使用して毎秒チェックできますか?
次のようにUIScrollViewDelegate
プロトコルメソッドを実装します。
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (!decelerate) {
[self scrollingFinish];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self scrollingFinish];
}
- (void)scrollingFinish {
//enter code here
}
Swiftバージョン
public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if decelerate {
scrollingFinished()
}
}
public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
scrollingFinished()
}
func scrollingFinished() {
print("scrolling finished...")
}
上記のデリゲートメソッドの場合The scroll view sends this message when the user’s finger touches up after dragging content. The decelerating property of UIScrollView controls deceleration.
ビューが減速して停止すると、パラメータdecelerate
はNO
になります。
2つ目はゆっくりとスクロールするために使用され、Appleドキュメントによると、when the scrolling movement comes to a halt
。
以下のコードは、ユーザーのスクロールが停止するたびに更新されます。
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (!decelerate)
{
if (isScrollingStart)
{
isScrollingStart=NO;
[self scrollingStopped];
}
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
if (isScrollingStart)
{
isScrollingStart=NO;
[self scrollingStopped];
}
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
isScrollingStart=YES;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
isScrollingStart=YES;
}
-(void)scrollingStopped
{
NSLog(@"Scrolling stopped");
}
UITableViewはUIScrollViewDelegateに準拠しています。そのプロトコルのドキュメントを参照してください。必要なメソッドがあります。
shanegaoの答え とJovan Stankovicのコメントを使用した後、私はこれをSwift3用に考案しました-
extension NMViewController: UIScrollViewDelegate {
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate {
scrollViewDidEndDecelerating(scrollView)
}
}
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
scrollViewDidEndDecelerating(scrollView)
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
// Your logic to handle after scrolling is done
}
}