IOS UIWebView 下拉刷新功能的簡單實現


1.運行效果圖

 

2.swift 代碼的實現 

import UIKit

class RefreshWebViewController: UIViewController,UIScrollViewDelegate,UIWebViewDelegate{

 

 

    @IBOutlet weak var webView: UIWebView!

    //刷新控件view

     private var header:UIView!

  //下拉到50時松開刷新

    private let pullHeight:CGFloat=50

//刷新提示文字

    private var headerText:UILabel!

 //刷新指示器(旋轉小圓圈)

    private var activityView:UIActivityIndicatorView!

//標記刷新狀態

    private var isRefreshing=false

 

    override func viewDidLoad() {

        super.viewDidLoad()

        

        self.webView.scrollView.delegate=self

        self.webView.delegate=self

        self.automaticallyAdjustsScrollViewInsets=false

          initHeaderView()

        loading()

        

    }

  

    //定義下拉刷新控件

  private func initHeaderView( )  {

        

        self.header=UIView(frame: CGRectMake(0,0, self.view.frame.width,200))

        self.header.backgroundColor=UIColor.darkGrayColor()

        self.headerText=UILabel(frame: CGRectMake((self.view.frame.width-120)/2,10,150,30))

        self.headerText.text="下拉刷新"

        self.headerText.textAlignment=NSTextAlignment.Center

        self.headerText.textColor=UIColor.whiteColor()

        self.header.addSubview(headerText)

        self.activityView=UIActivityIndicatorView(frame: CGRectMake( self.headerText.frame.origin.x-5,15,20,20))

    

       self.header.addSubview(activityView)

        self.webView.insertSubview(header, atIndex: 0)

        

        

    }

 

    //加載網頁

    func loading( ) {

     

        self.webView.loadRequest(NSURLRequest(URL: NSURL(string:"http://www.hao123.com")!))

    }

    

    //scroll滾動時調用

    func scrollViewDidScroll(scrollView: UIScrollView) {

       

        if isRefreshing{

        

            return

        }

        //當下拉到pullHeight高度時松開即可刷新

        if scrollView.contentOffset.y <= -pullHeight{

         

        self.headerText.text="松開立即刷新"

        }else{

        

          self.headerText.text="下拉刷新"

        }

    }

 

//    scrollview停止滾動時調用

    func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {

      

        if isRefreshing{

        

            return

        }

        

        if scrollView.contentOffset.y <= -pullHeight{

       

            refreshing()

            

        }

    }

    

    //開始刷新

    func refreshing( )   {

        isRefreshing=true

        self.headerText.text="正在刷新..."

        self.activityView.startAnimating()

        UIView.animateWithDuration(0.5, delay: 0,   options: .CurveEaseOut, animations: {

           // 設置刷新控件停留

            var offY = self.webView.scrollView.contentInset            

            offY.top += self.pullHeight

            self.webView.scrollView.contentInset=offY

            

            }, completion:{(_)->Void in

                

                

        })

        

        self.loading()

    }

    

    //刷新結束

    func refreshEnd() {

        

         self.headerText.text="刷新成功"

         self.activityView.stopAnimating()

        UIView.animateWithDuration(1, delay: 0,   options: .CurveEaseOut, animations: {

            

             //恢復刷新控件到原始位置

            var offY = self.webView.scrollView.contentInset

            offY.top -= self.pullHeight

            self.webView.scrollView.contentInset=offY

            

            }, completion:{(_)->Void in

                

                self.isRefreshing=false

                self.headerText.text="下拉刷新"

                

        })

 

    }

    

    

    //網頁加載完成

    func webViewDidFinishLoad(webView: UIWebView) {

       

        if isRefreshing{

        

          refreshEnd()

        }

      

    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM