123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- //
- // 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
|