Commit 964ce0a1 authored by jaguar-bot's avatar jaguar-bot

Bump version to 0.1.5

parent 076fac84
PODS:
- GMRefresh (0.1.4):
- MJRefresh (~> 3.1.0)
- MJRefresh (3.1.0)
- MJRefresh (3.1.12)
DEPENDENCIES:
- GMRefresh (from `../`)
......@@ -12,7 +12,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
GMRefresh: 4a1d3332576e7a4d9be742d62fec260fd718e65d
MJRefresh: 743e6404967d1c2c688472ea3ecfde247d872db4
MJRefresh: b96cdb21c4aa75a7b07654311ab2f315c497e806
PODFILE CHECKSUM: 9e12f3fbdc35e42e007aeabb4d7a97d764319eea
......
......@@ -13,7 +13,7 @@
@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用automaticallyChangeAlpha属性");
@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用triggerAutomaticallyRefreshPercent属性");
/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
......
......@@ -110,6 +110,12 @@
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self executeRefreshingCallback];
});
} else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
if (MJRefreshStateRefreshing == oldState) {
if (self.endRefreshingCompletionBlock) {
self.endRefreshingCompletionBlock();
}
}
}
}
......
......@@ -95,6 +95,10 @@
if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0;
} completion:^(BOOL finished) {
self.pullingPercent = 0.0;
if (self.endRefreshingCompletionBlock) {
self.endRefreshingCompletionBlock();
}
}];
}
......@@ -122,29 +126,19 @@
}
}
#pragma mark - 公共方法
- (void)endRefreshing
{
if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[super endRefreshing];
});
} else {
[super endRefreshing];
}
dispatch_async(dispatch_get_main_queue(), ^{
self.state = MJRefreshStateIdle;
});
}
- (void)noticeNoMoreData
- (void)endRefreshingWithNoMoreData
{
if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[super noticeNoMoreData];
});
} else {
[super noticeNoMoreData];
}
dispatch_async(dispatch_get_main_queue(), ^{
self.state = MJRefreshStateNoMoreData;
});
}
#pragma mark - 私有方法
#pragma mark 获得scrollView的内容 超出 view 的高度
- (CGFloat)heightForContentBreakView
......
......@@ -12,6 +12,7 @@
#import "UIView+MJExtension.h"
#import "UIScrollView+MJExtension.h"
#import "UIScrollView+MJRefresh.h"
#import "NSBundle+MJRefresh.h"
/** 刷新控件的状态 */
typedef NS_ENUM(NSInteger, MJRefreshState) {
......@@ -29,6 +30,10 @@ typedef NS_ENUM(NSInteger, MJRefreshState) {
/** 进入刷新状态的回调 */
typedef void (^MJRefreshComponentRefreshingBlock)();
/** 开始刷新后的回调(进入刷新状态后的回调) */
typedef void (^MJRefreshComponentbeginRefreshingCompletionBlock)();
/** 结束刷新后的回调 */
typedef void (^MJRefreshComponentEndRefreshingCompletionBlock)();
/** 刷新控件的基类 */
@interface MJRefreshComponent : UIView
......@@ -43,6 +48,7 @@ typedef void (^MJRefreshComponentRefreshingBlock)();
@property (copy, nonatomic) MJRefreshComponentRefreshingBlock refreshingBlock;
/** 设置回调对象和回调方法 */
- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action;
/** 回调对象 */
@property (weak, nonatomic) id refreshingTarget;
/** 回调方法 */
......@@ -53,8 +59,14 @@ typedef void (^MJRefreshComponentRefreshingBlock)();
#pragma mark - 刷新状态控制
/** 进入刷新状态 */
- (void)beginRefreshing;
- (void)beginRefreshingWithCompletionBlock:(void (^)())completionBlock;
/** 开始刷新后的回调(进入刷新状态后的回调) */
@property (copy, nonatomic) MJRefreshComponentbeginRefreshingCompletionBlock beginRefreshingCompletionBlock;
/** 结束刷新的回调 */
@property (copy, nonatomic) MJRefreshComponentEndRefreshingCompletionBlock endRefreshingCompletionBlock;
/** 结束刷新状态 */
- (void)endRefreshing;
- (void)endRefreshingWithCompletionBlock:(void (^)())completionBlock;
/** 是否正在刷新 */
- (BOOL)isRefreshing;
/** 刷新状态 一般交给子类内部实现 */
......@@ -89,5 +101,6 @@ typedef void (^MJRefreshComponentRefreshingBlock)();
@end
@interface UILabel(MJRefresh)
+ (instancetype)label;
+ (instancetype)mj_label;
- (CGFloat)mj_textWith;
@end
......@@ -9,8 +9,6 @@
#import "MJRefreshComponent.h"
#import "MJRefreshConst.h"
#import "UIView+MJExtension.h"
#import "UIScrollView+MJRefresh.h"
@interface MJRefreshComponent()
@property (strong, nonatomic) UIPanGestureRecognizer *pan;
......@@ -39,9 +37,9 @@
- (void)layoutSubviews
{
[super layoutSubviews];
[self placeSubviews];
[super layoutSubviews];
}
- (void)placeSubviews{}
......@@ -133,6 +131,16 @@
self.refreshingAction = action;
}
- (void)setState:(MJRefreshState)state
{
_state = state;
// 加入主队列的目的是等setState:方法调用完毕、设置完文字后再去布局子控件
dispatch_async(dispatch_get_main_queue(), ^{
[self setNeedsLayout];
});
}
#pragma mark 进入刷新状态
- (void)beginRefreshing
{
......@@ -144,18 +152,35 @@
if (self.window) {
self.state = MJRefreshStateRefreshing;
} else {
self.state = MJRefreshStateWillRefresh;
// 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下)
[self setNeedsDisplay];
// 预防正在刷新中时,调用本方法使得header inset回置失败
if (self.state != MJRefreshStateRefreshing) {
self.state = MJRefreshStateWillRefresh;
// 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下)
[self setNeedsDisplay];
}
}
}
- (void)beginRefreshingWithCompletionBlock:(void (^)())completionBlock
{
self.beginRefreshingCompletionBlock = completionBlock;
[self beginRefreshing];
}
#pragma mark 结束刷新状态
- (void)endRefreshing
{
self.state = MJRefreshStateIdle;
}
- (void)endRefreshingWithCompletionBlock:(void (^)())completionBlock
{
self.endRefreshingCompletionBlock = completionBlock;
[self endRefreshing];
}
#pragma mark 是否正在刷新
- (BOOL)isRefreshing
{
......@@ -208,12 +233,15 @@
if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) {
MJRefreshMsgSend(MJRefreshMsgTarget(self.refreshingTarget), self.refreshingAction, self);
}
if (self.beginRefreshingCompletionBlock) {
self.beginRefreshingCompletionBlock();
}
});
}
@end
@implementation UILabel(MJRefresh)
+ (instancetype)label
+ (instancetype)mj_label
{
UILabel *label = [[self alloc] init];
label.font = MJRefreshLabelFont;
......@@ -223,4 +251,24 @@
label.backgroundColor = [UIColor clearColor];
return label;
}
- (CGFloat)mj_textWith {
CGFloat stringWidth = 0;
CGSize size = CGSizeMake(MAXFLOAT, MAXFLOAT);
if (self.text.length > 0) {
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
stringWidth =[self.text
boundingRectWithSize:size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:self.font}
context:nil].size.width;
#else
stringWidth = [self.text sizeWithFont:self.font
constrainedToSize:size
lineBreakMode:NSLineBreakByCharWrapping].width;
#endif
}
return stringWidth;
}
@end
\ No newline at end of file
......@@ -118,38 +118,32 @@
if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0;
} completion:^(BOOL finished) {
self.pullingPercent = 0.0;
}];
} else if (state == MJRefreshStateRefreshing) {
[UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
// 增加滚动区域
CGFloat top = self.scrollViewOriginalInset.top + self.mj_h;
self.scrollView.mj_insetT = top;
// 设置滚动位置
self.scrollView.mj_offsetY = - top;
} completion:^(BOOL finished) {
[self executeRefreshingCallback];
if (self.endRefreshingCompletionBlock) {
self.endRefreshingCompletionBlock();
}
}];
} else if (state == MJRefreshStateRefreshing) {
dispatch_async(dispatch_get_main_queue(), ^{
[UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
CGFloat top = self.scrollViewOriginalInset.top + self.mj_h;
// 增加滚动区域top
self.scrollView.mj_insetT = top;
// 设置滚动位置
[self.scrollView setContentOffset:CGPointMake(0, -top) animated:NO];
} completion:^(BOOL finished) {
[self executeRefreshingCallback];
}];
});
}
}
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
}
#pragma mark - 公共方法
- (void)endRefreshing
{
if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[super endRefreshing];
});
} else {
[super endRefreshing];
}
dispatch_async(dispatch_get_main_queue(), ^{
self.state = MJRefreshStateIdle;
});
}
- (NSDate *)lastUpdatedTime
......
......@@ -66,6 +66,14 @@
}
#pragma mark - 实现父类的方法
- (void)prepare
{
[super prepare];
// 初始化间距
self.labelLeftInset = 20;
}
- (void)placeSubviews
{
[super placeSubviews];
......@@ -77,7 +85,7 @@
self.gifView.contentMode = UIViewContentModeCenter;
} else {
self.gifView.contentMode = UIViewContentModeRight;
self.gifView.mj_w = self.mj_w * 0.5 - 90;
self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWith * 0.5;
}
}
......
......@@ -31,7 +31,7 @@
self.loadingView = nil;
[self setNeedsLayout];
}
#pragma makr - 重写父类的方法
#pragma mark - 重写父类的方法
- (void)prepare
{
[super prepare];
......@@ -48,7 +48,7 @@
// 圈圈
CGFloat loadingCenterX = self.mj_w * 0.5;
if (!self.isRefreshingTitleHidden) {
loadingCenterX -= 100;
loadingCenterX -= self.stateLabel.mj_textWith * 0.5 + self.labelLeftInset;
}
CGFloat loadingCenterY = self.mj_h * 0.5;
self.loadingView.center = CGPointMake(loadingCenterX, loadingCenterY);
......
......@@ -9,6 +9,8 @@
#import "MJRefreshAutoFooter.h"
@interface MJRefreshAutoStateFooter : MJRefreshAutoFooter
/** 文字距离圈圈、箭头的距离 */
@property (assign, nonatomic) CGFloat labelLeftInset;
/** 显示刷新状态的label */
@property (weak, nonatomic, readonly) UILabel *stateLabel;
......
......@@ -30,7 +30,7 @@
- (UILabel *)stateLabel
{
if (!_stateLabel) {
[self addSubview:_stateLabel = [UILabel label]];
[self addSubview:_stateLabel = [UILabel mj_label]];
}
return _stateLabel;
}
......@@ -56,10 +56,13 @@
{
[super prepare];
// 初始化间距
self.labelLeftInset = MJRefreshLabelLeftInset;
// 初始化文字
[self setTitle:MJRefreshAutoFooterIdleText forState:MJRefreshStateIdle];
[self setTitle:MJRefreshAutoFooterRefreshingText forState:MJRefreshStateRefreshing];
[self setTitle:MJRefreshAutoFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterIdleText] forState:MJRefreshStateIdle];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterRefreshingText] forState:MJRefreshStateRefreshing];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterNoMoreDataText] forState:MJRefreshStateNoMoreData];
// 监听label
self.stateLabel.userInteractionEnabled = YES;
......
......@@ -66,6 +66,14 @@
}
#pragma mark - 实现父类的方法
- (void)prepare
{
[super prepare];
// 初始化间距
self.labelLeftInset = 20;
}
- (void)setPullingPercent:(CGFloat)pullingPercent
{
[super setPullingPercent:pullingPercent];
......@@ -88,7 +96,7 @@
self.gifView.contentMode = UIViewContentModeCenter;
} else {
self.gifView.contentMode = UIViewContentModeRight;
self.gifView.mj_w = self.mj_w * 0.5 - 90;
self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWith * 0.5;
}
}
......
......@@ -7,6 +7,7 @@
//
#import "MJRefreshBackNormalFooter.h"
#import "NSBundle+MJRefresh.h"
@interface MJRefreshBackNormalFooter()
{
......@@ -20,8 +21,7 @@
- (UIImageView *)arrowView
{
if (!_arrowView) {
UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]];
[self addSubview:_arrowView = arrowView];
}
return _arrowView;
......@@ -45,7 +45,7 @@
self.loadingView = nil;
[self setNeedsLayout];
}
#pragma makr - 重写父类的方法
#pragma mark - 重写父类的方法
- (void)prepare
{
[super prepare];
......@@ -60,7 +60,7 @@
// 箭头的中心点
CGFloat arrowCenterX = self.mj_w * 0.5;
if (!self.stateLabel.hidden) {
arrowCenterX -= 100;
arrowCenterX -= self.labelLeftInset + self.stateLabel.mj_textWith * 0.5;
}
CGFloat arrowCenterY = self.mj_h * 0.5;
CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY);
......@@ -75,6 +75,8 @@
if (self.loadingView.constraints.count == 0) {
self.loadingView.center = arrowCenter;
}
self.arrowView.tintColor = self.stateLabel.textColor;
}
- (void)setState:(MJRefreshState)state
......
......@@ -9,6 +9,8 @@
#import "MJRefreshBackFooter.h"
@interface MJRefreshBackStateFooter : MJRefreshBackFooter
/** 文字距离圈圈、箭头的距离 */
@property (assign, nonatomic) CGFloat labelLeftInset;
/** 显示刷新状态的label */
@property (weak, nonatomic, readonly) UILabel *stateLabel;
/** 设置state状态下的文字 */
......
......@@ -30,7 +30,7 @@
- (UILabel *)stateLabel
{
if (!_stateLabel) {
[self addSubview:_stateLabel = [UILabel label]];
[self addSubview:_stateLabel = [UILabel mj_label]];
}
return _stateLabel;
}
......@@ -52,11 +52,14 @@
{
[super prepare];
// 初始化间距
self.labelLeftInset = MJRefreshLabelLeftInset;
// 初始化文字
[self setTitle:MJRefreshBackFooterIdleText forState:MJRefreshStateIdle];
[self setTitle:MJRefreshBackFooterPullingText forState:MJRefreshStatePulling];
[self setTitle:MJRefreshBackFooterRefreshingText forState:MJRefreshStateRefreshing];
[self setTitle:MJRefreshBackFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterIdleText] forState:MJRefreshStateIdle];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterPullingText] forState:MJRefreshStatePulling];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterRefreshingText] forState:MJRefreshStateRefreshing];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterNoMoreDataText] forState:MJRefreshStateNoMoreData];
}
- (void)placeSubviews
......
......@@ -66,6 +66,14 @@
}
#pragma mark - 实现父类的方法
- (void)prepare
{
[super prepare];
// 初始化间距
self.labelLeftInset = 20;
}
- (void)setPullingPercent:(CGFloat)pullingPercent
{
[super setPullingPercent:pullingPercent];
......@@ -90,7 +98,14 @@
self.gifView.contentMode = UIViewContentModeCenter;
} else {
self.gifView.contentMode = UIViewContentModeRight;
self.gifView.mj_w = self.mj_w * 0.5 - 90;
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;
}
}
......
......@@ -7,6 +7,7 @@
//
#import "MJRefreshNormalHeader.h"
#import "NSBundle+MJRefresh.h"
@interface MJRefreshNormalHeader()
{
......@@ -20,8 +21,7 @@
- (UIImageView *)arrowView
{
if (!_arrowView) {
UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]];
[self addSubview:_arrowView = arrowView];
}
return _arrowView;
......@@ -46,7 +46,7 @@
[self setNeedsLayout];
}
#pragma makr - 重写父类的方法
#pragma mark - 重写父类的方法
- (void)prepare
{
[super prepare];
......@@ -61,7 +61,13 @@
// 箭头的中心点
CGFloat arrowCenterX = self.mj_w * 0.5;
if (!self.stateLabel.hidden) {
arrowCenterX -= 100;
CGFloat stateWidth = self.stateLabel.mj_textWith;
CGFloat timeWidth = 0.0;
if (!self.lastUpdatedTimeLabel.hidden) {
timeWidth = self.lastUpdatedTimeLabel.mj_textWith;
}
CGFloat textWidth = MAX(stateWidth, timeWidth);
arrowCenterX -= textWidth / 2 + self.labelLeftInset;
}
CGFloat arrowCenterY = self.mj_h * 0.5;
CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY);
......@@ -76,6 +82,8 @@
if (self.loadingView.constraints.count == 0) {
self.loadingView.center = arrowCenter;
}
self.arrowView.tintColor = self.stateLabel.textColor;
}
- (void)setState:(MJRefreshState)state
......
......@@ -16,6 +16,8 @@
@property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel;
#pragma mark - 状态相关
/** 文字距离圈圈、箭头的距离 */
@property (assign, nonatomic) CGFloat labelLeftInset;
/** 显示刷新状态的label */
@property (weak, nonatomic, readonly) UILabel *stateLabel;
/** 设置state状态下的文字 */
......
......@@ -32,7 +32,7 @@
- (UILabel *)stateLabel
{
if (!_stateLabel) {
[self addSubview:_stateLabel = [UILabel label]];
[self addSubview:_stateLabel = [UILabel mj_label]];
}
return _stateLabel;
}
......@@ -40,7 +40,7 @@
- (UILabel *)lastUpdatedTimeLabel
{
if (!_lastUpdatedTimeLabel) {
[self addSubview:_lastUpdatedTimeLabel = [UILabel label]];
[self addSubview:_lastUpdatedTimeLabel = [UILabel mj_label]];
}
return _lastUpdatedTimeLabel;
}
......@@ -86,8 +86,10 @@
// 2.格式化日期
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
BOOL isToday = NO;
if ([cmp1 day] == [cmp2 day]) { // 今天
formatter.dateFormat = @"今天 HH:mm";
formatter.dateFormat = @" HH:mm";
isToday = YES;
} else if ([cmp1 year] == [cmp2 year]) { // 今年
formatter.dateFormat = @"MM-dd HH:mm";
} else {
......@@ -96,9 +98,14 @@
NSString *time = [formatter stringFromDate:lastUpdatedTime];
// 3.显示日期
self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"最后更新:%@", time];
self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@%@",
[NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText],
isToday ? [NSBundle mj_localizedStringForKey:MJRefreshHeaderDateTodayText] : @"",
time];
} else {
self.lastUpdatedTimeLabel.text = @"最后更新:无记录";
self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@",
[NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText],
[NSBundle mj_localizedStringForKey:MJRefreshHeaderNoneLastDateText]];
}
}
......@@ -107,10 +114,13 @@
{
[super prepare];
// 初始化间距
self.labelLeftInset = MJRefreshLabelLeftInset;
// 初始化文字
[self setTitle:MJRefreshHeaderIdleText forState:MJRefreshStateIdle];
[self setTitle:MJRefreshHeaderPullingText forState:MJRefreshStatePulling];
[self setTitle:MJRefreshHeaderRefreshingText forState:MJRefreshStateRefreshing];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderIdleText] forState:MJRefreshStateIdle];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderPullingText] forState:MJRefreshStatePulling];
[self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderRefreshingText] forState:MJRefreshStateRefreshing];
}
- (void)placeSubviews
......
......@@ -29,11 +29,8 @@
// 字体大小
#define MJRefreshLabelFont [UIFont boldSystemFontOfSize:14]
// 图片路径
#define MJRefreshSrcName(file) [@"MJRefresh.bundle" stringByAppendingPathComponent:file]
#define MJRefreshFrameworkSrcName(file) [@"Frameworks/MJRefresh.framework/MJRefresh.bundle" stringByAppendingPathComponent:file]
// 常量
UIKIT_EXTERN const CGFloat MJRefreshLabelLeftInset;
UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight;
UIKIT_EXTERN const CGFloat MJRefreshFooterHeight;
UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration;
......@@ -59,6 +56,10 @@ UIKIT_EXTERN NSString *const MJRefreshBackFooterPullingText;
UIKIT_EXTERN NSString *const MJRefreshBackFooterRefreshingText;
UIKIT_EXTERN NSString *const MJRefreshBackFooterNoMoreDataText;
UIKIT_EXTERN NSString *const MJRefreshHeaderLastTimeText;
UIKIT_EXTERN NSString *const MJRefreshHeaderDateTodayText;
UIKIT_EXTERN NSString *const MJRefreshHeaderNoneLastDateText;
// 状态检查
#define MJRefreshCheckState \
MJRefreshState oldState = self.state; \
......
......@@ -2,6 +2,7 @@
// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
#import <UIKit/UIKit.h>
const CGFloat MJRefreshLabelLeftInset = 25;
const CGFloat MJRefreshHeaderHeight = 54.0;
const CGFloat MJRefreshFooterHeight = 44.0;
const CGFloat MJRefreshFastAnimationDuration = 0.25;
......@@ -14,15 +15,19 @@ NSString *const MJRefreshKeyPathPanState = @"state";
NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey";
NSString *const MJRefreshHeaderIdleText = @"下拉可以刷新";
NSString *const MJRefreshHeaderPullingText = @"松开立即刷新";
NSString *const MJRefreshHeaderRefreshingText = @"正在刷新数据中...";
NSString *const MJRefreshHeaderIdleText = @"MJRefreshHeaderIdleText";
NSString *const MJRefreshHeaderPullingText = @"MJRefreshHeaderPullingText";
NSString *const MJRefreshHeaderRefreshingText = @"MJRefreshHeaderRefreshingText";
NSString *const MJRefreshAutoFooterIdleText = @"点击或上拉加载更多";
NSString *const MJRefreshAutoFooterRefreshingText = @"正在加载更多的数据...";
NSString *const MJRefreshAutoFooterNoMoreDataText = @"已经全部加载完毕";
NSString *const MJRefreshAutoFooterIdleText = @"MJRefreshAutoFooterIdleText";
NSString *const MJRefreshAutoFooterRefreshingText = @"MJRefreshAutoFooterRefreshingText";
NSString *const MJRefreshAutoFooterNoMoreDataText = @"MJRefreshAutoFooterNoMoreDataText";
NSString *const MJRefreshBackFooterIdleText = @"上拉可以加载更多";
NSString *const MJRefreshBackFooterPullingText = @"松开立即加载更多";
NSString *const MJRefreshBackFooterRefreshingText = @"正在加载更多的数据...";
NSString *const MJRefreshBackFooterNoMoreDataText = @"已经全部加载完毕";
\ No newline at end of file
NSString *const MJRefreshBackFooterIdleText = @"MJRefreshBackFooterIdleText";
NSString *const MJRefreshBackFooterPullingText = @"MJRefreshBackFooterPullingText";
NSString *const MJRefreshBackFooterRefreshingText = @"MJRefreshBackFooterRefreshingText";
NSString *const MJRefreshBackFooterNoMoreDataText = @"MJRefreshBackFooterNoMoreDataText";
NSString *const MJRefreshHeaderLastTimeText = @"MJRefreshHeaderLastTimeText";
NSString *const MJRefreshHeaderDateTodayText = @"MJRefreshHeaderDateTodayText";
NSString *const MJRefreshHeaderNoneLastDateText = @"MJRefreshHeaderNoneLastDateText";
\ No newline at end of file
......@@ -57,7 +57,7 @@ static const char MJRefreshFooterKey = '\0';
if (mj_footer != self.mj_footer) {
// 删除旧的,添加新的
[self.mj_footer removeFromSuperview];
[self addSubview:mj_footer];
[self insertSubview:mj_footer atIndex:0];
// 存储新的
[self willChangeValueForKey:@"mj_footer"]; // KVO
......
This diff is collapsed.
PODS:
- GMRefresh (0.1.4):
- MJRefresh (~> 3.1.0)
- MJRefresh (3.1.0)
- MJRefresh (3.1.12)
DEPENDENCIES:
- GMRefresh (from `../`)
......@@ -12,7 +12,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
GMRefresh: 4a1d3332576e7a4d9be742d62fec260fd718e65d
MJRefresh: 743e6404967d1c2c688472ea3ecfde247d872db4
MJRefresh: b96cdb21c4aa75a7b07654311ab2f315c497e806
PODFILE CHECKSUM: 9e12f3fbdc35e42e007aeabb4d7a97d764319eea
......
This diff is collapsed.
......@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>3.1.0</string>
<string>3.1.12</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
......
......@@ -18,6 +18,7 @@
#import "MJRefreshStateHeader.h"
#import "MJRefresh.h"
#import "MJRefreshConst.h"
#import "NSBundle+MJRefresh.h"
#import "UIScrollView+MJExtension.h"
#import "UIScrollView+MJRefresh.h"
#import "UIView+MJExtension.h"
......
......@@ -8,7 +8,7 @@
Pod::Spec.new do |s|
s.name = "GMRefresh"
s.version = "0.1.4"
s.version = "0.1.5"
s.summary = "基于MJRefresh做的下拉刷新,自动加载更多"
s.homepage = "http://git.gengmei.cc/gengmeiios/GMLibrary/GMRefresh"
s.license = 'MIT'
......
......@@ -3,34 +3,77 @@
<testsuite name="fastlane.lanes">
<testcase classname="fastlane.lanes" name="0: Verifying required fastlane version" time="0.000442">
<testcase classname="fastlane.lanes" name="0: Verifying required fastlane version" time="0.000561">
</testcase>
<testcase classname="fastlane.lanes" name="1: default_platform" time="0.000222">
<testcase classname="fastlane.lanes" name="1: default_platform" time="0.000262">
</testcase>
<testcase classname="fastlane.lanes" name="2: import_from_git" time="0.737118">
<testcase classname="fastlane.lanes" name="2: import_from_git" time="0.576125">
</testcase>
<testcase classname="fastlane.lanes" name="3: hipchat" time="0.04816">
<testcase classname="fastlane.lanes" name="3: hipchat" time="0.04935">
</testcase>
<testcase classname="fastlane.lanes" name="4: git_pull" time="0.564971">
<testcase classname="fastlane.lanes" name="4: git_pull" time="1.057824">
<failure message="/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/actions/actions_helper.rb:33:in `execute_action'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/runner.rb:187:in `block in execute_action'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/runner.rb:186:in `chdir'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/runner.rb:186:in `execute_action'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/runner.rb:112:in `trigger_action_by_name'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/fast_file.rb:140:in `method_missing'&#10;../../../../../../var/folders/j6/yvgnw4_n0x74mjp36j7h7bjw0000gn/T/fl_clone20161011-8833-xj0v5d/JaguarTemplate.git/fastlane/ios_fastfile:63:in `block (2 levels) in parsing_binding'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/lane.rb:33:in `call'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/runner.rb:49:in `block in execute'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/runner.rb:45:in `chdir'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/runner.rb:45:in `execute'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/lane_manager.rb:46:in `cruise_lane'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/command_line_handler.rb:30:in `handle'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/commands_generator.rb:49:in `block (2 levels) in run'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/commander-4.4.0/lib/commander/command.rb:178:in `call'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/commander-4.4.0/lib/commander/command.rb:153:in `run'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/commander-4.4.0/lib/commander/runner.rb:444:in `run_active_command'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane_core-0.52.1/lib/fastlane_core/ui/fastlane_runner.rb:36:in `run!'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/commander-4.4.0/lib/commander/delegates.rb:15:in `run!'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/commands_generator.rb:244:in `run'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/commands_generator.rb:20:in `start'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/lib/fastlane/cli_tools_distributor.rb:58:in `take_off'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/gems/fastlane-1.105.1/bin/fastlane:5:in `&lt;top (required)&gt;'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/bin/fastlane:23:in `load'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/bin/fastlane:23:in `&lt;main&gt;'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `eval'&#10;/Users/gengmei/.rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `&lt;main&gt;'&#10;&#10;Exit status of command 'git pull &amp;&amp; git fetch --tags' was 1 instead of 0.&#10;From git.gengmei.cc:gengmeiios/GMRefresh&#10; * [new branch] GMRefreshBugFix -&gt; origin/GMRefreshBugFix&#10; * [new branch] master -&gt; origin/master&#10;There is no tracking information for the current branch.&#10;Please specify which branch you want to merge with.&#10;See git-pull(1) for details.&#10;&#10; git pull &lt;remote&gt; &lt;branch&gt;&#10;&#10;If you wish to set tracking information for this branch you can do so with:&#10;&#10; git branch --set-upstream-to=origin/&lt;branch&gt; master&#10;&#10;" />
</testcase>
<testcase classname="fastlane.lanes" name="5: ensure_git_branch" time="0.006838">
</testcase>
<testcase classname="fastlane.lanes" name="6: pod_install" time="14.856944">
</testcase>
<testcase classname="fastlane.lanes" name="7: pod_lib_lint" time="28.55106">
</testcase>
<testcase classname="fastlane.lanes" name="8: version_bump_podspec" time="0.001244">
</testcase>
<testcase classname="fastlane.lanes" name="9: git_commit_all" time="0.086962">
</testcase>
<testcase classname="fastlane.lanes" name="10: add_git_tag" time="0.011892">
</testcase>
<testcase classname="fastlane.lanes" name="11: push_to_git_remote" time="1.034166">
</testcase>
<testcase classname="fastlane.lanes" name="12: pod_push" time="16.108675">
</testcase>
<testcase classname="fastlane.lanes" name="13: pod_repo_update" time="1.448015">
</testcase>
<testcase classname="fastlane.lanes" name="5: hipchat" time="0.049557">
<testcase classname="fastlane.lanes" name="14: hipchat" time="0.525092">
</testcase>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment