ios-上拉加载更多的界面

转自:http://blog.csdn.net/u013626002/article/details/46415315

想试一下上拉加载更多怎么实现开始自己的研究之旅,看了两天终于做出了界面。

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

\加载中...\

 

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

 

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

 

?
1
2
3
4
5
typedef  enum {
     RefreshStateLoading = 1 , //刷新状态为正在加载
     RefreshStateRelease,    //下拉完成释放之前
     RefreshStateNomal,      //原始状态
}RefreshState;


 

下面一个类view来描述刷新view

?
1
2
3
4
5
6
7
8
9
10
11
12
@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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 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

 

 

?
1
2
3
4
5
6
7
8
# import <uikit uikit.h= "" >
 
@interface MyTableVC : UITableViewController<uiscrollviewdelegate>
 
@property  (nonatomic,strong) NSMutableArray *dataArray; //数据
 
 
@end </uiscrollviewdelegate></uikit>

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# 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


猜你喜欢

转载自blog.csdn.net/zhanglizhi111/article/details/79522451