iOS 乙個普通的下拉重新整理的控制項要如何寫

2022-03-14 14:22:58 字數 1676 閱讀 9995

現在ios裡有很多成熟的下拉重新整理控制項,比如mjrefresh,svpulltorefresh

我這裡參考了sv的寫法,但是**用的是**,沒有用block,個人感覺用**更簡潔一點

下拉重新整理的基本原理

在scrollview的上面和下面分別新增乙個view,上面的是下拉的時候展示下拉動畫的headerview,下面的是上拉載入更多的時候展示動畫的footerview

這裡的headerview和footerview都是自己新增的,和tableview自己的header,footer不一樣

headerview是新增在scrollview的最上面的,設定frame的時候origin.y是負數

當下拉達到條件就觸發重新整理,同時更改scrollview的contentinsert.top值,以使手指鬆開之後headerview仍然可以露出來

重新整理結束之後,停止headerview上面的動畫,然後把contentinsert的值改回去

footerview是新增在最下方的,frame.origin.y是scrollview的contentsize.height

在上拉到一定程度之後就更改scrollview的contentinsert,使footerview可以露出來,載入結束之後就改回去

如何寫下拉重新整理

寫下拉重新整理一般都是給scrollview寫乙個類別,新增乙個新的方法,來把headerview和footerview新增到scrollview上面

給scrollview宣告乙個headerview型別的屬性(如何給類別新增屬性)

然後給scrollview的contentoffset屬性新增監聽者,這個監聽者就是headerview

這樣,在scrollview滑動的時候,就可以監聽到滑動的情況,並根據資料來決定是否重新整理和時候改變scrollview.contentinsert.y

然後再寫乙個停止重新整理的方法,用來停止重新整理動畫和更改scrollview.contentinsert.top

這樣scrollview的擴充套件就寫完了,然後就要寫自定義的headerview

headerview的動畫是根據需要些的,資料**就是監聽到的contentoffset

在scrollviewdidscroll方法裡來處理監聽到的值

這裡使用了乙個列舉型別來記錄重新整理狀態,從而控制動畫

雖然原理簡單,但是實踐起來遇到了很多困難,有技術上的,也有邏輯上的,心力交瘁,才搞出來乙個小demo 

footerview同理

結語:

寫這個控制項最大的收穫就是加深了對set get方法的理解,對scrollview的理解,對category的理解

但是這裡仍然有乙個bug:

在下拉達到條件,headerview開始動畫,設定contentinsert之後,正在回彈的scrollview會出現抖動,手指滑的越快抖動越厲害,不知道為什麼,現在還沒有解決

下拉重新整理的小控制項

這個空間加在recyclerview外面也行,加在listview也行,列表都可以的,加上他,只支援下拉重新整理,下拉重新整理的時候彈出個重新整理圓圈,在頂部,可控制重新整理圓圈的顏色.控制項 控制項名 android.support.v4.widget.swiperefreshlayout 轉圈顏...

自定義乙個下拉重新整理

mjrefresh的重新整理沒有用,原因有兩點 1.mj的重新整理功能太多了,不需要那麼多功能 2.mj的 多了,會比較大的包。3.有些地方沒有深入看,看不懂的話改bug不容易。於是自己寫了乙個下拉重新整理。最開始的想法是只要下拉就放乙個動畫,下拉完成後就結束,不整那麼複雜的東西。在做的過程中,發現...

乙個普通的週末

每個星期天都是讓人開心的日子,睡到自然醒,穿著拖鞋不緊不慢的溜達去吃個早餐,手上就差個鳥籠了.回來後看 顫慄航班 著實被震撼了一把,記得當年911的時候還覺得有點幸災樂禍,嘿嘿,你美國也有今天。直到今天,通過我那可憐小驢汗流浹背辛苦拉了乙個通宵的盜版拷貝,終於,我在這件事情上昇華了,嘿嘿。我發自內心...