自定义刷新控件的实现原理

- (void)viewDidLoad {
    [super viewDidLoad];

    UIButton *button  = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0, -30, self.view.bounds.size.width, 30);
    [button setTitle:@"下拉刷新" forState:UIControlStateNormal];
    [self.view addSubview:button];
    button.backgroundColor = [UIColor redColor];
    self.refreshButton = button;
    [self.tableView addSubview:button];

}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

    NSLog(@"%f",scrollView.contentOffset.y);

    if (scrollView.contentInset.top == 30)
        return;

    if (scrollView.contentOffset.y <= -30) {

        [self.refreshButton setTitle:@"松开刷新" forState:UIControlStateNormal];

    }
    else{
        [self.refreshButton setTitle:@"下拉刷新" forState:UIControlStateNormal];
    }
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    if (scrollView.contentOffset.y <= -30) {

        [UIView animateWithDuration:0.5 animations:^{
             [self.refreshButton setTitle:@"正在刷新" forState:UIControlStateNormal];
            scrollView.contentInset = UIEdgeInsetsMake(30, 0, 0, 0);
        }];
    }

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [UIView animateWithDuration:0.5 animations:^{

            scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
        }];

    });

}
时间: 2025-01-09 17:44:47

自定义刷新控件的实现原理的相关文章

自定义组合控件,适配器原理-Day31

自定义组合控件,适配器原理-Day31 mobile2.1 主页定义 手机上锁功能 1.弹出设置密码框. 手机下载进度 自定定义控件 控件的属性其实就是控件类一个属性设置属性调用类的set方法方法, 自定义组合控件的思路 生命一个View对象继承自相对布局,线性布局或者其他的ViewGroup 在View对象重写构造方法,然后初始化布局,通过View.inflate()方法把我们自己定义的布局挂到界面当中. 自定义属性在res/values目录下创建attrs.xml里面定义一些属性, <res

github上开源项目MJRefresh自定义刷新控件

前言:在项目开发过程中经常有需要进行刷新操作,MJ博主开源的MJRefresh为我们节省了大量的时间.只需要几行代码就可给UITableview,UICollectionview,UISCrollview,UIWebview集成上拉或下拉操作.更强大的是自定义功能,无论产品经理要什么上拉下拉动态效果,MJRefresh带你装逼带你酷炫下拉刷新.先来看看自定义下拉的动态效果. 1 利用cocoapods安装MJRefresh,如果不明白cocoapods使用方法,请参照cocopods安装和使用教

自定义刷新控件

1.上拉刷新 定义一些属性: 1.是否正在刷新,2.进度,3.scrollview,4.刷新操作block,5.子控件 @property(nonatomic,strong)UIImageView *cloudImageView2; @property(nonatomic,strong)UIImageView *cloudImageView3; ..... @property(nonatomic,assign)CGFloat progress;//进度 @property(nonatomic,a

Android SwipeRefreshLayout 官方下拉刷新控件介绍—Handler原理—Adapter总结

參考博客:http://blog.csdn.net/lmj623565791/article/details/24521483 自己敲了下代码,这个方式刷新确实给人耳目一新的感觉.资源:含有两个SwipeRefreshLayout实战的Demo,http://download.csdn.net/detail/itjavawfc/8847339 用起来很好用:看看文档几个重要的方法,简单拿来用没有不论什么问题. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZX

继承MJRefresh的自定义刷新控件

#import "SLRefreshHeader.h"@implementation SLRefreshHeader - (instancetype)initWithFrame:(CGRect)frame{    if (self = [super initWithFrame:frame]) {        // 自动切换透明度        self.automaticallyChangeAlpha = YES;        // 隐藏时间        self.lastUpd

自定义下拉刷新控件

一.功能效果 1.在很多app中,在信息展示页面,当我们向下拖拽时,页面会加载最新的数据,并有一个短暂的提示控件出现,有些会有加载进度条,有些会记录加载日期.条目,有些还带有加载动画.其基本实现原理都相仿,本文中将探讨其实现原理,并封装出一个简单的下拉刷新控件 2.自定义刷新工具简单的示例 二.系统提供的下拉刷新工具 1.iOS6.0以后系统提供了自己的下拉刷新的控件:UIRefreshControl .例如,refreshControl,作为UITableViewController中的一个属

自定义下拉刷新控件-CBStoreHouseRefreshControl

本文转载至 http://www.cocoachina.com/ios/20141110/10177.html iOS开发自定义刷新CBStoreHouseRefres 介绍 这是一款在Storehouse启发下创作出来的控件,下拉刷新的时候可以完全定制自己想要的效果.来看效果图: 通过plist文件你可以使用任何想要的形状,下面这张是作者所在公司的logo: 安装 CBStoreHouseRefreshControl依赖于CocoaPods,通过在你的Podfile中添加下面这行命令来安装:

Android PullToRefreshView自定义下拉刷新控件

MyPullToRefreshView继承自LinearLayout,布局为vertical,该容器中包含三个子view,这三个view从上到下依次排列在LinearLayout中. 效果图如下: 下图中蓝色部分是充满屏幕的,HeaderView在ListView的上方,在代码中动态添加进来,使其底部Y轴坐标刚好为0,FooterView在ListView的下方,也在代码中动态添加进来,该View的TopMargin刚好为整个布局的高度. 首先看一下该控件的使用: 1.在xml中配置 <span

Android下拉刷新控件SwipeRefreshLayout源码浅析

SwipeRefreshLayout是Android官方的下拉刷新控件,使用简单,界面美观,不熟悉的朋友可以随便搜索了解一下,这里就不废话了,直接进入正题. 这种下拉刷新控件的原理不难,基本就是监听手指的运动,获取手指的坐标,通过计算判断出是哪种操作,然后就是回调相应的接口了.SwipeRefreshLayout是继承自ViewGroup的,根据Android的事件分发机制,触摸事件应该是先传递到ViewGroup,根据onInterceptTouchEvent的返回值决定是否拦截事件的,那么就