iOS 下拉刷新和上拉加载更多效果原理

iOS 下拉刷新和上拉加载更多效果原理,第1张

下拉刷新和上拉加载更多功能是一个应用非常广泛的一个效果,而网上也提供了实现这种效果的第三方库,比如MJRefresh,用起来非常方便。那么,我们有没有想过下拉刷新和上拉加载更多的原理是什么,我们自己如何封装一个这种上下拉刷新的效果出来!

下拉刷新实际上是监测UIScrollView的contentOffset的y值,当他往下拉动时,UIScrollView的contentOffset是一直减小的,然后把通过动画把它的contentInset值控制成一个定值,然后通过设置延时来把UIScrollView的contentInset的值恢复原点。

上拉加载其实原理和下拉刷新基本是一样的,只不过判断的contentOffset的值不同,如果scrollView.bounds.size.height +  scrollView.contentOffset.y >scrollView.contentSize.height,说明你执行了上拉 *** 作,然后实现起来基本就和下拉刷新是一样的。

上图所示,给tableView增加一个顶部的子视图和一个底部的子视图,只是初始的时候这些视图在手机屏幕的外面,我们看不到而已。

1、首先,我们在控制器中添加一个tableView,并在tableView的顶部和底部各添加一个子视图,作为下拉刷新view和上拉加载更多view,如上图所示。

添加tableView和子视图的步骤大家应该很熟悉,所以,略!

2、设置scrollView的代理。实现- (void)scrollViewWillBeginDecelerating:(UIScrollView*)scrollView方法。

- (void)scrollViewWillBeginDecelerating:(UIScrollView*)scrollView方法,在用户停止拖动,手指将要离开屏幕的时候调用。在该方法中判断scrollVoew的contentOffset.y值的大小,来确定用户拖动的幅度大小。

3、正在下拉刷新或者加载更多的时候,通过改变tableView的contentInset来改变内边距。(自动开始下拉刷新或自动上拉刷新,也可以调用下面这两个方法)

4、结束下拉刷新或上拉加载更多

5、效果图如下:

首先说一下:UIActivityIndicator作为刷新控件

主要实现方法如下:

下拉刷新01-默认

下拉刷新02-动画图片

下拉刷新03-隐藏时间

下拉刷新04-隐藏状态和时间

下拉刷新05-自定义文字

下拉刷新06-自定义刷新控件

上拉刷新01-默认

上拉刷新02-动画图片

上拉刷新03-隐藏刷新状态的文字

上拉刷新04-全部加载完毕

上拉刷新05-自定义文字

上拉刷新06-加载后隐藏

上拉刷新07-自动回d的上拉01

上拉刷新08-自动回d的上拉02

上拉刷新09-自定义刷新控件(自动刷新)

上拉刷新10-自定义刷新控件(自动回d)

刚刚下午那会 弄了个 解析 xml demo的小例子,本想着json也挺复杂 弄还是 不弄,但是简单的看了下 发现挺简单

考虑了很久,还是写上来吧,毕竟json用得太多了,而且算是自己的积累吧,毕竟刚开始学习IOS开发方面的知识,就当是巩固了撒!

还是 先看个效果图吧,如下!

接下来 看下工程目录吧,其实并没有必要,直接建立一个工程就行 ,算了,还是贴上来吧,如下:

工程目录中有个 Notes.json 文件,该文件就是 要解析的json数据了 ,也截下图吧,如下:

Ok ,以上准备完毕,就开始编码了,在此之前故事版的内容 就和我上篇博客文章 IOS 解析xml 故事版 是一样配置的,这里就不在啰嗦了 ,首先看下 chonViewController.h文件,代码如下:

//

// chonViewController.h

// TestJson

//

// Created by choni on 14-5-16.

// Copyright (c) 2014年 choni. All rights reserved.

//

#import <UIKit/UIKit.h>

@interface chonViewController : UITableViewController

//保存数据列表

@property(nonatomic,strong) NSMutableArray * listData

@end

与之对应的 chonViewController.m文件 代码如下:

[objc] view plaincopy在CODE上查看代码片派生到我的代码片

//

// chonViewController.m

// TestJson

//

// Created by choni on 14-5-16.

// Copyright (c) 2014年 choni. All rights reserved.

//

#import "chonViewController.h"

@interface chonViewController ()

@end

@implementation chonViewController

- (void)viewDidLoad

{

[super viewDidLoad]

NSString * path = [[NSBundle mainBundle]pathForResource:@"Notes" ofType:@"json" ]

NSData * jsonData = [[NSData alloc] initWithContentsOfFile:path]

NSError * error

id jsonObj = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]

if (!jsonObj || error) {

NSLog(@"JSON解析失败")

}

self.listData = [jsonObj objectForKey:@"Record"]

}

#pragma mark - tableView

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{

return 1

}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

return self.listData.count

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]

NSMutableDictionary * dict = self.listData[indexPath.row]

cell.textLabel.text = [dict objectForKey:@"Content"]

cell.detailTextLabel.text = [dict objectForKey:@"CDate"]

return cell

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning]

}

@end

Ok , 现在就可以编译运行的程序了 ,但是有个主意的地方 :

1.因为使用 NSJSONSerialization 实现json解码,要确定你得项目使用IOS 5 SDK 才可以

2. 其他的就没有什么了,介绍下NSJSONSerialization的类方法吧

1)NSJSONReadingMutableContaines ,指定解析返回的是可变的数组或字典 ,这个方法还是比较使用的,因为如果json数据需要改,不用管撒

2)NSJSONReadingMutableLeaves ,指定叶节点是可变的字符串

3) NSJSONReadingAllowFragments , 指定顶级节点可以部署数组或字典


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9411864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存