博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios 上拉载入下拉刷新Dome
阅读量:4568 次
发布时间:2019-06-08

本文共 10178 字,大约阅读时间需要 33 分钟。

为练手写了一个小的上拉载入很多其它下拉刷新的小的Dome 。

没有太多的技术含量,仅仅是作为新手的启示用。是上一篇下拉载入的扩展。先看一下那个再看这个就easy非常多。

Dome下载:http://download.csdn.net/detail/u010123208/8062715

先来梳理一下:

上拉家在很多其它就是上拉之后在底部现实一个视图,用来提示用户上拉载入很多其它,假设用户上拉就出发事件。进行载入并在试图中给予提示,同一时候后台载入数据,将加入的数据加入数据数组,最后又一次导入列表;

下拉刷新相同的操作,仅仅只是就是将数组清空又一次来导入数据;

首先我们要创建两个view 一个是顶部显示,一个在底部显示 ;

在view中要显示如今文字,一张图片,一个活动指示框(当进行网络请求载入数据的时候显示。其它时候隐藏),假设不太理解下载Dome看一下就知道了。

typedef enum {    InsertStateNomal,    //寻常状态    InsertStateDrapUp,   //上拉状态    InsertStateDrapDown, //下拉状态    InsertStateRun,      //正在载入的状态}InsertState;@interface HeadView : UIView@property (nonatomic,strong) UIImageView *imageView; @property (nonatomic,strong) UILabel *label;@property (nonatomic,assign) InsertState insertState;@property (nonatomic,strong) UIActivityIndicatorView *activity;- (void)setInsertNomal;  - (void)setInsertDrapDown;- (void)setInsertRun;@end@interface FootView : UIView@property (nonatomic,strong) UIImageView *imageView;@property (nonatomic,strong) UILabel *label;@property (nonatomic,assign) InsertState insertState;@property (nonatomic,strong) UIActivityIndicatorView *activity;- (void)setInsertNomal;- (void)setInsertDrapDoUp;- (void)setInsertRun;@end
枚举用来指示视图的当前状态;

事实上两个视图的内容什么的都全然一样;

////  InsertView.m//  RefreshDome////  Created by 小屁孩 on 14-10-16.//  Copyright (c) 2014年 XS. All rights reserved.//#import "InsertView.h"@implementation HeadView@synthesize imageView;@synthesize label;@synthesize insertState;@synthesize activity;- (id)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {                self.backgroundColor = [UIColor orangeColor];        //图片        imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"arrow.png"]];        imageView.frame = CGRectMake(20, frame.size.height-60, 30, 50);        [self addSubview:imageView];                //显示的文字        label = [[UILabel alloc]initWithFrame:CGRectMake(60, frame.size.height-60, 250, 50)];        label.text = @"下拉刷新...";        label.textAlignment = NSTextAlignmentCenter;        [self addSubview:label];                //状态        insertState = InsertStateNomal;                //活动指示器        activity = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];        activity.frame = CGRectMake(20,frame.size.height-60, 30, 50);        [self addSubview:activity];    }    return self;}//初始状态-(void)setInsertNomal{    insertState = InsertStateNomal;    label.text = @"下拉刷新.....";    imageView.layer.transform = CATransform3DMakeRotation(M_PI*2, 0, 0, 1);    [activity stopAnimating];    imageView.hidden =NO;}//下拉状态- (void)setInsertDrapDown{    insertState = InsertStateDrapDown;    [UIView beginAnimations:nil context:nil];    label.text = @"释放后刷新.....";    imageView.layer.transform = CATransform3DMakeRotation(M_PI, 0, 0, 1);    [UIView commitAnimations];    }//刷新状态- (void)setInsertRun{    insertState =InsertStateRun;    label.text = @"正在刷新.....";    imageView.hidden = YES;    [activity startAnimating];}@end@implementation FootView@synthesize imageView;@synthesize label;@synthesize insertState;@synthesize activity;- (id)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {                self.backgroundColor = [UIColor orangeColor];        //图片        imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"arrow.png"]];        imageView.layer.transform = CATransform3DMakeRotation(M_PI , 0, 0, 1);        imageView.frame = CGRectMake(20, 10, 30, 50);        [self addSubview:imageView];                //文字        label = [[UILabel alloc]initWithFrame:CGRectMake(60, 10, 250, 50)];        label.text = @"上拉载入很多其它.....";        label.textAlignment = NSTextAlignmentCenter;        [self addSubview:label];                //状态        insertState = InsertStateNomal;                //活动指示器        activity = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];        activity.frame = CGRectMake(20, 10, 30, 50);        [self addSubview:activity];    }    return self;}//初始状态- (void)setInsertNomal{    insertState = InsertStateNomal;    label.text = @"上拉载入很多其它.....";    imageView.layer.transform = CATransform3DMakeRotation(M_PI , 0, 0, 1);    [activity stopAnimating];    imageView.hidden =NO;}//上拉状态- (void)setInsertDrapDoUp{    insertState = InsertStateDrapUp;    [UIView beginAnimations:nil context:nil];    label.text = @"释放后载入很多其它.....";    imageView.layer.transform = CATransform3DMakeRotation(M_PI * 2, 0, 0, 1);    [UIView commitAnimations];}//载入状态- (void)setInsertRun{    insertState = InsertStateRun;    label.text = @"正在载入.....";    imageView.hidden = YES;    [activity startAnimating];}@end

最后就是列表了;

事实上在这里面须要注意的:

  • 要如何为表格加入视图
  • 加入的底部视图随着内容的增多,是不断变化的(这里我用了KVO来控制,当数组元素变化后处理位置)
  • 当完毕下拉或者上拉的时候。短暂的视图显示怎么来控制
  • 上拉下拉的推断(UIScrollview代理)条件;

#import 
#import "InsertView.h"@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITableView *table;@property (nonatomic,strong) NSMutableArray *tableArray;@end
#import "ViewController.h"@interface ViewController ()@end@implementation ViewController{    HeadView *headView;    FootView *footView;}@synthesize tableArray;@synthesize table;- (void)viewDidLoad{    [super viewDidLoad];    table.frame = CGRectMake(0, 20, 320, [[UIScreen mainScreen]bounds].size.height-20);    table.delegate = self;    table.dataSource = self;    table.tableFooterView = [[UIView alloc]init];        //下拉头部视图    headView = [[HeadView alloc]initWithFrame:CGRectMake(0, -251, DEVICE_FRAME.size.width, 251)];    [table addSubview:headView];        //上拉底部视图    footView = [[FootView alloc]initWithFrame:CGRectMake(0, table.frame.size.height, DEVICE_FRAME.size.width, 251)];    [table addSubview:footView];        //初始化数组    tableArray = [NSMutableArray array];    for (int i = 0; i<15; i++) {        NSURL *url=[NSURL URLWithString:@"http://www.sinaimg.cn/qc/photo_auto/chezhan/2012/50/00/15/80046_950.jpg"];        UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];        [tableArray addObject:image];    }        float hight =tableArray.count * 60 ;    if (tableArray.count * 60  < [[UIScreen mainScreen]bounds].size.height ) {        hight = table.frame.size.height;    }    footView.frame = CGRectMake(0, hight, 320, 251);        [self addObserver:self forKeyPath:@"tableArray" options:NSKeyValueObservingOptionNew context:nil];    }- (void) addtableMutableArray{    for (int i = 0; i<5; i++) {        NSURL *url=[NSURL URLWithString:@"http://www.sinaimg.cn/qc/photo_auto/chezhan/2012/50/00/15/80046_950.jpg"];        UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];        [self.tableArray addObject:image];    }    self.tableArray = tableArray;    [footView setInsertNomal];    [self performSelectorOnMainThread:@selector(endThread) withObject:nil waitUntilDone:NO];}- (void)endThread{        [UIView beginAnimations:nil context:nil];    table.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);    [UIView commitAnimations];    [table reloadData];    NSLog(@"%d",tableArray.count);}- (void) refesh{    NSMutableArray *array = [NSMutableArray array];    for (int i = 0; i<15; i++) {        NSURL *url=[NSURL URLWithString:@"http://wenwen.sogou.com/p/20110923/20110923201826-1347223277.jpg"];        UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];        [array addObject:image];    }    self.tableArray = array;    [headView setInsertNomal];    [self performSelectorOnMainThread:@selector(endThread) withObject:nil waitUntilDone:NO];}#pragma mark KVO-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    NSMutableArray *array = [change objectForKey:@"new"];    float hight =array.count * 60;    if (array.count * 60  < [[UIScreen mainScreen]bounds].size.height ) {        hight = [[UIScreen mainScreen]bounds].size.height;    }    footView.frame = CGRectMake(0, hight, 320, 251);    }#pragma mark tabledelegate- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return  tableArray.count;}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    return 60;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    static NSString *identityCell = @"Cell";    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identityCell];    if (cell == nil) {        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identityCell];    }    cell.imageView.image = [tableArray objectAtIndex:indexPath.row];    cell.textLabel.text = @"NibBi";    return cell;}#pragma mark - scrolldelegae- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{    if (headView.insertState == InsertStateDrapDown) {        [UIView beginAnimations:nil context:nil];        table.contentInset = UIEdgeInsetsMake(70, 0, 0, 0);        [headView setInsertRun];        [UIView commitAnimations];        [self performSelectorInBackground:@selector(refesh) withObject:nil];    }    if (footView.insertState == InsertStateDrapUp) {        [UIView beginAnimations:nil context:nil];        table.contentInset = UIEdgeInsetsMake(0, 0, 70, 0);        [footView setInsertRun];        [UIView commitAnimations];        [self performSelectorInBackground:@selector(addtableMutableArray) withObject:nil];    }}-(void)scrollViewDidScroll:(UIScrollView *)scrollView{  // NSLog(@"%f",scrollView.contentOffset.y);    //上拉载入很多其它转换    if (scrollView.contentOffset.y > scrollView.contentSize.height - scrollView.frame.size.height + 60 && footView.insertState == InsertStateNomal) {        [UIView beginAnimations:nil context:nil];        [footView setInsertDrapDoUp];        [UIView commitAnimations];            }    //下拉刷新转换    if (scrollView.contentOffset.y < -60 && headView.insertState == InsertStateNomal)    {        [UIView beginAnimations:nil context:nil];        [headView setInsertDrapDown];        [UIView commitAnimations];    }}@end

转载于:https://www.cnblogs.com/mfrbuaa/p/5099195.html

你可能感兴趣的文章
Eclipse开发环境的配置
查看>>
Java集合框架的学习
查看>>
elasticsearch结构化查询过滤语句-----4
查看>>
P4783 【模板】矩阵求逆
查看>>
Bootstrap 警告框(Alert)插件
查看>>
centos7 离线源码安装 postgresql-9.6.6
查看>>
Java深入学习之 IO
查看>>
浅谈软件测试
查看>>
C# winform端 通过HttpWebRequest进行post和get请求,数据格式为json,后台java端接收,其中有关传输特殊字符(\t,\r,',\n,n)等处理...
查看>>
4069: [Apio2015]巴厘岛的雕塑
查看>>
yii2常用路径获取
查看>>
18 | 眼前一亮:带你玩转GUI自动化的测试报告
查看>>
Gitlab修改默认端口
查看>>
功能规格说明书
查看>>
JavaScipt30(第七个案例)(主要知识点:数组some,every,findIndex方法)
查看>>
Android 采用HttpClient提交数据到服务器
查看>>
EL表达式概述
查看>>
word中批量修改图片大小
查看>>
第四次scrum冲刺
查看>>
Ext4 中 日期和时间的控件
查看>>