OC/Swift 自定义下拉刷新/上拉加载实现思路

二.系统自带的下拉刷新:{
1. iOS6以后添加,refreshControl = UIRefreshControl()'继承于UIControl';
2. 给下拉刷新添加事件:refreshControl?.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
3. 有默认的宽和高;
4. 添加事件的时候使用UIControlEventValueChanged进行监听
}

三.下拉刷新逻辑:{
1. since_id = homeViewMode.list.first?.statusModel?.id ?? 0;
{
a. 第一次加载的时候,list中为空.则结果为0;
b. 再次加载的时候,list不为空.结果since_id获取到list的第一个数据,此时max_id = 0(菊花没有转动,不会给max_id赋值);
c. 将since_id(有值),max_id(无值)传给loadData()方法,加载新数据;
d. 在下载中:if max_id > 0 {//上拉加载
self.list = self.list + temp
} else {//下拉刷新
self.list = temp + self.list
}
}
}

四.KVO实现{
1. 添加KVO:添加一个键值观察者{
第一个参数: 观察者; 谁是观察者,谁就要实现 一个方法
第二个参数: 观察对象的属性
第三个参数: 新值还是旧值
第四个参数: 默认填 nil
tableView.addObserver(self, forKeyPath: "contentOffset", options: NSKeyValueObservingOptions.New, context: nil)}
2. KVO的第二步,实现 监听方法{
observeValueForKeyPath:是NSObject的方法
参数:{
a. keyPath -- 观察的属性
b. object -- 观察的对象}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>)}}

五.自定义下拉刷新:{
1. 封装下拉刷新的时候,应将KVO封装在刷新view中;
2. 在刷新view中,可通过'willMoveToSuperview'方法获取父视图"newSuperview",子控件将要添加到父类控件上去,会调用这个方法;
3. 为了提高兼容性,我们将"newSuperview"转换成"UIScrollView",这样所有的可滑动类都能使用下拉刷新;
4. 为了方便类调用,将"newSuperview"赋值给一个全局属性;
5. 判断"newSuperview"如果是"UIScrollView",则添加KVO;
6. "scrollView!.dragging":判断scrollView是否是拖拽状态{
a. 不是拖拽状态,且状态是释放就刷新状态进行刷新(也就是松手状态);
b. 是拖拽状态,则根据KVO的改变进行'三种状态'的切换;
}
7. 三种状态:status{
y = scrollView?.contentOffset.y
a. 普通状态: y>-140 文字改成"下拉刷新";
b. 释放的话就刷新:y<-140 文字改成"释放加载";
c. 松手状态: y<-140 文字改成"加载中";
}
8. 为了便于管理,将'文字变化/箭头变化/菊花转动'封装到status的didSet方法中,使用switch-case方法判断;
9. 性能优化:为了防止每次移动的时候都调用status的didSet方法,在判断距离的同时对状态进行判断,只在临界值的时候修改一
例:y < -140 && status == .Pulling!
10.箭头恢复/旋转:
self.arrowImageView.transform = CGAffineTransformIdentity
self.arrowImageView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI))
11. 与父控制器通信:{
a. 闭包/代理/通知;
b. UIControl特有的方法:{
子控制器中添加方法:
sendActionsForControlEvents(UIControlEvents.ValueChanged):向所有的actions发送相关的events
在父控制器中添加监听:
refreshView.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
}
}
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,434评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 很多人不明白为什么不正确的爱等于是一种伤害。在我们父母那年代、祖父母的年代,很多人认为打就是爱。我记得在我很初中的...
    包包_3a0d阅读 321评论 0 2
  • 生活,本来就有很多无奈,要忍受不想忍的人,要承受不愿承受的气,生活多难啊,活着多不容易啊,只愿平平淡淡,就原来那样就好
    高妞妞_e4ed阅读 173评论 0 0
  • 一.产品概述 体验产品:蚂蜂窝自由行 体验版本:7.6.0 体验终端:OPPO r9 操作系统:ColorOS 3...
    咔噜噜阅读 379评论 0 1