123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- //
- // MJRefreshNormalHeader.m
- // MJRefreshExample
- //
- // Created by MJ Lee on 15/4/24.
- // Copyright (c) 2015年 小码哥. All rights reserved.
- //
- #import "MJRefreshNormalHeader.h"
- @interface MJRefreshNormalHeader()
- {
- __unsafe_unretained UIImageView *_arrowView;
- }
- @property (weak, nonatomic) UIActivityIndicatorView *loadingView;
- @end
- @implementation MJRefreshNormalHeader
- #pragma mark - 懒加载子控件
- - (UIImageView *)arrowView
- {
- if (!_arrowView) {
- UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
- UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
- [self addSubview:_arrowView = arrowView];
- }
- return _arrowView;
- }
- - (UIActivityIndicatorView *)loadingView
- {
- if (!_loadingView) {
- UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle];
- loadingView.hidesWhenStopped = YES;
- [self addSubview:_loadingView = loadingView];
- }
- return _loadingView;
- }
- #pragma mark - 公共方法
- - (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle
- {
- _activityIndicatorViewStyle = activityIndicatorViewStyle;
-
- self.loadingView = nil;
- [self setNeedsLayout];
- }
- #pragma makr - 重写父类的方法
- - (void)prepare
- {
- [super prepare];
-
- self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
- }
- - (void)placeSubviews
- {
- [super placeSubviews];
-
- // 箭头的中心点
- CGFloat arrowCenterX = self.mj_w * 0.5;
- if (!self.stateLabel.hidden) {
- arrowCenterX -= 100;
- }
- CGFloat arrowCenterY = self.mj_h * 0.5;
- CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY);
-
- // 箭头
- if (self.arrowView.constraints.count == 0) {
- self.arrowView.mj_size = self.arrowView.image.size;
- self.arrowView.center = arrowCenter;
- }
-
- // 圈圈
- if (self.loadingView.constraints.count == 0) {
- self.loadingView.center = arrowCenter;
- }
- }
- - (void)setState:(MJRefreshState)state
- {
- MJRefreshCheckState
-
- // 根据状态做事情
- if (state == MJRefreshStateIdle) {
- if (oldState == MJRefreshStateRefreshing) {
- self.arrowView.transform = CGAffineTransformIdentity;
-
- [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
- self.loadingView.alpha = 0.0;
- } completion:^(BOOL finished) {
- // 如果执行完动画发现不是idle状态,就直接返回,进入其他状态
- if (self.state != MJRefreshStateIdle) return;
-
- self.loadingView.alpha = 1.0;
- [self.loadingView stopAnimating];
- self.arrowView.hidden = NO;
- }];
- } else {
- [self.loadingView stopAnimating];
- self.arrowView.hidden = NO;
- [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
- self.arrowView.transform = CGAffineTransformIdentity;
- }];
- }
- } else if (state == MJRefreshStatePulling) {
- [self.loadingView stopAnimating];
- self.arrowView.hidden = NO;
- [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
- self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI);
- }];
- } else if (state == MJRefreshStateRefreshing) {
- self.loadingView.alpha = 1.0; // 防止refreshing -> idle的动画完毕动作没有被执行
- [self.loadingView startAnimating];
- self.arrowView.hidden = YES;
- }
- }
- @end
|