Swift3.0 自定義刷新控件(1)

正逢國慶假期,抽時間學習Swift3.0,效果圖如下:

testShow.gif

Xcode8.0刷新控件貌似是有問題的,調用beginRefresh 空白一片什么否不顯示,所以自定義了個新控件,同時也解決了拖拽不放手,下拉到一定程度會自動刷新的問題。
func loadData() { refreshControl.beginRefreshing() print("開始刷新v"); DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) { print("結束刷新v") self.refreshControl.endRefreshing() } }

控件是繼承UIControl的,適用于tableView和collectionView,其核心是通過KVO監聽父視圖的 contentOffset屬性,實現不同的刷新狀態。核心方法有:
open func willMove(toSuperview newSuperview: UIView?)
willMove 方法在父視圖addSubView的時候會調用,當添加到父視圖的時候 newSuperview 是父視圖當父視圖移除的時候,此方法也會被調用,newSuperview是nil,通過此方法可以拿到父視圖的tableview并監聽contentOffset屬性scrollView?.addObserver(self, forKeyPath: "contentOffset", options: [], context: nil),所有的KVO監聽都會調用
func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)
觀察者模式 在不需要的時候都需要釋放,通知如果不釋放,什么也不會發什么,但是會造成內存泄漏,會有多此注冊的可能,KVO如果不釋放就會崩潰func removeFromSuperview() 通過此方法移除監聽,在監聽方法中我們主要通過tableView的偏移值對刷新的狀態進行判斷,并通過改變contentInset屬性值來讓刷新視圖停留在正在刷新的視圖上。

在寫代碼的時候發現幾個小問題:
1.因為涉及布局問題,第一想到的就是SnapKit,并在github上看了一下是支持Swift3.0 的果斷Pod下來,是指定了版本的

屏幕快照 2016-10-05 上午4.53.02.png

Pod文件也是按照官方寫的


屏幕快照 2016-10-05 上午4.53.34.png

但是一Pod下來 打開,就讓我轉換swift版本,好奇怪,無論我轉不轉都是幾百個報錯????,搞不清楚狀況。。。(高能的大神指點迷津吧)
于是不得不用LayoutConstraint了。

2.在讓箭頭做旋轉動畫的時候,發現 transform默認是順時針旋轉的,要想實現原路旋轉回來,需要調整一個非常小的值(好投機啊)

3.第三個問題很無厘頭,搞不明白,在KVO監聽tableview發生的位移大于設定的值時候,調用beginRefresh的方法,改變tableview的contentInset.top 的值,并修改刷新狀態的枚舉值,在KVO的方法判斷狀態就不會再調用beginRefresh的方法了,可實際上一直在修改tableview的contentInset.top,就是不走` refrershView.refreshStatus = .WillRefresh'這句,最后沒辦法,把這就話放在contentInset.top 才得以解決問題。

bug.gif

有興趣 大家可以去看下,是什么問題
Demo地址:https://github.com/iosyaowei/refreshDemo

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 廢話不多說,直接上干貨 ---------------------------------------------...
    小小趙紙農閱讀 3,420評論 0 15
  • 1.1 談一談GCD和NSOperation的區別? 首先二者都是多線程相關的概念,當然在使用中也是根據不同情境進...
    John_LS閱讀 1,331評論 0 12
  • 我在馬路邊撿到一分錢,把它交給警察叔叔手里一邊,叔叔拿著錢,對我滿頭點,我告訴警察叔叔,叔叔再見。
    gibsonxiong閱讀 349評論 2 0
  • 最近在看杭州的樓盤,有些感觸。 自己是一直不想用父母的積蓄作為杭州買房的首付的,我的觀點里,我覺著他們應該拿這些錢...
    kitop_free閱讀 235評論 0 0
  • 其實嬉笑怒罵插科打諢間,你悄悄掩藏著內里的真誠和正直以及向上,但你卻從不曾矯情和回避股子里的執著和堅韌。其實你一直...
    飛流三千閱讀 154評論 0 1