项目中为了实现类似下图的下拉刷新 我想到的是MJRefresh 下拉刷新自定义
下拉一定程度自动旋转 刷新加载数据过程旋转
实现过程如下:
导入最新的MJRefresh框架或者是通过cocoapods进行下载最新的MJ下拉刷新框架
这里我通过集成自MJRefreshHeader 实现自定义刷新
实现代码如下:
#import "CZRefreshHeader.h"
@interface CZRefreshHeader ()
@property(nonatomic,weak) UIView * headerFreshView;
@property(nonatomic,weak)UILabel * label;
@property(nonatomic, strong)UIImageView * imageView;
@property(nonatomic,assign) BOOL isAction;
@end
@implementation CZRefreshHeader
#pragma mark - 重写方法
- (void)prepare
{
[super prepare];
// 设置控件的高度
self.mj_h = 64;
UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor whiteColor];
// view.layer.cornerRadius = 10;
// view.layer.masksToBounds = YES;
[self addSubview:view];
self.headerFreshView = view;
// UILabel *label = [[UILabel alloc] init];
// label.textColor = [UIColor colorWithRed:1.0 green:0.5 blue:0.0 alpha:1.0];
// label.font = [UIFont boldSystemFontOfSize:12];
// label.textAlignment = NSTextAlignmentCenter;
// label.backgroundColor = [UIColor clearColor];
// [self.headerFreshView addSubview:label];
// self.label = label;
UIImageView * imageView = [[UIImageView alloc] init];
imageView.image = [UIImage imageNamed:@"sanjiao"];
[self.headerFreshView addSubview:imageView];
self.imageView = imageView;
}
//在此布局子控件
- (void)placeSubviews
{
[super placeSubviews];
self.headerFreshView.bounds = CGRectMake(0, 0, 110, 40);
self.headerFreshView.center = CGPointMake(self.mj_w*0.5, self.mj_h-20);
// self.label.frame = CGRectMake(30, 0, 80, 20);
self.imageView.frame = CGRectMake((110-18)*0.5, (40-18)*0.5, 18, 18);
}
#pragma mark 监听scrollView的contentOffset改变
- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change
{
[super scrollViewContentOffsetDidChange:change];
}
#pragma mark 监听scrollView的contentSize改变
- (void)scrollViewContentSizeDidChange:(NSDictionary *)change
{
[super scrollViewContentSizeDidChange:change];
}
#pragma mark 监听scrollView的拖拽状态改变
- (void)scrollViewPanStateDidChange:(NSDictionary *)change
{
[super scrollViewPanStateDidChange:change];
}
#pragma mark 监听控件的刷新状态
- (void)setState:(MJRefreshState)state
{
MJRefreshCheckState;
switch (state) {
case MJRefreshStateIdle:
self.label.text = @"下拉刷新";
// [self endAnimation];
break;
case MJRefreshStatePulling:
self.label.text = @"松开加载更多";
// [self endAnimation];
break;
case MJRefreshStateRefreshing:
self.label.text = @"加载中...";
[self startAnimation];
self.isAction = NO;
break;
default:
break;
}
}
#pragma mark 监听拖拽比例(控件被拖出来的比例)
- (void)setPullingPercent:(CGFloat)pullingPercent
{
[super setPullingPercent:pullingPercent];
if (pullingPercent >= 0.8 && self.isAction == NO) {
[self startAnimation];
self.isAction = YES;
}
if (pullingPercent < 0.8) {
[self endAnimation];
self.isAction = NO;
}
self.label.textColor = [UIColor blackColor];
}
#pragma mark 图片旋转
- (void)startAnimation
{
CABasicAnimation *basicAni= [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
self.isAction = NO;
basicAni.duration = 1;
basicAni.repeatCount = MAXFLOAT;
basicAni.toValue = @(M_PI*2);
[self.imageView.layer addAnimation:basicAni forKey:nil];
}
- (void)endAnimation
{
[self.imageView.layer removeAllAnimations];
}
通过基本动画实现了下拉图片旋转 加载数据 过程图片旋转。