//
|
// MJRefreshGifHeader.m
|
// MJRefreshExample
|
//
|
// Created by MJ Lee on 15/4/24.
|
// Copyright (c) 2015年 小码哥. All rights reserved.
|
//
|
|
#import "MJRefreshGifHeader.h"
|
|
@interface MJRefreshGifHeader()
|
{
|
__unsafe_unretained UIImageView *_gifView;
|
}
|
/** 所有状态对应的动画图片 */
|
@property (strong, nonatomic) NSMutableDictionary *stateImages;
|
/** 所有状态对应的动画时间 */
|
@property (strong, nonatomic) NSMutableDictionary *stateDurations;
|
@end
|
|
@implementation MJRefreshGifHeader
|
#pragma mark - 懒加载
|
- (UIImageView *)gifView
|
{
|
if (!_gifView) {
|
UIImageView *gifView = [[UIImageView alloc] init];
|
[self addSubview:_gifView = gifView];
|
}
|
return _gifView;
|
}
|
|
- (NSMutableDictionary *)stateImages
|
{
|
if (!_stateImages) {
|
self.stateImages = [NSMutableDictionary dictionary];
|
}
|
return _stateImages;
|
}
|
|
- (NSMutableDictionary *)stateDurations
|
{
|
if (!_stateDurations) {
|
self.stateDurations = [NSMutableDictionary dictionary];
|
}
|
return _stateDurations;
|
}
|
|
#pragma mark - 公共方法
|
- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state
|
{
|
if (images == nil) return;
|
|
self.stateImages[@(state)] = images;
|
self.stateDurations[@(state)] = @(duration);
|
|
/* 根据图片设置控件的高度 */
|
UIImage *image = [images firstObject];
|
if (image.size.height > self.mj_h) {
|
self.mj_h = image.size.height;
|
}
|
}
|
|
- (void)setImages:(NSArray *)images forState:(MJRefreshState)state
|
{
|
[self setImages:images duration:images.count * 0.1 forState:state];
|
}
|
|
#pragma mark - 实现父类的方法
|
- (void)prepare
|
{
|
[super prepare];
|
|
// 初始化间距
|
self.labelLeftInset = 20;
|
}
|
|
- (void)setPullingPercent:(CGFloat)pullingPercent
|
{
|
[super setPullingPercent:pullingPercent];
|
NSArray *images = self.stateImages[@(MJRefreshStateIdle)];
|
if (self.state != MJRefreshStateIdle || images.count == 0) return;
|
// 停止动画
|
[self.gifView stopAnimating];
|
// 设置当前需要显示的图片
|
NSUInteger index = images.count * pullingPercent;
|
if (index >= images.count) index = images.count - 1;
|
self.gifView.image = images[index];
|
}
|
|
- (void)placeSubviews
|
{
|
[super placeSubviews];
|
|
if (self.gifView.constraints.count) return;
|
|
self.gifView.frame = self.bounds;
|
if (self.stateLabel.hidden && self.lastUpdatedTimeLabel.hidden) {
|
self.gifView.contentMode = UIViewContentModeCenter;
|
} else {
|
self.gifView.contentMode = UIViewContentModeRight;
|
|
CGFloat stateWidth = self.stateLabel.mj_textWith;
|
CGFloat timeWidth = 0.0;
|
if (!self.lastUpdatedTimeLabel.hidden) {
|
timeWidth = self.lastUpdatedTimeLabel.mj_textWith;
|
}
|
CGFloat textWidth = MAX(stateWidth, timeWidth);
|
self.gifView.mj_w = self.mj_w * 0.5 - textWidth * 0.5 - self.labelLeftInset;
|
}
|
}
|
|
- (void)setState:(MJRefreshState)state
|
{
|
MJRefreshCheckState
|
|
// 根据状态做事情
|
if (state == MJRefreshStatePulling || state == MJRefreshStateRefreshing) {
|
NSArray *images = self.stateImages[@(state)];
|
if (images.count == 0) return;
|
|
[self.gifView stopAnimating];
|
if (images.count == 1) { // 单张图片
|
self.gifView.image = [images lastObject];
|
} else { // 多张图片
|
self.gifView.animationImages = images;
|
self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue];
|
[self.gifView startAnimating];
|
}
|
} else if (state == MJRefreshStateIdle) {
|
[self.gifView stopAnimating];
|
}
|
}
|
@end
|