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()

}

}

}

IOS UIWebView 下拉刷新功能的简单实现的更多相关文章

  1. 原生js实现简单的下拉刷新功能

    前言: 我们在浏览移动端web页面的时候,经常会用到下拉刷新. 现在我们用原生的js实现这个非常简单的下拉刷新功能. (温馨提示:本文比较基础,功能也很简单.写的不好的地方,希望大神提点一二.) 一. ...

  2. Xamarin. Android实现下拉刷新功能

    PS:发现文章被其他网站或者博客抓取后发表为原创了,给图片加了个水印 下拉刷新功能在安卓和iOS中非常常见,一般实现这样的功能都是直接使用第三方的库,网上能找到很多这样的开源库.然而在Xamarin. ...

  3. Android 高仿微信(QQ)滑动弹出编辑、删除菜单效果,增加下拉刷新功能

    不可否认,微信.QQ列表的滑动删除.编辑功能着实很经典(从IOS那边模仿过来的),然.Android这边,对列表的操作,其实大多还停留上下文菜单来实现. Android如何实现list item的滑动 ...

  4. IOS 开发下拉刷新和上拉加载更多

    IOS 开发下拉刷新和上拉加载更多 简介 1.常用的下拉刷新的实现方式 (1)UIRefreshControl (2)EGOTTableViewrefresh (3)AH3DPullRefresh ( ...

  5. [转]Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能

    版权声明:本文出自郭霖的博客,转载必须注明出处. 转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9255575 最近项目中需要用到L ...

  6. Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能 (转)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9255575 最 近项目中需要用到ListView下拉刷新的功能,一开始想图省事,在 ...

  7. android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)

    Android实现上拉加载更多功能以及下拉刷新功能, 采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库. 目前他支持的控件有:ListView, ExpandableL ...

  8. 利用Swiperefreshlayout实现下拉刷新功能的技术探讨

    在常见的APP中通常有着下拉页面从而达到刷新页面的功能,这种看似简单的功能有着花样繁多的实现方式.而利用Swiperefreshlayout实现下拉刷新功能则是其中比较简明扼要的一种. 一般来说,在竖 ...

  9. Android StaggeredGrid 加下拉刷新功能 PullToRefresh

    https://github.com/etsy/AndroidStaggeredGrid  用的github上面提供瀑布流,继承于abslistview,回收机制不错,并且提供了OnScrollLis ...

随机推荐

  1. py

    import httplib,urllib import re import random def Login(userid,password): params=urllib.urlencode({' ...

  2. python address already in use

    1)找到使用端口的进程pid netstat -lp 2)kill掉pid kill -9 1234

  3. sh 测试网段在线主机

    yum install nmap nmap -sP  192.168.21.1/24 查看网段在线主机 grep -vwf file1 file2 文件内容比较 #!/bin/bash # day=` ...

  4. 利用html5、websocket和opencv实现人脸检测 (二)

    前一篇的代码在执行时,java.exe占用内存会快速上涨: 在4G内存电脑上,单个连接,会持续上涨到2G多,然后减到1G多,如此循环. 经过一些删减定位,可以确定问题由public byte[] pr ...

  5. 第6章 Spring的事物处理

    一.简述事物处理 1.事物处理的基本概念 1)提交:所有操作步骤都被完整执行后,称该事物被提交 2)回滚:某步操作执行失败,所有操作都没被提交,则事物必须被回滚 2.事物处理的特性(ACID) 1)原 ...

  6. oracle sql 执行计划分析

    转自http://itindex.net/detail/45962-oracle-sql-%E8%AE%A1%E5%88%92 一.首先创建表 SQL> show user USER is &q ...

  7. Hadoop单机模式安装-(3)安装和配置Hadoop

    网络上关于如何单机模式安装Hadoop的文章很多,按照其步骤走下来多数都失败,按照其操作弯路走过了不少但终究还是把问题都解决了,所以顺便自己详细记录下完整的安装过程. 此篇主要介绍在Ubuntu安装完 ...

  8. 基于ZooKeeper的分布式锁和队列

    在分布式系统中,往往需要一些分布式同步原语来做一些协同工作,上一篇文章介绍了Zookeeper的基本原理,本文介绍下基于Zookeeper的Lock和Queue的实现,主要代码都来自Zookeeper ...

  9. Android-Spinner [使用C# And Java实现]

    效果如下: C#实现代码 using Android.App; using Android.OS; using Android.Widget; namespace SpinnerDemo { [Act ...

  10. 相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)

    相机标定 一.相机标定的目的 确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数. 二.通用摄像机模型 世界坐标系.摄像机坐标 ...