自定义下拉刷新

项目中为了实现类似下图的下拉刷新 我想到的是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];
}

通过基本动画实现了下拉图片旋转 加载数据 过程图片旋转。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值