zoukankan      html  css  js  c++  java
  • ios-上拉电阻负载许多其他接口

    想尝试拉加载意识到有多少开始了他的研究之旅,我看了两天做出最终的界面。

    之所以这么慢是由于,我不知道要将上拉出现的view放在哪。就能在scrollView拉究竟部的时候被拉出来。还有就是怎么拉出来之后停在这里。网上下载样例之后研究了两天:



    先说一下,在以下处理图片中橘色view的位置的时候用了kvo进行了监听。


    先一个枚举 来指示眼下刷新view是在哪个状态:

    typedef enum {
        RefreshStateLoading = 1,//刷新状态为正在载入
        RefreshStateRelease,    //下拉完毕释放之前
        RefreshStateNomal,      //原始状态
    }RefreshState;


    以下一个类view来描写叙述刷新view


    @interface FootView : UIView
    
    @property (nonatomic,strong) UIActivityIndicatorView *activity;//活动指示条
    @property (nonatomic,strong) UIImageView *imageView;            //箭头图片
    @property (nonatomic,strong) UILabel *infolabel;                //文字指示
    @property (nonatomic,assign) RefreshState refreshState;         //刷新的状态
    
    - (void)refreshStateLoading;
    - (void)refreshStateNomal;
    - (void)refreshStateRelsease;
    
    @end

    #import "FootView.h"
    
    @implementation FootView
    
    @synthesize activity;
    @synthesize imageView;
    @synthesize infolabel;
    @synthesize refreshState;
    
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            self.backgroundColor = [UIColor orangeColor];
            
            //活动指示器初始化
            activity = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
            activity.frame = CGRectMake(10, 0, 50, 70);
            [self addSubview:activity];
            
            //箭头图片初始化
            imageView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 30, 50)];
            imageView.image = [UIImage imageNamed:@"blackArrow.png"];
            [self addSubview:imageView];
            
            //信息label初始化
            infolabel = [[UILabel alloc]initWithFrame:CGRectMake(100,0 ,100, 70)];
            infolabel.text = @"下拉刷新...";
            infolabel.font = [UIFont fontWithName:@"Helvetica" size:20];
            infolabel.textAlignment = NSTextAlignmentCenter;
            infolabel.textColor = [UIColor blackColor];
            [self addSubview:infolabel];
            
            //设置初始状态
            self.refreshState = RefreshStateNomal;
        }
        return self;
    }
    
    //初始状态
    - (void)refreshStateNomal
    {
        self.refreshState = RefreshStateNomal;
        [self.activity stopAnimating];
        self.infolabel.text = @"下拉载入很多其它...";
        self.imageView.layer.transform = CATransform3DMakeRotation(M_PI * 2, 0, 0, 1);
        self.imageView.hidden = NO;
    }
    
    //正在请求数据时
    - (void)refreshStateLoading
    {
        self.refreshState = RefreshStateLoading;
        self.imageView.hidden = YES;
        [UIView beginAnimations:nil context:nil];
        self.infolabel.text = @"正在载入...";
        [self.activity startAnimating];
        [UIView commitAnimations];
    }
    
    //下拉完毕后
    - (void)refreshStateRelsease
    {
        self.refreshState = RefreshStateRelease;
        [UIView beginAnimations:nil context:nil];
        self.infolabel.text = @"释放后载入...";
        self.imageView.layer.transform = CATransform3DMakeRotation(M_PI, 0, 0, 1);
        [UIView commitAnimations];
        
    }
    
    
    
    @end

    以下来写table

    #import <UIKit/UIKit.h>
    
    @interface MyTableVC : UITableViewController<UIScrollViewDelegate>
    
    @property (nonatomic,strong) NSMutableArray *dataArray;//数据
    
    
    @end

    #import "MyTableVC.h"
    #import "FootView.h"
    
    #define TABLE_CELL_HIGHT 50.0
    
    @interface MyTableVC ()
    
    @end
    
    @implementation MyTableVC
    {
        FootView *footView;
    }
    
    @synthesize dataArray;
    
    - (id)initWithStyle:(UITableViewStyle)style
    {
        self = [super initWithStyle:style];
        if (self) {
            
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        dataArray = [NSMutableArray arrayWithArray:@[@"列表1",@"列表2",@"列表3",@"列表2",@"列表3",@"列表2",@"列表3",@"列表2",@"列表3",@"列表2",@"列表3",@"列表2",@"列表3",@"列表2",@"列表5"]];
        [self addPullToRefreshFooter];
    }
    
    //加入FootView指示器
    - (void)addPullToRefreshFooter
    {
        //FootView初始化
        footView = [[FootView alloc]initWithFrame:CGRectMake(0, dataArray.count*50 , 320, 251)];
        [self.tableView addSubview:footView];
        //监视数据数组
        [self addObserver:self forKeyPath:@"dataArray" options:NSKeyValueObservingOptionNew context:nil];
    }
    
    
    
    
    #pragma mark - Table view data source
    
    - (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return TABLE_CELL_HIGHT;
    }
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return dataArray.count;
    }
    
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *inditifierCell = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inditifierCell];
        if (cell == nil) {
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:inditifierCell];
        }
        cell.textLabel.text = [dataArray objectAtIndex:indexPath.row];
        
        return cell;
    }
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSMutableArray *new = [[NSMutableArray alloc]initWithArray:dataArray];
        [new addObject:@"张三"];
        self.dataArray  = new;
        [footView refreshStateNomal];
        self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
        
    }
    
    #pragma mark - kvo
    //用于监听dataArray数组来设置footview的位置
    - (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
        NSLog(@"%d",dataArray.count);
        NSMutableArray *mutableArray = [change objectForKey:@"new"];
        footView.frame = CGRectMake(0,TABLE_CELL_HIGHT* mutableArray.count, 320, 251);
        [self.tableView reloadData];
    }
    
    #pragma mark - Scroller
    
    //当scroller滑动时调用
    - (void) scrollViewDidScroll:(UIScrollView *)scrollView
    {
        if (footView.refreshState == RefreshStateNomal&& scrollView.contentOffset.y > scrollView.contentSize.height - scrollView.frame.size.height + 70) {
            [footView refreshStateRelsease];
        }
    }
    
    //当滑动结束时调用
    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    {
        if (footView.refreshState == RefreshStateRelease) {
            [UIView beginAnimations:nil context:nil];
            self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 70, 0);
            [footView refreshStateLoading];
            [UIView commitAnimations];
        }
    }
    
    @end


    在table中处理一些事件:

    为了測试加入数据后footview的位置是否会跟着变动。当点击cell的时候会加入一个数据。

    为了測试载入完毕后第二次拖拽是否页面还可以完毕,当点击cell的时候foottview会停止;


    下载代码:http://download.csdn.net/detail/u010123208/8036577

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    Shell编程之运算符和环境变量配置文件
    Shell编程之变量
    PCI BAR设置过程[转]
    基于ARM的SoC设计入门[转]
    负载均衡
    [转]vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
    VC/DDK/DriverWorks开发环境配置
    windows下注册表脚本编写
    _cdecl与_stdcall区别
    在C语言中破坏函数调用堆栈
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4890967.html
Copyright © 2011-2022 走看看