1. 程式人生 > >如何檢測ScrollView和TableView是處在開始拖動,上移,下移,減速或者停止等狀態

如何檢測ScrollView和TableView是處在開始拖動,上移,下移,減速或者停止等狀態

這裡主要是展現ScrollView的一些代理方法,因為TableView是繼承自ScrollView,所以ScrollView的代理方法對於TableView也同樣適用;

主要作用是,例如我們在檢視上有一些控制元件,需要根據TableView或者ScrollView的狀態來選擇隱藏或者出現

1.

//scrollView滾動時,就呼叫該方法。任何offset值改變都呼叫該方法。即滾動過程中,呼叫多次 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    NSLog(@"scrollViewDidScroll");
    CGPoint point=scrollView.contentOffset;
    NSLog(@"%f,%f",point.x,point.y);
    // 從中可以讀取contentOffset屬性以確定其滾動到的位置。
    // 注意:當ContentSize屬性小於Frame時,將不會出發滾動
}
2.
// 當開始滾動檢視時,執行該方法。一次有效滑動(開始滑動,滑動一小段距離,只要手指不鬆開,只算一次滑動,只執行一次)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    NSLog(@"scrollViewWillBeginDragging");
}
3.
// 滑動scrollView,並且手指將要離開時執行。一次有效滑動,只執行一次。
// 當pagingEnabled屬性為YES時,不呼叫該方法
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
    NSLog(@"scrollViewWillEndDragging");
}
4.
// 滑動檢視,當手指離開螢幕那一霎那,呼叫該方法。一次有效滑動,只執行一次。
// decelerate,指當我們手指離開那一瞬後,檢視是否還將繼續向前滾動一段距離,經過測試,decelerate=YES
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    NSLog(@"scrollViewDidEndDragging");
    if (decelerate) {
        NSLog(@"decelerate");
    }else{
         NSLog(@"no decelerate");

    }
    CGPoint point=scrollView.contentOffset;
    NSLog(@"%f,%f",point.x,point.y);
}

5.

// 滑動減速時呼叫該方法。
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
    NSLog(@"scrollViewWillBeginDecelerating");
    // 該方法在scrollViewDidEndDragging方法之後。
}
6.
// 滾動檢視減速完成,滾動停止時,呼叫該方法。一次有效滑動,只執行一次。
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    NSLog(@"scrollViewDidEndDecelerating");
    [_scrollView setContentOffset:CGPointMake(0, 500) animated:YES];
}
7.
// 當滾動檢視動畫完成後,呼叫該方法,如果沒有動畫,那麼該方法將不被呼叫
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
    NSLog(@"scrollViewDidEndScrollingAnimation");
    //有效的動畫方法為:
    //- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated 方法
    //- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated 方法
}
8.
// 返回將要縮放的UIView物件。要執行多次
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    NSLog(@"viewForZoomingInScrollView");
    return  self.imgView;
}
9.
//當將要開始縮放時,執行該方法。一次有效縮放,就只執行一次。
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{
    NSLog(@"scrollViewWillBeginZooming");
}
10.
//當縮放結束後,並且縮放大小回到minimumZoomScale與maximumZoomScale之間後(我們也許會超出縮放範圍),呼叫該方法。
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale{
    NSLog(@"scrollViewDidEndZooming");
}
11.
// 指示當用戶點選狀態列後,滾動檢視是否能夠滾動到頂部。需要設定滾動檢視的屬性:self.scrollView.scrollsToTop=YES或者self.tableView.scrollsToTop=YES;
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView{
    return YES;
}
12.
// 當滾動檢視滾動到最頂端後,執行該方法
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{
    NSLog(@"scrollViewDidScrollToTop");
}

綜上所述,實現一個簡單的判斷控制元件是在向上還是向下滑動的檢測實現方式
int lastPosition;//記錄上一次位置  
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{  
    int currentPostion = scrollView.contentOffset.y;  
    if (currentPostion - lastPosition > 25) {  
        lastPosition = currentPostion;  
        NSLog(@"ScrollUp now");  
    }  
    else if (lastPosition - currentPostion > 25)  
    {  
        lastPosition = currentPostion;  
        NSLog(@"ScrollDown now");  
    }  
}


相關推薦

如何檢測ScrollViewTableView是處在開始上移下移減速或者停止狀態

這裡主要是展現ScrollView的一些代理方法,因為TableView是繼承自ScrollView,所以ScrollView的代理方法對於TableView也同樣適用;主要作用是,例如我們在檢視上有一些控制元件,需要根據TableView或者ScrollView的狀態來選擇

*C#(WPF)--矩陣矩陣動畫(展開不足動畫效果)

stop 項目 鼠標 ani sys unlock 控件移動 top art 最近在研發新的項目,遇到了一個桌面模式下的難點--展開動畫。之前動畫這方面沒做過,也許很多人開始做的時候也會遇到相關問題,因此我把幾個重點及實際效果圖總結展示出來: 我的開發環境是在

讓一個div讓一個panel加拉大拉小

let sha cli class 事件綁定 borde 設置 scrip script 一、讓一個div拖動 <!doctype html> <html xmlns="http://www.w3.org/1999/xhtml"> <head

Qt tableview表頭無法的問題

設定拖動 ui->tableView_zhang_dan->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); 設定好之後但是發現還是無法拖動. 最終發現是我程式設定了一個游標setOv

QML中FRAMELESS transparent 窗體的實現

之前的blog中寫到如何設定窗體無邊框以及設定背景透明,參考 因為,窗體設定成無邊框之後,窗體的拖動就要靠自己寫的程式來完成了! 本文參考Resize Qml window這篇文章,結合自己的需求解決了拖動窗體的需要!  首先,介紹上面這個參考文章裡的解決方法: 核心思想是

scrollview tableview偏移64位畫素的處理方法

方法1: 在所有的 viewController 裡都加上 這樣所有裝置下都是固定 64的位置開始。- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loa

圖片到 Python 指令碼自動生成 Markdown 格式連結

由於用 Markdown 寫作時,插入圖片十分繁瑣,於是誕生了本指令碼。 效果預覽 準備工作 Python 2.7 騰訊雲 cos SDK Tinify pip install qcloud_cos_v4 tinify 使用騰訊

Android Launcher3 禁止使用者圖示建立資料夾控制圖示到另一個圖示時的動畫效果

禁止使用者拖拽應用圖示建立資料夾,需要在Workspace中的onDrop()方法的createUserFolderIfNecessary方法註釋掉。這樣就不再建立資料夾。 // If the

Android控制元件的實現自定義可的LinearLayout

工作內容; 1.拖動控制元件 2.自定義可拖動的LinearLayout 學習分享: 一、拖動控制元件的實現步驟: 【前提:控制元件在RelativeLayout中,或者在GridLayout中】 1.按下圖搞懂幾個座標 檢視寬度 view.getWidth(); 檢視高

淺談android中的ListView之解決ScrollViewListView巢狀衝突(實際上一切都是浮雲閒的蛋疼)(一)

     相信大家都已經可以熟練使用ListView和GridView,大神們估計都在使用RecyclerView了。如果還在使用ListView,你肯定有這樣的一個深刻的感受,那就是在做一個APP的時候使用ListView和GridView很頻繁,並且經常會遇到一個頁面中

OC CollectionViewTableView自身高度的隱式遞迴計算改變父試圖佈局

CollectionView和TableView自身高度的隱式遞迴計算 1、前沿:我們一般會碰到這樣的需求,一個tableview或者一個colletionview放在一個scrollview上邊,而tableview和collectionview的cell是不可控的,更具請求內容變化而變化。如圖:(標籤的

仿淘寶的商品詳情ViewPagerScrollView WebView的滑動衝突

仿淘寶的商品詳情拖動遇到的問題。 使用結構就是DirectionalViewPager 嵌套了(1)ScrollView (2)WebView 情況: 豎直方向的ViewPager DirectionalViewPager 嵌套了(1)ScrollView (2)WebView 出現滑動衝突

RecyclerView借助ItemTouchHelper實現滑動刪除功能

enable all istview aslist mar -- main erl pub RecyclerView是官方推薦代替ListView的空間,怎樣實現RecyclerView列表元素的拖動呢? 官方提供了ItemTouchHelper類使用過程例如以下

Android 仿 窗簾效果 登錄界面效果 (Scroller類的應用) 附 2個DEMO及源代碼

@override 宋體 off down != 過程 事件 學習 border 在android學習中,動作交互是軟件中重要的一部分。當中的Scroller就是提供了拖動效果的類,在網上。比方說一些Launcher實現滑屏都能夠通過這個類去實現。以下要說的

百度地圖手機端單觸點單擊長按事件解決部分手機(小米手機)地圖單擊事件失效多觸點、依然觸發長按的bug

|| ble apply timeout console dto eat 問題 int /** * Author 嶽曉 * * 對百度地圖的事件擴展,目前擴展了fastclick和longclick, * 解決某些設備click不執行的問題

Delphi DBGrid記錄全選反選處理

aso -- control 全選和反選 end ram list not set DBGrid1.DragMode := dmManual;//留意這個設置不要變 procedure ApplicationEvents1Message(var Msg: tagMS

Qt 無標題無邊框程序的改變大小

又一 through poi rip 有時 target ram internal 以及 最近做項目遇到的問題,總結下。 有時候我們覺得系統的標題欄和按鈕太醜太呆板,想做自己的標題欄以及最大化、最小化、關閉,菜單按鈕,我們就需要 [cpp] view p

C# 各種控件實現可調整大小

osi 鼠標拖動 clas 鼠標 pan lin tool 右下角 enum http://www.360doc.com/content/18/0516/12/55659281_754382494.shtml using System; using System.Colle

Flutter中的點選、其它手勢

在Android中,您可以通過呼叫方法setOnClickListener將OnClick繫結到按鈕等view上. 在Flutter中,新增觸控監聽器有兩種方法: 如果Widget支援事件監聽,則可以將一個函式傳遞給它並進行處理。例如,RaisedButton有一個onPre

實現評論頁面的五星評價圖片選擇(可

先上圖: https://github.com/simonFong/CommentDemo 想用的直接到github下載就可以了,星星控制元件和新增圖片的控制元件在imageadd的lib裡 使用方法: 1.下載lib,匯入自己的工程 2.星星控制元件 直接在自己的佈局檔案裡新增