Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
GMRefresh
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gengmeiios
GMRefresh
Commits
896d2817
Commit
896d2817
authored
Oct 19, 2017
by
汪洋
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
删除没有必要跟踪的文件
parent
e36f45c6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
76 changed files
with
0 additions
and
3655 deletions
+0
-3655
GMRefresh.podspec.json
Example/Pods/Local Podspecs/GMRefresh.podspec.json
+0
-31
LICENSE
Example/Pods/MJRefresh/LICENSE
+0
-19
MJRefreshAutoFooter.h
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
+0
-20
MJRefreshAutoFooter.m
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m
+0
-139
MJRefreshBackFooter.h
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h
+0
-13
MJRefreshBackFooter.m
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m
+0
-160
MJRefreshComponent.h
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshComponent.h
+0
-107
MJRefreshComponent.m
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshComponent.m
+0
-274
MJRefreshFooter.h
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.h
+0
-30
MJRefreshFooter.m
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.m
+0
-74
MJRefreshHeader.h
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.h
+0
-25
MJRefreshHeader.m
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.m
+0
-153
MJRefreshAutoGifFooter.h
...esh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
+0
-17
MJRefreshAutoGifFooter.m
...esh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
+0
-116
MJRefreshAutoNormalFooter.h
.../MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h
+0
-14
MJRefreshAutoNormalFooter.m
.../MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
+0
-69
MJRefreshAutoStateFooter.h
...h/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
+0
-22
MJRefreshAutoStateFooter.m
...h/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
+0
-93
MJRefreshBackGifFooter.h
...esh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
+0
-17
MJRefreshBackGifFooter.m
...esh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
+0
-127
MJRefreshBackNormalFooter.h
.../MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h
+0
-15
MJRefreshBackNormalFooter.m
.../MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
+0
-120
MJRefreshBackStateFooter.h
...h/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
+0
-21
MJRefreshBackStateFooter.m
...h/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
+0
-82
MJRefreshGifHeader.h
...ds/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
+0
-17
MJRefreshGifHeader.m
...ds/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m
+0
-133
MJRefreshNormalHeader.h
...MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h
+0
-15
MJRefreshNormalHeader.m
...MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
+0
-127
MJRefreshStateHeader.h
.../MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
+0
-25
MJRefreshStateHeader.m
.../MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m
+0
-167
arrow@2x.png
...le/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png
+0
-0
MJRefresh.h
Example/Pods/MJRefresh/MJRefresh/MJRefresh.h
+0
-15
MJRefreshConst.h
Example/Pods/MJRefresh/MJRefresh/MJRefreshConst.h
+0
-67
MJRefreshConst.m
Example/Pods/MJRefresh/MJRefresh/MJRefreshConst.m
+0
-34
UIScrollView+MJExtension.h
Example/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.h
+0
-25
UIScrollView+MJExtension.m
Example/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.m
+0
-146
UIScrollView+MJRefresh.h
Example/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h
+0
-26
UIScrollView+MJRefresh.m
Example/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m
+0
-163
UIView+MJExtension.h
Example/Pods/MJRefresh/MJRefresh/UIView+MJExtension.h
+0
-19
UIView+MJExtension.m
Example/Pods/MJRefresh/MJRefresh/UIView+MJExtension.m
+0
-84
README.md
Example/Pods/MJRefresh/README.md
+0
-0
Manifest.lock
Example/Pods/Manifest.lock
+0
-28
project.pbxproj
Example/Pods/Pods.xcodeproj/project.pbxproj
+0
-0
GMRefresh-dummy.m
...ple/Pods/Target Support Files/GMRefresh/GMRefresh-dummy.m
+0
-5
GMRefresh-prefix.pch
.../Pods/Target Support Files/GMRefresh/GMRefresh-prefix.pch
+0
-12
GMRefresh-umbrella.h
.../Pods/Target Support Files/GMRefresh/GMRefresh-umbrella.h
+0
-20
GMRefresh.modulemap
...e/Pods/Target Support Files/GMRefresh/GMRefresh.modulemap
+0
-6
GMRefresh.xcconfig
...le/Pods/Target Support Files/GMRefresh/GMRefresh.xcconfig
+0
-10
Info.plist
Example/Pods/Target Support Files/GMRefresh/Info.plist
+0
-26
ResourceBundle-GMRefresh-Info.plist
...pport Files/GMRefresh/ResourceBundle-GMRefresh-Info.plist
+0
-24
Info.plist
Example/Pods/Target Support Files/MJRefresh/Info.plist
+0
-26
MJRefresh-dummy.m
...ple/Pods/Target Support Files/MJRefresh/MJRefresh-dummy.m
+0
-5
MJRefresh-prefix.pch
.../Pods/Target Support Files/MJRefresh/MJRefresh-prefix.pch
+0
-12
MJRefresh-umbrella.h
.../Pods/Target Support Files/MJRefresh/MJRefresh-umbrella.h
+0
-36
MJRefresh.modulemap
...e/Pods/Target Support Files/MJRefresh/MJRefresh.modulemap
+0
-6
MJRefresh.xcconfig
...le/Pods/Target Support Files/MJRefresh/MJRefresh.xcconfig
+0
-9
Info.plist
...ds/Target Support Files/Pods-GMRefresh_Example/Info.plist
+0
-26
Pods-GMRefresh_Example-acknowledgements.markdown
..._Example/Pods-GMRefresh_Example-acknowledgements.markdown
+0
-0
Pods-GMRefresh_Example-acknowledgements.plist
...esh_Example/Pods-GMRefresh_Example-acknowledgements.plist
+0
-0
Pods-GMRefresh_Example-dummy.m
...les/Pods-GMRefresh_Example/Pods-GMRefresh_Example-dummy.m
+0
-5
Pods-GMRefresh_Example-frameworks.sh
...ds-GMRefresh_Example/Pods-GMRefresh_Example-frameworks.sh
+0
-120
Pods-GMRefresh_Example-resources.sh
...ods-GMRefresh_Example/Pods-GMRefresh_Example-resources.sh
+0
-106
Pods-GMRefresh_Example-umbrella.h
.../Pods-GMRefresh_Example/Pods-GMRefresh_Example-umbrella.h
+0
-16
Pods-GMRefresh_Example.debug.xcconfig
...s-GMRefresh_Example/Pods-GMRefresh_Example.debug.xcconfig
+0
-9
Pods-GMRefresh_Example.modulemap
...s/Pods-GMRefresh_Example/Pods-GMRefresh_Example.modulemap
+0
-6
Pods-GMRefresh_Example.release.xcconfig
...GMRefresh_Example/Pods-GMRefresh_Example.release.xcconfig
+0
-9
Info.plist
...Pods/Target Support Files/Pods-GMRefresh_Tests/Info.plist
+0
-26
Pods-GMRefresh_Tests-acknowledgements.markdown
...resh_Tests/Pods-GMRefresh_Tests-acknowledgements.markdown
+0
-3
Pods-GMRefresh_Tests-acknowledgements.plist
...Refresh_Tests/Pods-GMRefresh_Tests-acknowledgements.plist
+0
-29
Pods-GMRefresh_Tests-dummy.m
...t Files/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests-dummy.m
+0
-5
Pods-GMRefresh_Tests-frameworks.sh
...s/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests-frameworks.sh
+0
-105
Pods-GMRefresh_Tests-resources.sh
...es/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests-resources.sh
+0
-106
Pods-GMRefresh_Tests-umbrella.h
...iles/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests-umbrella.h
+0
-16
Pods-GMRefresh_Tests.debug.xcconfig
.../Pods-GMRefresh_Tests/Pods-GMRefresh_Tests.debug.xcconfig
+0
-8
Pods-GMRefresh_Tests.modulemap
...Files/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests.modulemap
+0
-6
Pods-GMRefresh_Tests.release.xcconfig
...ods-GMRefresh_Tests/Pods-GMRefresh_Tests.release.xcconfig
+0
-8
No files found.
Example/Pods/Local Podspecs/GMRefresh.podspec.json
deleted
100644 → 0
View file @
e36f45c6
{
"name"
:
"GMRefresh"
,
"version"
:
"0.1.6"
,
"summary"
:
"基于MJRefresh做的下拉刷新,自动加载更多"
,
"homepage"
:
"http://git.gengmei.cc/gengmeiios/GMLibrary/GMRefresh"
,
"license"
:
"MIT"
,
"authors"
:
{
"wangyang"
:
"wangyang@gmei.com"
},
"source"
:
{
"git"
:
"git@git.gengmei.cc:gengmeiios/GMRefresh.git"
,
"tag"
:
"0.1.6"
},
"platforms"
:
{
"ios"
:
"8.0"
},
"dependencies"
:
{
"MJRefresh"
:
[
"~> 3.1.14"
],
"GMPhobos"
:
[
]
},
"source_files"
:
"GMRefresh/Classes/**/*"
,
"resource_bundles"
:
{
"GMRefresh"
:
[
"GMRefresh/Assets/*.png"
]
}
}
Example/Pods/MJRefresh/LICENSE
deleted
100644 → 0
View file @
e36f45c6
Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshAutoFooter.h
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshFooter.h"
@interface
MJRefreshAutoFooter
:
MJRefreshFooter
/** 是否自动刷新(默认为YES) */
@property
(
assign
,
nonatomic
,
getter
=
isAutomaticallyRefresh
)
BOOL
automaticallyRefresh
;
/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property
(
assign
,
nonatomic
)
CGFloat
appearencePercentTriggerAutoRefresh
MJRefreshDeprecated
(
"请使用triggerAutomaticallyRefreshPercent属性"
);
/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property
(
assign
,
nonatomic
)
CGFloat
triggerAutomaticallyRefreshPercent
;
@end
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshAutoFooter.m
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshAutoFooter.h"
@interface
MJRefreshAutoFooter
()
@end
@implementation
MJRefreshAutoFooter
#pragma mark - 初始化
-
(
void
)
willMoveToSuperview
:(
UIView
*
)
newSuperview
{
[
super
willMoveToSuperview
:
newSuperview
];
if
(
newSuperview
)
{
// 新的父控件
if
(
self
.
hidden
==
NO
)
{
self
.
scrollView
.
mj_insetB
+=
self
.
mj_h
;
}
// 设置位置
self
.
mj_y
=
_scrollView
.
mj_contentH
;
}
else
{
// 被移除了
if
(
self
.
hidden
==
NO
)
{
self
.
scrollView
.
mj_insetB
-=
self
.
mj_h
;
}
}
}
#pragma mark - 过期方法
-
(
void
)
setAppearencePercentTriggerAutoRefresh
:(
CGFloat
)
appearencePercentTriggerAutoRefresh
{
self
.
triggerAutomaticallyRefreshPercent
=
appearencePercentTriggerAutoRefresh
;
}
-
(
CGFloat
)
appearencePercentTriggerAutoRefresh
{
return
self
.
triggerAutomaticallyRefreshPercent
;
}
#pragma mark - 实现父类的方法
-
(
void
)
prepare
{
[
super
prepare
];
// 默认底部控件100%出现时才会自动刷新
self
.
triggerAutomaticallyRefreshPercent
=
1
.
0
;
// 设置为默认状态
self
.
automaticallyRefresh
=
YES
;
}
-
(
void
)
scrollViewContentSizeDidChange
:
(
NSDictionary
*
)
change
{
[
super
scrollViewContentSizeDidChange
:
change
];
// 设置位置
self
.
mj_y
=
self
.
scrollView
.
mj_contentH
;
}
-
(
void
)
scrollViewContentOffsetDidChange
:
(
NSDictionary
*
)
change
{
[
super
scrollViewContentOffsetDidChange
:
change
];
if
(
self
.
state
!=
MJRefreshStateIdle
||
!
self
.
automaticallyRefresh
||
self
.
mj_y
==
0
)
return
;
if
(
_scrollView
.
mj_insetT
+
_scrollView
.
mj_contentH
>
_scrollView
.
mj_h
)
{
// 内容超过一个屏幕
// 这里的_scrollView.mj_contentH替换掉self.mj_y更为合理
if
(
_scrollView
.
mj_offsetY
>=
_scrollView
.
mj_contentH
-
_scrollView
.
mj_h
+
self
.
mj_h
*
self
.
triggerAutomaticallyRefreshPercent
+
_scrollView
.
mj_insetB
-
self
.
mj_h
)
{
// 防止手松开时连续调用
CGPoint
old
=
[
change
[
@"old"
]
CGPointValue
];
CGPoint
new
=
[
change
[
@"new"
]
CGPointValue
];
if
(
new
.
y
<=
old
.
y
)
return
;
// 当底部刷新控件完全出现时,才刷新
[
self
beginRefreshing
];
}
}
}
-
(
void
)
scrollViewPanStateDidChange
:
(
NSDictionary
*
)
change
{
[
super
scrollViewPanStateDidChange
:
change
];
if
(
self
.
state
!=
MJRefreshStateIdle
)
return
;
if
(
_scrollView
.
panGestureRecognizer
.
state
==
UIGestureRecognizerStateEnded
)
{
// 手松开
if
(
_scrollView
.
mj_insetT
+
_scrollView
.
mj_contentH
<=
_scrollView
.
mj_h
)
{
// 不够一个屏幕
if
(
_scrollView
.
mj_offsetY
>=
-
_scrollView
.
mj_insetT
)
{
// 向上拽
[
self
beginRefreshing
];
}
}
else
{
// 超出一个屏幕
if
(
_scrollView
.
mj_offsetY
>=
_scrollView
.
mj_contentH
+
_scrollView
.
mj_insetB
-
_scrollView
.
mj_h
)
{
[
self
beginRefreshing
];
}
}
}
}
-
(
void
)
setState
:
(
MJRefreshState
)
state
{
MJRefreshCheckState
if
(
state
==
MJRefreshStateRefreshing
)
{
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
();
}
}
}
}
-
(
void
)
setHidden
:
(
BOOL
)
hidden
{
BOOL
lastHidden
=
self
.
isHidden
;
[
super
setHidden
:
hidden
];
if
(
!
lastHidden
&&
hidden
)
{
self
.
state
=
MJRefreshStateIdle
;
self
.
scrollView
.
mj_insetB
-=
self
.
mj_h
;
}
else
if
(
lastHidden
&&
!
hidden
)
{
self
.
scrollView
.
mj_insetB
+=
self
.
mj_h
;
// 设置位置
self
.
mj_y
=
_scrollView
.
mj_contentH
;
}
}
@end
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshBackFooter.h
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshFooter.h"
@interface
MJRefreshBackFooter
:
MJRefreshFooter
@end
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshBackFooter.m
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshBackFooter.h"
@interface
MJRefreshBackFooter
()
@property
(
assign
,
nonatomic
)
NSInteger
lastRefreshCount
;
@property
(
assign
,
nonatomic
)
CGFloat
lastBottomDelta
;
@end
@implementation
MJRefreshBackFooter
#pragma mark - 初始化
-
(
void
)
willMoveToSuperview
:(
UIView
*
)
newSuperview
{
[
super
willMoveToSuperview
:
newSuperview
];
[
self
scrollViewContentSizeDidChange
:
nil
];
}
#pragma mark - 实现父类的方法
-
(
void
)
scrollViewContentOffsetDidChange
:(
NSDictionary
*
)
change
{
[
super
scrollViewContentOffsetDidChange
:
change
];
// 如果正在刷新,直接返回
if
(
self
.
state
==
MJRefreshStateRefreshing
)
return
;
_scrollViewOriginalInset
=
self
.
scrollView
.
mj_inset
;
// 当前的contentOffset
CGFloat
currentOffsetY
=
self
.
scrollView
.
mj_offsetY
;
// 尾部控件刚好出现的offsetY
CGFloat
happenOffsetY
=
[
self
happenOffsetY
];
// 如果是向下滚动到看不见尾部控件,直接返回
if
(
currentOffsetY
<=
happenOffsetY
)
return
;
CGFloat
pullingPercent
=
(
currentOffsetY
-
happenOffsetY
)
/
self
.
mj_h
;
// 如果已全部加载,仅设置pullingPercent,然后返回
if
(
self
.
state
==
MJRefreshStateNoMoreData
)
{
self
.
pullingPercent
=
pullingPercent
;
return
;
}
if
(
self
.
scrollView
.
isDragging
)
{
self
.
pullingPercent
=
pullingPercent
;
// 普通 和 即将刷新 的临界点
CGFloat
normal2pullingOffsetY
=
happenOffsetY
+
self
.
mj_h
;
if
(
self
.
state
==
MJRefreshStateIdle
&&
currentOffsetY
>
normal2pullingOffsetY
)
{
// 转为即将刷新状态
self
.
state
=
MJRefreshStatePulling
;
}
else
if
(
self
.
state
==
MJRefreshStatePulling
&&
currentOffsetY
<=
normal2pullingOffsetY
)
{
// 转为普通状态
self
.
state
=
MJRefreshStateIdle
;
}
}
else
if
(
self
.
state
==
MJRefreshStatePulling
)
{
// 即将刷新 && 手松开
// 开始刷新
[
self
beginRefreshing
];
}
else
if
(
pullingPercent
<
1
)
{
self
.
pullingPercent
=
pullingPercent
;
}
}
-
(
void
)
scrollViewContentSizeDidChange
:(
NSDictionary
*
)
change
{
[
super
scrollViewContentSizeDidChange
:
change
];
// 内容的高度
CGFloat
contentHeight
=
self
.
scrollView
.
mj_contentH
+
self
.
ignoredScrollViewContentInsetBottom
;
// 表格的高度
CGFloat
scrollHeight
=
self
.
scrollView
.
mj_h
-
self
.
scrollViewOriginalInset
.
top
-
self
.
scrollViewOriginalInset
.
bottom
+
self
.
ignoredScrollViewContentInsetBottom
;
// 设置位置和尺寸
self
.
mj_y
=
MAX
(
contentHeight
,
scrollHeight
);
}
-
(
void
)
setState
:(
MJRefreshState
)
state
{
MJRefreshCheckState
// 根据状态来设置属性
if
(
state
==
MJRefreshStateNoMoreData
||
state
==
MJRefreshStateIdle
)
{
// 刷新完毕
if
(
MJRefreshStateRefreshing
==
oldState
)
{
[
UIView
animateWithDuration
:
MJRefreshSlowAnimationDuration
animations
:
^
{
self
.
scrollView
.
mj_insetB
-=
self
.
lastBottomDelta
;
// 自动调整透明度
if
(
self
.
isAutomaticallyChangeAlpha
)
self
.
alpha
=
0
.
0
;
}
completion
:^
(
BOOL
finished
)
{
self
.
pullingPercent
=
0
.
0
;
if
(
self
.
endRefreshingCompletionBlock
)
{
self
.
endRefreshingCompletionBlock
();
}
}];
}
CGFloat
deltaH
=
[
self
heightForContentBreakView
];
// 刚刷新完毕
if
(
MJRefreshStateRefreshing
==
oldState
&&
deltaH
>
0
&&
self
.
scrollView
.
mj_totalDataCount
!=
self
.
lastRefreshCount
)
{
self
.
scrollView
.
mj_offsetY
=
self
.
scrollView
.
mj_offsetY
;
}
}
else
if
(
state
==
MJRefreshStateRefreshing
)
{
// 记录刷新前的数量
self
.
lastRefreshCount
=
self
.
scrollView
.
mj_totalDataCount
;
[
UIView
animateWithDuration
:
MJRefreshFastAnimationDuration
animations
:
^
{
CGFloat
bottom
=
self
.
mj_h
+
self
.
scrollViewOriginalInset
.
bottom
;
CGFloat
deltaH
=
[
self
heightForContentBreakView
];
if
(
deltaH
<
0
)
{
// 如果内容高度小于view的高度
bottom
-=
deltaH
;
}
self
.
lastBottomDelta
=
bottom
-
self
.
scrollView
.
mj_insetB
;
self
.
scrollView
.
mj_insetB
=
bottom
;
self
.
scrollView
.
mj_offsetY
=
[
self
happenOffsetY
]
+
self
.
mj_h
;
}
completion
:^
(
BOOL
finished
)
{
[
self
executeRefreshingCallback
];
}];
}
}
-
(
void
)
endRefreshing
{
dispatch_async
(
dispatch_get_main_queue
(),
^
{
self
.
state
=
MJRefreshStateIdle
;
});
}
-
(
void
)
endRefreshingWithNoMoreData
{
dispatch_async
(
dispatch_get_main_queue
(),
^
{
self
.
state
=
MJRefreshStateNoMoreData
;
});
}
#pragma mark - 私有方法
#pragma mark 获得scrollView的内容 超出 view 的高度
-
(
CGFloat
)
heightForContentBreakView
{
CGFloat
h
=
self
.
scrollView
.
frame
.
size
.
height
-
self
.
scrollViewOriginalInset
.
bottom
-
self
.
scrollViewOriginalInset
.
top
;
return
self
.
scrollView
.
contentSize
.
height
-
h
;
}
#pragma mark 刚好看到上拉刷新控件时的contentOffset.y
-
(
CGFloat
)
happenOffsetY
{
CGFloat
deltaH
=
[
self
heightForContentBreakView
];
if
(
deltaH
>
0
)
{
return
deltaH
-
self
.
scrollViewOriginalInset
.
top
;
}
else
{
return
-
self
.
scrollViewOriginalInset
.
top
;
}
}
@end
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshComponent.h
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
// MJRefreshComponent.h
// MJRefreshExample
//
// Created by MJ Lee on 15/3/4.
// Copyright (c) 2015年 小码哥. All rights reserved.
// 刷新控件的基类
#import <UIKit/UIKit.h>
#import "MJRefreshConst.h"
#import "UIView+MJExtension.h"
#import "UIScrollView+MJExtension.h"
#import "UIScrollView+MJRefresh.h"
#import "NSBundle+MJRefresh.h"
/** 刷新控件的状态 */
typedef
NS_ENUM
(
NSInteger
,
MJRefreshState
)
{
/** 普通闲置状态 */
MJRefreshStateIdle
=
1
,
/** 松开就可以进行刷新的状态 */
MJRefreshStatePulling
,
/** 正在刷新中的状态 */
MJRefreshStateRefreshing
,
/** 即将刷新的状态 */
MJRefreshStateWillRefresh
,
/** 所有数据加载完毕,没有更多的数据了 */
MJRefreshStateNoMoreData
};
/** 进入刷新状态的回调 */
typedef
void
(
^
MJRefreshComponentRefreshingBlock
)(
void
);
/** 开始刷新后的回调(进入刷新状态后的回调) */
typedef
void
(
^
MJRefreshComponentbeginRefreshingCompletionBlock
)(
void
);
/** 结束刷新后的回调 */
typedef
void
(
^
MJRefreshComponentEndRefreshingCompletionBlock
)(
void
);
/** 刷新控件的基类 */
@interface
MJRefreshComponent
:
UIView
{
/** 记录scrollView刚开始的inset */
UIEdgeInsets
_scrollViewOriginalInset
;
/** 父控件 */
__weak
UIScrollView
*
_scrollView
;
}
#pragma mark - 刷新回调
/** 正在刷新的回调 */
@property
(
copy
,
nonatomic
)
MJRefreshComponentRefreshingBlock
refreshingBlock
;
/** 设置回调对象和回调方法 */
-
(
void
)
setRefreshingTarget
:(
id
)
target
refreshingAction
:(
SEL
)
action
;
/** 回调对象 */
@property
(
weak
,
nonatomic
)
id
refreshingTarget
;
/** 回调方法 */
@property
(
assign
,
nonatomic
)
SEL
refreshingAction
;
/** 触发回调(交给子类去调用) */
-
(
void
)
executeRefreshingCallback
;
#pragma mark - 刷新状态控制
/** 进入刷新状态 */
-
(
void
)
beginRefreshing
;
-
(
void
)
beginRefreshingWithCompletionBlock
:(
void
(
^
)(
void
))
completionBlock
;
/** 开始刷新后的回调(进入刷新状态后的回调) */
@property
(
copy
,
nonatomic
)
MJRefreshComponentbeginRefreshingCompletionBlock
beginRefreshingCompletionBlock
;
/** 结束刷新的回调 */
@property
(
copy
,
nonatomic
)
MJRefreshComponentEndRefreshingCompletionBlock
endRefreshingCompletionBlock
;
/** 结束刷新状态 */
-
(
void
)
endRefreshing
;
-
(
void
)
endRefreshingWithCompletionBlock
:(
void
(
^
)(
void
))
completionBlock
;
/** 是否正在刷新 */
@property
(
assign
,
nonatomic
,
readonly
,
getter
=
isRefreshing
)
BOOL
refreshing
;
//- (BOOL)isRefreshing;
/** 刷新状态 一般交给子类内部实现 */
@property
(
assign
,
nonatomic
)
MJRefreshState
state
;
#pragma mark - 交给子类去访问
/** 记录scrollView刚开始的inset */
@property
(
assign
,
nonatomic
,
readonly
)
UIEdgeInsets
scrollViewOriginalInset
;
/** 父控件 */
@property
(
weak
,
nonatomic
,
readonly
)
UIScrollView
*
scrollView
;
#pragma mark - 交给子类们去实现
/** 初始化 */
-
(
void
)
prepare
NS_REQUIRES_SUPER
;
/** 摆放子控件frame */
-
(
void
)
placeSubviews
NS_REQUIRES_SUPER
;
/** 当scrollView的contentOffset发生改变的时候调用 */
-
(
void
)
scrollViewContentOffsetDidChange
:(
NSDictionary
*
)
change
NS_REQUIRES_SUPER
;
/** 当scrollView的contentSize发生改变的时候调用 */
-
(
void
)
scrollViewContentSizeDidChange
:(
NSDictionary
*
)
change
NS_REQUIRES_SUPER
;
/** 当scrollView的拖拽状态发生改变的时候调用 */
-
(
void
)
scrollViewPanStateDidChange
:(
NSDictionary
*
)
change
NS_REQUIRES_SUPER
;
#pragma mark - 其他
/** 拉拽的百分比(交给子类重写) */
@property
(
assign
,
nonatomic
)
CGFloat
pullingPercent
;
/** 根据拖拽比例自动切换透明度 */
@property
(
assign
,
nonatomic
,
getter
=
isAutoChangeAlpha
)
BOOL
autoChangeAlpha
MJRefreshDeprecated
(
"请使用automaticallyChangeAlpha属性"
);
/** 根据拖拽比例自动切换透明度 */
@property
(
assign
,
nonatomic
,
getter
=
isAutomaticallyChangeAlpha
)
BOOL
automaticallyChangeAlpha
;
@end
@interface
UILabel
(
MJRefresh
)
+
(
instancetype
)
mj_label
;
-
(
CGFloat
)
mj_textWith
;
@end
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshComponent.m
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
// MJRefreshComponent.m
// MJRefreshExample
//
// Created by MJ Lee on 15/3/4.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshComponent.h"
#import "MJRefreshConst.h"
@interface
MJRefreshComponent
()
@property
(
strong
,
nonatomic
)
UIPanGestureRecognizer
*
pan
;
@end
@implementation
MJRefreshComponent
#pragma mark - 初始化
-
(
instancetype
)
initWithFrame
:(
CGRect
)
frame
{
if
(
self
=
[
super
initWithFrame
:
frame
])
{
// 准备工作
[
self
prepare
];
// 默认是普通状态
self
.
state
=
MJRefreshStateIdle
;
}
return
self
;
}
-
(
void
)
prepare
{
// 基本属性
self
.
autoresizingMask
=
UIViewAutoresizingFlexibleWidth
;
self
.
backgroundColor
=
[
UIColor
clearColor
];
}
-
(
void
)
layoutSubviews
{
[
self
placeSubviews
];
[
super
layoutSubviews
];
}
-
(
void
)
placeSubviews
{}
-
(
void
)
willMoveToSuperview
:
(
UIView
*
)
newSuperview
{
[
super
willMoveToSuperview
:
newSuperview
];
// 如果不是UIScrollView,不做任何事情
if
(
newSuperview
&&
!
[
newSuperview
isKindOfClass
:[
UIScrollView
class
]])
return
;
// 旧的父控件移除监听
[
self
removeObservers
];
if
(
newSuperview
)
{
// 新的父控件
// 设置宽度
self
.
mj_w
=
newSuperview
.
mj_w
;
// 设置位置
self
.
mj_x
=
0
;
// 记录UIScrollView
_scrollView
=
(
UIScrollView
*
)
newSuperview
;
// 设置永远支持垂直弹簧效果
_scrollView
.
alwaysBounceVertical
=
YES
;
// 记录UIScrollView最开始的contentInset
_scrollViewOriginalInset
=
_scrollView
.
mj_inset
;
// 添加监听
[
self
addObservers
];
}
}
-
(
void
)
drawRect
:
(
CGRect
)
rect
{
[
super
drawRect
:
rect
];
if
(
self
.
state
==
MJRefreshStateWillRefresh
)
{
// 预防view还没显示出来就调用了beginRefreshing
self
.
state
=
MJRefreshStateRefreshing
;
}
}
#pragma mark - KVO监听
-
(
void
)
addObservers
{
NSKeyValueObservingOptions
options
=
NSKeyValueObservingOptionNew
|
NSKeyValueObservingOptionOld
;
[
self
.
scrollView
addObserver
:
self
forKeyPath
:
MJRefreshKeyPathContentOffset
options
:
options
context
:
nil
];
[
self
.
scrollView
addObserver
:
self
forKeyPath
:
MJRefreshKeyPathContentSize
options
:
options
context
:
nil
];
self
.
pan
=
self
.
scrollView
.
panGestureRecognizer
;
[
self
.
pan
addObserver
:
self
forKeyPath
:
MJRefreshKeyPathPanState
options
:
options
context
:
nil
];
}
-
(
void
)
removeObservers
{
[
self
.
superview
removeObserver
:
self
forKeyPath
:
MJRefreshKeyPathContentOffset
];
[
self
.
superview
removeObserver
:
self
forKeyPath
:
MJRefreshKeyPathContentSize
];
[
self
.
pan
removeObserver
:
self
forKeyPath
:
MJRefreshKeyPathPanState
];
self
.
pan
=
nil
;
}
-
(
void
)
observeValueForKeyPath
:
(
NSString
*
)
keyPath
ofObject
:
(
id
)
object
change
:
(
NSDictionary
*
)
change
context
:
(
void
*
)
context
{
// 遇到这些情况就直接返回
if
(
!
self
.
userInteractionEnabled
)
return
;
// 这个就算看不见也需要处理
if
([
keyPath
isEqualToString
:
MJRefreshKeyPathContentSize
])
{
[
self
scrollViewContentSizeDidChange
:
change
];
}
// 看不见
if
(
self
.
hidden
)
return
;
if
([
keyPath
isEqualToString
:
MJRefreshKeyPathContentOffset
])
{
[
self
scrollViewContentOffsetDidChange
:
change
];
}
else
if
([
keyPath
isEqualToString
:
MJRefreshKeyPathPanState
])
{
[
self
scrollViewPanStateDidChange
:
change
];
}
}
-
(
void
)
scrollViewContentOffsetDidChange
:
(
NSDictionary
*
)
change
{}
-
(
void
)
scrollViewContentSizeDidChange
:
(
NSDictionary
*
)
change
{}
-
(
void
)
scrollViewPanStateDidChange
:
(
NSDictionary
*
)
change
{}
#pragma mark - 公共方法
#pragma mark 设置回调对象和回调方法
-
(
void
)
setRefreshingTarget
:
(
id
)
target
refreshingAction
:
(
SEL
)
action
{
self
.
refreshingTarget
=
target
;
self
.
refreshingAction
=
action
;
}
-
(
void
)
setState
:
(
MJRefreshState
)
state
{
_state
=
state
;
// 加入主队列的目的是等setState:方法调用完毕、设置完文字后再去布局子控件
dispatch_async
(
dispatch_get_main_queue
(),
^
{
[
self
setNeedsLayout
];
});
}
#pragma mark 进入刷新状态
-
(
void
)
beginRefreshing
{
[
UIView
animateWithDuration
:
MJRefreshFastAnimationDuration
animations
:
^
{
self
.
alpha
=
1
.
0
;
}];
self
.
pullingPercent
=
1
.
0
;
// 只要正在刷新,就完全显示
if
(
self
.
window
)
{
self
.
state
=
MJRefreshStateRefreshing
;
}
else
{
// 预防正在刷新中时,调用本方法使得header inset回置失败
if
(
self
.
state
!=
MJRefreshStateRefreshing
)
{
self
.
state
=
MJRefreshStateWillRefresh
;
// 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下)
[
self
setNeedsDisplay
];
}
}
}
-
(
void
)
beginRefreshingWithCompletionBlock
:
(
void
(
^
)(
void
))
completionBlock
{
self
.
beginRefreshingCompletionBlock
=
completionBlock
;
[
self
beginRefreshing
];
}
#pragma mark 结束刷新状态
-
(
void
)
endRefreshing
{
self
.
state
=
MJRefreshStateIdle
;
}
-
(
void
)
endRefreshingWithCompletionBlock
:
(
void
(
^
)(
void
))
completionBlock
{
self
.
endRefreshingCompletionBlock
=
completionBlock
;
[
self
endRefreshing
];
}
#pragma mark 是否正在刷新
-
(
BOOL
)
isRefreshing
{
return
self
.
state
==
MJRefreshStateRefreshing
||
self
.
state
==
MJRefreshStateWillRefresh
;
}
#pragma mark 自动切换透明度
-
(
void
)
setAutoChangeAlpha
:
(
BOOL
)
autoChangeAlpha
{
self
.
automaticallyChangeAlpha
=
autoChangeAlpha
;
}
-
(
BOOL
)
isAutoChangeAlpha
{
return
self
.
isAutomaticallyChangeAlpha
;
}
-
(
void
)
setAutomaticallyChangeAlpha
:
(
BOOL
)
automaticallyChangeAlpha
{
_automaticallyChangeAlpha
=
automaticallyChangeAlpha
;
if
(
self
.
isRefreshing
)
return
;
if
(
automaticallyChangeAlpha
)
{
self
.
alpha
=
self
.
pullingPercent
;
}
else
{
self
.
alpha
=
1
.
0
;
}
}
#pragma mark 根据拖拽进度设置透明度
-
(
void
)
setPullingPercent
:
(
CGFloat
)
pullingPercent
{
_pullingPercent
=
pullingPercent
;
if
(
self
.
isRefreshing
)
return
;
if
(
self
.
isAutomaticallyChangeAlpha
)
{
self
.
alpha
=
pullingPercent
;
}
}
#pragma mark - 内部方法
-
(
void
)
executeRefreshingCallback
{
dispatch_async
(
dispatch_get_main_queue
(),
^
{
if
(
self
.
refreshingBlock
)
{
self
.
refreshingBlock
();
}
if
([
self
.
refreshingTarget
respondsToSelector
:
self
.
refreshingAction
])
{
MJRefreshMsgSend
(
MJRefreshMsgTarget
(
self
.
refreshingTarget
),
self
.
refreshingAction
,
self
);
}
if
(
self
.
beginRefreshingCompletionBlock
)
{
self
.
beginRefreshingCompletionBlock
();
}
});
}
@end
@implementation
UILabel
(
MJRefresh
)
+
(
instancetype
)
mj_label
{
UILabel
*
label
=
[[
self
alloc
]
init
];
label
.
font
=
MJRefreshLabelFont
;
label
.
textColor
=
MJRefreshLabelTextColor
;
label
.
autoresizingMask
=
UIViewAutoresizingFlexibleWidth
;
label
.
textAlignment
=
NSTextAlignmentCenter
;
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
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.h
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
// MJRefreshFooter.h
// MJRefreshExample
//
// Created by MJ Lee on 15/3/5.
// Copyright (c) 2015年 小码哥. All rights reserved.
// 上拉刷新控件
#import "MJRefreshComponent.h"
@interface
MJRefreshFooter
:
MJRefreshComponent
/** 创建footer */
+
(
instancetype
)
footerWithRefreshingBlock
:(
MJRefreshComponentRefreshingBlock
)
refreshingBlock
;
/** 创建footer */
+
(
instancetype
)
footerWithRefreshingTarget
:(
id
)
target
refreshingAction
:(
SEL
)
action
;
/** 提示没有更多的数据 */
-
(
void
)
endRefreshingWithNoMoreData
;
-
(
void
)
noticeNoMoreData
MJRefreshDeprecated
(
"使用endRefreshingWithNoMoreData"
);
/** 重置没有更多的数据(消除没有更多数据的状态) */
-
(
void
)
resetNoMoreData
;
/** 忽略多少scrollView的contentInset的bottom */
@property
(
assign
,
nonatomic
)
CGFloat
ignoredScrollViewContentInsetBottom
;
/** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏。默认是NO) */
@property
(
assign
,
nonatomic
,
getter
=
isAutomaticallyHidden
)
BOOL
automaticallyHidden
;
@end
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.m
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
// MJRefreshFooter.m
// MJRefreshExample
//
// Created by MJ Lee on 15/3/5.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshFooter.h"
@interface
MJRefreshFooter
()
@end
@implementation
MJRefreshFooter
#pragma mark - 构造方法
+
(
instancetype
)
footerWithRefreshingBlock
:(
MJRefreshComponentRefreshingBlock
)
refreshingBlock
{
MJRefreshFooter
*
cmp
=
[[
self
alloc
]
init
];
cmp
.
refreshingBlock
=
refreshingBlock
;
return
cmp
;
}
+
(
instancetype
)
footerWithRefreshingTarget
:(
id
)
target
refreshingAction
:(
SEL
)
action
{
MJRefreshFooter
*
cmp
=
[[
self
alloc
]
init
];
[
cmp
setRefreshingTarget
:
target
refreshingAction
:
action
];
return
cmp
;
}
#pragma mark - 重写父类的方法
-
(
void
)
prepare
{
[
super
prepare
];
// 设置自己的高度
self
.
mj_h
=
MJRefreshFooterHeight
;
// 默认不会自动隐藏
self
.
automaticallyHidden
=
NO
;
}
-
(
void
)
willMoveToSuperview
:
(
UIView
*
)
newSuperview
{
[
super
willMoveToSuperview
:
newSuperview
];
if
(
newSuperview
)
{
// 监听scrollView数据的变化
if
([
self
.
scrollView
isKindOfClass
:[
UITableView
class
]]
||
[
self
.
scrollView
isKindOfClass
:[
UICollectionView
class
]])
{
[
self
.
scrollView
setMj_reloadDataBlock
:
^
(
NSInteger
totalDataCount
)
{
if
(
self
.
isAutomaticallyHidden
)
{
self
.
hidden
=
(
totalDataCount
==
0
);
}
}];
}
}
}
#pragma mark - 公共方法
-
(
void
)
endRefreshingWithNoMoreData
{
self
.
state
=
MJRefreshStateNoMoreData
;
}
-
(
void
)
noticeNoMoreData
{
[
self
endRefreshingWithNoMoreData
];
}
-
(
void
)
resetNoMoreData
{
self
.
state
=
MJRefreshStateIdle
;
}
@end
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.h
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
// MJRefreshHeader.h
// MJRefreshExample
//
// Created by MJ Lee on 15/3/4.
// Copyright (c) 2015年 小码哥. All rights reserved.
// 下拉刷新控件:负责监控用户下拉的状态
#import "MJRefreshComponent.h"
@interface
MJRefreshHeader
:
MJRefreshComponent
/** 创建header */
+
(
instancetype
)
headerWithRefreshingBlock
:(
MJRefreshComponentRefreshingBlock
)
refreshingBlock
;
/** 创建header */
+
(
instancetype
)
headerWithRefreshingTarget
:(
id
)
target
refreshingAction
:(
SEL
)
action
;
/** 这个key用来存储上一次下拉刷新成功的时间 */
@property
(
copy
,
nonatomic
)
NSString
*
lastUpdatedTimeKey
;
/** 上一次下拉刷新成功的时间 */
@property
(
strong
,
nonatomic
,
readonly
)
NSDate
*
lastUpdatedTime
;
/** 忽略多少scrollView的contentInset的top */
@property
(
assign
,
nonatomic
)
CGFloat
ignoredScrollViewContentInsetTop
;
@end
Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.m
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
// MJRefreshHeader.m
// MJRefreshExample
//
// Created by MJ Lee on 15/3/4.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshHeader.h"
@interface
MJRefreshHeader
()
@property
(
assign
,
nonatomic
)
CGFloat
insetTDelta
;
@end
@implementation
MJRefreshHeader
#pragma mark - 构造方法
+
(
instancetype
)
headerWithRefreshingBlock
:(
MJRefreshComponentRefreshingBlock
)
refreshingBlock
{
MJRefreshHeader
*
cmp
=
[[
self
alloc
]
init
];
cmp
.
refreshingBlock
=
refreshingBlock
;
return
cmp
;
}
+
(
instancetype
)
headerWithRefreshingTarget
:(
id
)
target
refreshingAction
:(
SEL
)
action
{
MJRefreshHeader
*
cmp
=
[[
self
alloc
]
init
];
[
cmp
setRefreshingTarget
:
target
refreshingAction
:
action
];
return
cmp
;
}
#pragma mark - 覆盖父类的方法
-
(
void
)
prepare
{
[
super
prepare
];
// 设置key
self
.
lastUpdatedTimeKey
=
MJRefreshHeaderLastUpdatedTimeKey
;
// 设置高度
self
.
mj_h
=
MJRefreshHeaderHeight
;
}
-
(
void
)
placeSubviews
{
[
super
placeSubviews
];
// 设置y值(当自己的高度发生改变了,肯定要重新调整Y值,所以放到placeSubviews方法中设置y值)
self
.
mj_y
=
-
self
.
mj_h
-
self
.
ignoredScrollViewContentInsetTop
;
}
-
(
void
)
scrollViewContentOffsetDidChange
:
(
NSDictionary
*
)
change
{
[
super
scrollViewContentOffsetDidChange
:
change
];
// 在刷新的refreshing状态
if
(
self
.
state
==
MJRefreshStateRefreshing
)
{
if
(
self
.
window
==
nil
)
return
;
// sectionheader停留解决
CGFloat
insetT
=
-
self
.
scrollView
.
mj_offsetY
>
_scrollViewOriginalInset
.
top
?
-
self
.
scrollView
.
mj_offsetY
:
_scrollViewOriginalInset
.
top
;
insetT
=
insetT
>
self
.
mj_h
+
_scrollViewOriginalInset
.
top
?
self
.
mj_h
+
_scrollViewOriginalInset
.
top
:
insetT
;
self
.
scrollView
.
mj_insetT
=
insetT
;
self
.
insetTDelta
=
_scrollViewOriginalInset
.
top
-
insetT
;
return
;
}
// 跳转到下一个控制器时,contentInset可能会变
_scrollViewOriginalInset
=
self
.
scrollView
.
mj_inset
;
// 当前的contentOffset
CGFloat
offsetY
=
self
.
scrollView
.
mj_offsetY
;
// 头部控件刚好出现的offsetY
CGFloat
happenOffsetY
=
-
self
.
scrollViewOriginalInset
.
top
;
// 如果是向上滚动到看不见头部控件,直接返回
// >= -> >
if
(
offsetY
>
happenOffsetY
)
return
;
// 普通 和 即将刷新 的临界点
CGFloat
normal2pullingOffsetY
=
happenOffsetY
-
self
.
mj_h
;
CGFloat
pullingPercent
=
(
happenOffsetY
-
offsetY
)
/
self
.
mj_h
;
if
(
self
.
scrollView
.
isDragging
)
{
// 如果正在拖拽
self
.
pullingPercent
=
pullingPercent
;
if
(
self
.
state
==
MJRefreshStateIdle
&&
offsetY
<
normal2pullingOffsetY
)
{
// 转为即将刷新状态
self
.
state
=
MJRefreshStatePulling
;
}
else
if
(
self
.
state
==
MJRefreshStatePulling
&&
offsetY
>=
normal2pullingOffsetY
)
{
// 转为普通状态
self
.
state
=
MJRefreshStateIdle
;
}
}
else
if
(
self
.
state
==
MJRefreshStatePulling
)
{
// 即将刷新 && 手松开
// 开始刷新
[
self
beginRefreshing
];
}
else
if
(
pullingPercent
<
1
)
{
self
.
pullingPercent
=
pullingPercent
;
}
}
-
(
void
)
setState
:
(
MJRefreshState
)
state
{
MJRefreshCheckState
// 根据状态做事情
if
(
state
==
MJRefreshStateIdle
)
{
if
(
oldState
!=
MJRefreshStateRefreshing
)
return
;
// 保存刷新时间
[[
NSUserDefaults
standardUserDefaults
]
setObject
:[
NSDate
date
]
forKey
:
self
.
lastUpdatedTimeKey
];
[[
NSUserDefaults
standardUserDefaults
]
synchronize
];
// 恢复inset和offset
[
UIView
animateWithDuration
:
MJRefreshSlowAnimationDuration
animations
:
^
{
self
.
scrollView
.
mj_insetT
+=
self
.
insetTDelta
;
// 自动调整透明度
if
(
self
.
isAutomaticallyChangeAlpha
)
self
.
alpha
=
0
.
0
;
}
completion
:^
(
BOOL
finished
)
{
self
.
pullingPercent
=
0
.
0
;
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
];
}];
});
}
}
#pragma mark - 公共方法
-
(
void
)
endRefreshing
{
dispatch_async
(
dispatch_get_main_queue
(),
^
{
self
.
state
=
MJRefreshStateIdle
;
});
}
-
(
NSDate
*
)
lastUpdatedTime
{
return
[[
NSUserDefaults
standardUserDefaults
]
objectForKey
:
self
.
lastUpdatedTimeKey
];
}
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshAutoGifFooter.h
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshAutoStateFooter.h"
@interface
MJRefreshAutoGifFooter
:
MJRefreshAutoStateFooter
@property
(
weak
,
nonatomic
,
readonly
)
UIImageView
*
gifView
;
/** 设置state状态下的动画图片images 动画持续时间duration*/
-
(
void
)
setImages
:(
NSArray
*
)
images
duration
:(
NSTimeInterval
)
duration
forState
:(
MJRefreshState
)
state
;
-
(
void
)
setImages
:(
NSArray
*
)
images
forState
:(
MJRefreshState
)
state
;
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshAutoGifFooter.m
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshAutoGifFooter.h"
@interface
MJRefreshAutoGifFooter
()
{
__unsafe_unretained
UIImageView
*
_gifView
;
}
/** 所有状态对应的动画图片 */
@property
(
strong
,
nonatomic
)
NSMutableDictionary
*
stateImages
;
/** 所有状态对应的动画时间 */
@property
(
strong
,
nonatomic
)
NSMutableDictionary
*
stateDurations
;
@end
@implementation
MJRefreshAutoGifFooter
#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
)
placeSubviews
{
[
super
placeSubviews
];
if
(
self
.
gifView
.
constraints
.
count
)
return
;
self
.
gifView
.
frame
=
self
.
bounds
;
if
(
self
.
isRefreshingTitleHidden
)
{
self
.
gifView
.
contentMode
=
UIViewContentModeCenter
;
}
else
{
self
.
gifView
.
contentMode
=
UIViewContentModeRight
;
self
.
gifView
.
mj_w
=
self
.
mj_w
*
0
.
5
-
self
.
labelLeftInset
-
self
.
stateLabel
.
mj_textWith
*
0
.
5
;
}
}
-
(
void
)
setState
:
(
MJRefreshState
)
state
{
MJRefreshCheckState
// 根据状态做事情
if
(
state
==
MJRefreshStateRefreshing
)
{
NSArray
*
images
=
self
.
stateImages
[
@
(
state
)];
if
(
images
.
count
==
0
)
return
;
[
self
.
gifView
stopAnimating
];
self
.
gifView
.
hidden
=
NO
;
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
==
MJRefreshStateNoMoreData
||
state
==
MJRefreshStateIdle
)
{
[
self
.
gifView
stopAnimating
];
self
.
gifView
.
hidden
=
YES
;
}
}
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshAutoNormalFooter.h
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshAutoStateFooter.h"
@interface
MJRefreshAutoNormalFooter
:
MJRefreshAutoStateFooter
/** 菊花的样式 */
@property
(
assign
,
nonatomic
)
UIActivityIndicatorViewStyle
activityIndicatorViewStyle
;
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshAutoNormalFooter.m
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshAutoNormalFooter.h"
@interface
MJRefreshAutoNormalFooter
()
@property
(
weak
,
nonatomic
)
UIActivityIndicatorView
*
loadingView
;
@end
@implementation
MJRefreshAutoNormalFooter
#pragma mark - 懒加载子控件
-
(
UIActivityIndicatorView
*
)
loadingView
{
if
(
!
_loadingView
)
{
UIActivityIndicatorView
*
loadingView
=
[[
UIActivityIndicatorView
alloc
]
initWithActivityIndicatorStyle
:
self
.
activityIndicatorViewStyle
];
loadingView
.
hidesWhenStopped
=
YES
;
[
self
addSubview
:
_loadingView
=
loadingView
];
}
return
_loadingView
;
}
-
(
void
)
setActivityIndicatorViewStyle
:
(
UIActivityIndicatorViewStyle
)
activityIndicatorViewStyle
{
_activityIndicatorViewStyle
=
activityIndicatorViewStyle
;
self
.
loadingView
=
nil
;
[
self
setNeedsLayout
];
}
#pragma mark - 重写父类的方法
-
(
void
)
prepare
{
[
super
prepare
];
self
.
activityIndicatorViewStyle
=
UIActivityIndicatorViewStyleGray
;
}
-
(
void
)
placeSubviews
{
[
super
placeSubviews
];
if
(
self
.
loadingView
.
constraints
.
count
)
return
;
// 圈圈
CGFloat
loadingCenterX
=
self
.
mj_w
*
0
.
5
;
if
(
!
self
.
isRefreshingTitleHidden
)
{
loadingCenterX
-=
self
.
stateLabel
.
mj_textWith
*
0
.
5
+
self
.
labelLeftInset
;
}
CGFloat
loadingCenterY
=
self
.
mj_h
*
0
.
5
;
self
.
loadingView
.
center
=
CGPointMake
(
loadingCenterX
,
loadingCenterY
);
}
-
(
void
)
setState
:
(
MJRefreshState
)
state
{
MJRefreshCheckState
// 根据状态做事情
if
(
state
==
MJRefreshStateNoMoreData
||
state
==
MJRefreshStateIdle
)
{
[
self
.
loadingView
stopAnimating
];
}
else
if
(
state
==
MJRefreshStateRefreshing
)
{
[
self
.
loadingView
startAnimating
];
}
}
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshAutoStateFooter.h
// MJRefreshExample
//
// Created by MJ Lee on 15/6/13.
// Copyright © 2015年 小码哥. All rights reserved.
//
#import "MJRefreshAutoFooter.h"
@interface
MJRefreshAutoStateFooter
:
MJRefreshAutoFooter
/** 文字距离圈圈、箭头的距离 */
@property
(
assign
,
nonatomic
)
CGFloat
labelLeftInset
;
/** 显示刷新状态的label */
@property
(
weak
,
nonatomic
,
readonly
)
UILabel
*
stateLabel
;
/** 设置state状态下的文字 */
-
(
void
)
setTitle
:(
NSString
*
)
title
forState
:(
MJRefreshState
)
state
;
/** 隐藏刷新状态的文字 */
@property
(
assign
,
nonatomic
,
getter
=
isRefreshingTitleHidden
)
BOOL
refreshingTitleHidden
;
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshAutoStateFooter.m
// MJRefreshExample
//
// Created by MJ Lee on 15/6/13.
// Copyright © 2015年 小码哥. All rights reserved.
//
#import "MJRefreshAutoStateFooter.h"
@interface
MJRefreshAutoStateFooter
()
{
/** 显示刷新状态的label */
__unsafe_unretained
UILabel
*
_stateLabel
;
}
/** 所有状态对应的文字 */
@property
(
strong
,
nonatomic
)
NSMutableDictionary
*
stateTitles
;
@end
@implementation
MJRefreshAutoStateFooter
#pragma mark - 懒加载
-
(
NSMutableDictionary
*
)
stateTitles
{
if
(
!
_stateTitles
)
{
self
.
stateTitles
=
[
NSMutableDictionary
dictionary
];
}
return
_stateTitles
;
}
-
(
UILabel
*
)
stateLabel
{
if
(
!
_stateLabel
)
{
[
self
addSubview
:
_stateLabel
=
[
UILabel
mj_label
]];
}
return
_stateLabel
;
}
#pragma mark - 公共方法
-
(
void
)
setTitle
:
(
NSString
*
)
title
forState
:
(
MJRefreshState
)
state
{
if
(
title
==
nil
)
return
;
self
.
stateTitles
[
@
(
state
)]
=
title
;
self
.
stateLabel
.
text
=
self
.
stateTitles
[
@
(
self
.
state
)];
}
#pragma mark - 私有方法
-
(
void
)
stateLabelClick
{
if
(
self
.
state
==
MJRefreshStateIdle
)
{
[
self
beginRefreshing
];
}
}
#pragma mark - 重写父类的方法
-
(
void
)
prepare
{
[
super
prepare
];
// 初始化间距
self
.
labelLeftInset
=
MJRefreshLabelLeftInset
;
// 初始化文字
[
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
;
[
self
.
stateLabel
addGestureRecognizer
:[[
UITapGestureRecognizer
alloc
]
initWithTarget
:
self
action
:
@selector
(
stateLabelClick
)]];
}
-
(
void
)
placeSubviews
{
[
super
placeSubviews
];
if
(
self
.
stateLabel
.
constraints
.
count
)
return
;
// 状态标签
self
.
stateLabel
.
frame
=
self
.
bounds
;
}
-
(
void
)
setState
:
(
MJRefreshState
)
state
{
MJRefreshCheckState
if
(
self
.
isRefreshingTitleHidden
&&
state
==
MJRefreshStateRefreshing
)
{
self
.
stateLabel
.
text
=
nil
;
}
else
{
self
.
stateLabel
.
text
=
self
.
stateTitles
[
@
(
state
)];
}
}
@end
\ No newline at end of file
Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshBackGifFooter.h
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshBackStateFooter.h"
@interface
MJRefreshBackGifFooter
:
MJRefreshBackStateFooter
@property
(
weak
,
nonatomic
,
readonly
)
UIImageView
*
gifView
;
/** 设置state状态下的动画图片images 动画持续时间duration*/
-
(
void
)
setImages
:(
NSArray
*
)
images
duration
:(
NSTimeInterval
)
duration
forState
:(
MJRefreshState
)
state
;
-
(
void
)
setImages
:(
NSArray
*
)
images
forState
:(
MJRefreshState
)
state
;
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshBackGifFooter.m
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshBackGifFooter.h"
@interface
MJRefreshBackGifFooter
()
{
__unsafe_unretained
UIImageView
*
_gifView
;
}
/** 所有状态对应的动画图片 */
@property
(
strong
,
nonatomic
)
NSMutableDictionary
*
stateImages
;
/** 所有状态对应的动画时间 */
@property
(
strong
,
nonatomic
)
NSMutableDictionary
*
stateDurations
;
@end
@implementation
MJRefreshBackGifFooter
#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
.
gifView
.
contentMode
=
UIViewContentModeCenter
;
}
else
{
self
.
gifView
.
contentMode
=
UIViewContentModeRight
;
self
.
gifView
.
mj_w
=
self
.
mj_w
*
0
.
5
-
self
.
labelLeftInset
-
self
.
stateLabel
.
mj_textWith
*
0
.
5
;
}
}
-
(
void
)
setState
:
(
MJRefreshState
)
state
{
MJRefreshCheckState
// 根据状态做事情
if
(
state
==
MJRefreshStatePulling
||
state
==
MJRefreshStateRefreshing
)
{
NSArray
*
images
=
self
.
stateImages
[
@
(
state
)];
if
(
images
.
count
==
0
)
return
;
self
.
gifView
.
hidden
=
NO
;
[
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
.
hidden
=
NO
;
}
else
if
(
state
==
MJRefreshStateNoMoreData
)
{
self
.
gifView
.
hidden
=
YES
;
}
}
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshBackNormalFooter.h
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshBackStateFooter.h"
@interface
MJRefreshBackNormalFooter
:
MJRefreshBackStateFooter
@property
(
weak
,
nonatomic
,
readonly
)
UIImageView
*
arrowView
;
/** 菊花的样式 */
@property
(
assign
,
nonatomic
)
UIActivityIndicatorViewStyle
activityIndicatorViewStyle
;
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshBackNormalFooter.m
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshBackNormalFooter.h"
#import "NSBundle+MJRefresh.h"
@interface
MJRefreshBackNormalFooter
()
{
__unsafe_unretained
UIImageView
*
_arrowView
;
}
@property
(
weak
,
nonatomic
)
UIActivityIndicatorView
*
loadingView
;
@end
@implementation
MJRefreshBackNormalFooter
#pragma mark - 懒加载子控件
-
(
UIImageView
*
)
arrowView
{
if
(
!
_arrowView
)
{
UIImageView
*
arrowView
=
[[
UIImageView
alloc
]
initWithImage
:[
NSBundle
mj_arrowImage
]];
[
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
;
}
-
(
void
)
setActivityIndicatorViewStyle
:
(
UIActivityIndicatorViewStyle
)
activityIndicatorViewStyle
{
_activityIndicatorViewStyle
=
activityIndicatorViewStyle
;
self
.
loadingView
=
nil
;
[
self
setNeedsLayout
];
}
#pragma mark - 重写父类的方法
-
(
void
)
prepare
{
[
super
prepare
];
self
.
activityIndicatorViewStyle
=
UIActivityIndicatorViewStyleGray
;
}
-
(
void
)
placeSubviews
{
[
super
placeSubviews
];
// 箭头的中心点
CGFloat
arrowCenterX
=
self
.
mj_w
*
0
.
5
;
if
(
!
self
.
stateLabel
.
hidden
)
{
arrowCenterX
-=
self
.
labelLeftInset
+
self
.
stateLabel
.
mj_textWith
*
0
.
5
;
}
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
;
}
self
.
arrowView
.
tintColor
=
self
.
stateLabel
.
textColor
;
}
-
(
void
)
setState
:
(
MJRefreshState
)
state
{
MJRefreshCheckState
// 根据状态做事情
if
(
state
==
MJRefreshStateIdle
)
{
if
(
oldState
==
MJRefreshStateRefreshing
)
{
self
.
arrowView
.
transform
=
CGAffineTransformMakeRotation
(
0
.
000001
-
M_PI
);
[
UIView
animateWithDuration
:
MJRefreshSlowAnimationDuration
animations
:
^
{
self
.
loadingView
.
alpha
=
0
.
0
;
}
completion
:^
(
BOOL
finished
)
{
self
.
loadingView
.
alpha
=
1
.
0
;
[
self
.
loadingView
stopAnimating
];
self
.
arrowView
.
hidden
=
NO
;
}];
}
else
{
self
.
arrowView
.
hidden
=
NO
;
[
self
.
loadingView
stopAnimating
];
[
UIView
animateWithDuration
:
MJRefreshFastAnimationDuration
animations
:
^
{
self
.
arrowView
.
transform
=
CGAffineTransformMakeRotation
(
0
.
000001
-
M_PI
);
}];
}
}
else
if
(
state
==
MJRefreshStatePulling
)
{
self
.
arrowView
.
hidden
=
NO
;
[
self
.
loadingView
stopAnimating
];
[
UIView
animateWithDuration
:
MJRefreshFastAnimationDuration
animations
:
^
{
self
.
arrowView
.
transform
=
CGAffineTransformIdentity
;
}];
}
else
if
(
state
==
MJRefreshStateRefreshing
)
{
self
.
arrowView
.
hidden
=
YES
;
[
self
.
loadingView
startAnimating
];
}
else
if
(
state
==
MJRefreshStateNoMoreData
)
{
self
.
arrowView
.
hidden
=
YES
;
[
self
.
loadingView
stopAnimating
];
}
}
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshBackStateFooter.h
// MJRefreshExample
//
// Created by MJ Lee on 15/6/13.
// Copyright © 2015年 小码哥. All rights reserved.
//
#import "MJRefreshBackFooter.h"
@interface
MJRefreshBackStateFooter
:
MJRefreshBackFooter
/** 文字距离圈圈、箭头的距离 */
@property
(
assign
,
nonatomic
)
CGFloat
labelLeftInset
;
/** 显示刷新状态的label */
@property
(
weak
,
nonatomic
,
readonly
)
UILabel
*
stateLabel
;
/** 设置state状态下的文字 */
-
(
void
)
setTitle
:(
NSString
*
)
title
forState
:(
MJRefreshState
)
state
;
/** 获取state状态下的title */
-
(
NSString
*
)
titleForState
:(
MJRefreshState
)
state
;
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshBackStateFooter.m
// MJRefreshExample
//
// Created by MJ Lee on 15/6/13.
// Copyright © 2015年 小码哥. All rights reserved.
//
#import "MJRefreshBackStateFooter.h"
@interface
MJRefreshBackStateFooter
()
{
/** 显示刷新状态的label */
__unsafe_unretained
UILabel
*
_stateLabel
;
}
/** 所有状态对应的文字 */
@property
(
strong
,
nonatomic
)
NSMutableDictionary
*
stateTitles
;
@end
@implementation
MJRefreshBackStateFooter
#pragma mark - 懒加载
-
(
NSMutableDictionary
*
)
stateTitles
{
if
(
!
_stateTitles
)
{
self
.
stateTitles
=
[
NSMutableDictionary
dictionary
];
}
return
_stateTitles
;
}
-
(
UILabel
*
)
stateLabel
{
if
(
!
_stateLabel
)
{
[
self
addSubview
:
_stateLabel
=
[
UILabel
mj_label
]];
}
return
_stateLabel
;
}
#pragma mark - 公共方法
-
(
void
)
setTitle
:
(
NSString
*
)
title
forState
:
(
MJRefreshState
)
state
{
if
(
title
==
nil
)
return
;
self
.
stateTitles
[
@
(
state
)]
=
title
;
self
.
stateLabel
.
text
=
self
.
stateTitles
[
@
(
self
.
state
)];
}
-
(
NSString
*
)
titleForState
:
(
MJRefreshState
)
state
{
return
self
.
stateTitles
[
@
(
state
)];
}
#pragma mark - 重写父类的方法
-
(
void
)
prepare
{
[
super
prepare
];
// 初始化间距
self
.
labelLeftInset
=
MJRefreshLabelLeftInset
;
// 初始化文字
[
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
{
[
super
placeSubviews
];
if
(
self
.
stateLabel
.
constraints
.
count
)
return
;
// 状态标签
self
.
stateLabel
.
frame
=
self
.
bounds
;
}
-
(
void
)
setState
:
(
MJRefreshState
)
state
{
MJRefreshCheckState
// 设置状态文字
self
.
stateLabel
.
text
=
self
.
stateTitles
[
@
(
state
)];
}
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshGifHeader.h
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshStateHeader.h"
@interface
MJRefreshGifHeader
:
MJRefreshStateHeader
@property
(
weak
,
nonatomic
,
readonly
)
UIImageView
*
gifView
;
/** 设置state状态下的动画图片images 动画持续时间duration*/
-
(
void
)
setImages
:(
NSArray
*
)
images
duration
:(
NSTimeInterval
)
duration
forState
:(
MJRefreshState
)
state
;
-
(
void
)
setImages
:(
NSArray
*
)
images
forState
:(
MJRefreshState
)
state
;
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m
deleted
100644 → 0
View file @
e36f45c6
//
// 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
Example/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshNormalHeader.h
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshStateHeader.h"
@interface
MJRefreshNormalHeader
:
MJRefreshStateHeader
@property
(
weak
,
nonatomic
,
readonly
)
UIImageView
*
arrowView
;
/** 菊花的样式 */
@property
(
assign
,
nonatomic
)
UIActivityIndicatorViewStyle
activityIndicatorViewStyle
;
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshNormalHeader.m
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshNormalHeader.h"
#import "NSBundle+MJRefresh.h"
@interface
MJRefreshNormalHeader
()
{
__unsafe_unretained
UIImageView
*
_arrowView
;
}
@property
(
weak
,
nonatomic
)
UIActivityIndicatorView
*
loadingView
;
@end
@implementation
MJRefreshNormalHeader
#pragma mark - 懒加载子控件
-
(
UIImageView
*
)
arrowView
{
if
(
!
_arrowView
)
{
UIImageView
*
arrowView
=
[[
UIImageView
alloc
]
initWithImage
:[
NSBundle
mj_arrowImage
]];
[
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 mark - 重写父类的方法
-
(
void
)
prepare
{
[
super
prepare
];
self
.
activityIndicatorViewStyle
=
UIActivityIndicatorViewStyleGray
;
}
-
(
void
)
placeSubviews
{
[
super
placeSubviews
];
// 箭头的中心点
CGFloat
arrowCenterX
=
self
.
mj_w
*
0
.
5
;
if
(
!
self
.
stateLabel
.
hidden
)
{
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
);
// 箭头
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
;
}
self
.
arrowView
.
tintColor
=
self
.
stateLabel
.
textColor
;
}
-
(
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
Example/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshStateHeader.h
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshHeader.h"
@interface
MJRefreshStateHeader
:
MJRefreshHeader
#pragma mark - 刷新时间相关
/** 利用这个block来决定显示的更新时间文字 */
@property
(
copy
,
nonatomic
)
NSString
*
(
^
lastUpdatedTimeText
)(
NSDate
*
lastUpdatedTime
);
/** 显示上一次刷新时间的label */
@property
(
weak
,
nonatomic
,
readonly
)
UILabel
*
lastUpdatedTimeLabel
;
#pragma mark - 状态相关
/** 文字距离圈圈、箭头的距离 */
@property
(
assign
,
nonatomic
)
CGFloat
labelLeftInset
;
/** 显示刷新状态的label */
@property
(
weak
,
nonatomic
,
readonly
)
UILabel
*
stateLabel
;
/** 设置state状态下的文字 */
-
(
void
)
setTitle
:(
NSString
*
)
title
forState
:(
MJRefreshState
)
state
;
@end
Example/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m
deleted
100644 → 0
View file @
e36f45c6
//
// MJRefreshStateHeader.m
// MJRefreshExample
//
// Created by MJ Lee on 15/4/24.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshStateHeader.h"
@interface
MJRefreshStateHeader
()
{
/** 显示上一次刷新时间的label */
__unsafe_unretained
UILabel
*
_lastUpdatedTimeLabel
;
/** 显示刷新状态的label */
__unsafe_unretained
UILabel
*
_stateLabel
;
}
/** 所有状态对应的文字 */
@property
(
strong
,
nonatomic
)
NSMutableDictionary
*
stateTitles
;
@end
@implementation
MJRefreshStateHeader
#pragma mark - 懒加载
-
(
NSMutableDictionary
*
)
stateTitles
{
if
(
!
_stateTitles
)
{
self
.
stateTitles
=
[
NSMutableDictionary
dictionary
];
}
return
_stateTitles
;
}
-
(
UILabel
*
)
stateLabel
{
if
(
!
_stateLabel
)
{
[
self
addSubview
:
_stateLabel
=
[
UILabel
mj_label
]];
}
return
_stateLabel
;
}
-
(
UILabel
*
)
lastUpdatedTimeLabel
{
if
(
!
_lastUpdatedTimeLabel
)
{
[
self
addSubview
:
_lastUpdatedTimeLabel
=
[
UILabel
mj_label
]];
}
return
_lastUpdatedTimeLabel
;
}
#pragma mark - 公共方法
-
(
void
)
setTitle
:
(
NSString
*
)
title
forState
:
(
MJRefreshState
)
state
{
if
(
title
==
nil
)
return
;
self
.
stateTitles
[
@
(
state
)]
=
title
;
self
.
stateLabel
.
text
=
self
.
stateTitles
[
@
(
self
.
state
)];
}
#pragma mark - 日历获取在9.x之后的系统使用currentCalendar会出异常。在8.0之后使用系统新API。
-
(
NSCalendar
*
)
currentCalendar
{
if
([
NSCalendar
respondsToSelector
:
@selector
(
calendarWithIdentifier
:)])
{
return
[
NSCalendar
calendarWithIdentifier
:
NSCalendarIdentifierGregorian
];
}
return
[
NSCalendar
currentCalendar
];
}
#pragma mark key的处理
-
(
void
)
setLastUpdatedTimeKey
:
(
NSString
*
)
lastUpdatedTimeKey
{
[
super
setLastUpdatedTimeKey
:
lastUpdatedTimeKey
];
// 如果label隐藏了,就不用再处理
if
(
self
.
lastUpdatedTimeLabel
.
hidden
)
return
;
NSDate
*
lastUpdatedTime
=
[[
NSUserDefaults
standardUserDefaults
]
objectForKey
:
lastUpdatedTimeKey
];
// 如果有block
if
(
self
.
lastUpdatedTimeText
)
{
self
.
lastUpdatedTimeLabel
.
text
=
self
.
lastUpdatedTimeText
(
lastUpdatedTime
);
return
;
}
if
(
lastUpdatedTime
)
{
// 1.获得年月日
NSCalendar
*
calendar
=
[
self
currentCalendar
];
NSUInteger
unitFlags
=
NSCalendarUnitYear
|
NSCalendarUnitMonth
|
NSCalendarUnitDay
|
NSCalendarUnitHour
|
NSCalendarUnitMinute
;
NSDateComponents
*
cmp1
=
[
calendar
components
:
unitFlags
fromDate
:
lastUpdatedTime
];
NSDateComponents
*
cmp2
=
[
calendar
components
:
unitFlags
fromDate
:[
NSDate
date
]];
// 2.格式化日期
NSDateFormatter
*
formatter
=
[[
NSDateFormatter
alloc
]
init
];
BOOL
isToday
=
NO
;
if
([
cmp1
day
]
==
[
cmp2
day
])
{
// 今天
formatter
.
dateFormat
=
@" HH:mm"
;
isToday
=
YES
;
}
else
if
([
cmp1
year
]
==
[
cmp2
year
])
{
// 今年
formatter
.
dateFormat
=
@"MM-dd HH:mm"
;
}
else
{
formatter
.
dateFormat
=
@"yyyy-MM-dd HH:mm"
;
}
NSString
*
time
=
[
formatter
stringFromDate
:
lastUpdatedTime
];
// 3.显示日期
self
.
lastUpdatedTimeLabel
.
text
=
[
NSString
stringWithFormat
:
@"%@%@%@"
,
[
NSBundle
mj_localizedStringForKey
:
MJRefreshHeaderLastTimeText
],
isToday
?
[
NSBundle
mj_localizedStringForKey
:
MJRefreshHeaderDateTodayText
]
:
@""
,
time
];
}
else
{
self
.
lastUpdatedTimeLabel
.
text
=
[
NSString
stringWithFormat
:
@"%@%@"
,
[
NSBundle
mj_localizedStringForKey
:
MJRefreshHeaderLastTimeText
],
[
NSBundle
mj_localizedStringForKey
:
MJRefreshHeaderNoneLastDateText
]];
}
}
#pragma mark - 覆盖父类的方法
-
(
void
)
prepare
{
[
super
prepare
];
// 初始化间距
self
.
labelLeftInset
=
MJRefreshLabelLeftInset
;
// 初始化文字
[
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
{
[
super
placeSubviews
];
if
(
self
.
stateLabel
.
hidden
)
return
;
BOOL
noConstrainsOnStatusLabel
=
self
.
stateLabel
.
constraints
.
count
==
0
;
if
(
self
.
lastUpdatedTimeLabel
.
hidden
)
{
// 状态
if
(
noConstrainsOnStatusLabel
)
self
.
stateLabel
.
frame
=
self
.
bounds
;
}
else
{
CGFloat
stateLabelH
=
self
.
mj_h
*
0
.
5
;
// 状态
if
(
noConstrainsOnStatusLabel
)
{
self
.
stateLabel
.
mj_x
=
0
;
self
.
stateLabel
.
mj_y
=
0
;
self
.
stateLabel
.
mj_w
=
self
.
mj_w
;
self
.
stateLabel
.
mj_h
=
stateLabelH
;
}
// 更新时间
if
(
self
.
lastUpdatedTimeLabel
.
constraints
.
count
==
0
)
{
self
.
lastUpdatedTimeLabel
.
mj_x
=
0
;
self
.
lastUpdatedTimeLabel
.
mj_y
=
stateLabelH
;
self
.
lastUpdatedTimeLabel
.
mj_w
=
self
.
mj_w
;
self
.
lastUpdatedTimeLabel
.
mj_h
=
self
.
mj_h
-
self
.
lastUpdatedTimeLabel
.
mj_y
;
}
}
}
-
(
void
)
setState
:
(
MJRefreshState
)
state
{
MJRefreshCheckState
// 设置状态文字
self
.
stateLabel
.
text
=
self
.
stateTitles
[
@
(
state
)];
// 重新设置key(重新显示时间)
self
.
lastUpdatedTimeKey
=
self
.
lastUpdatedTimeKey
;
}
@end
Example/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png
deleted
100755 → 0
View file @
e36f45c6
1.01 KB
Example/Pods/MJRefresh/MJRefresh/MJRefresh.h
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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 "UIScrollView+MJRefresh.h"
#import "UIScrollView+MJExtension.h"
#import "UIView+MJExtension.h"
#import "MJRefreshNormalHeader.h"
#import "MJRefreshGifHeader.h"
#import "MJRefreshBackNormalFooter.h"
#import "MJRefreshBackGifFooter.h"
#import "MJRefreshAutoNormalFooter.h"
#import "MJRefreshAutoGifFooter.h"
\ No newline at end of file
Example/Pods/MJRefresh/MJRefresh/MJRefreshConst.h
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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>
#import <objc/message.h>
// 弱引用
#define MJWeakSelf __weak typeof(self) weakSelf = self;
// 日志输出
#ifdef DEBUG
#define MJRefreshLog(...) NSLog(__VA_ARGS__)
#else
#define MJRefreshLog(...)
#endif
// 过期提醒
#define MJRefreshDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead)
// 运行时objc_msgSend
#define MJRefreshMsgSend(...) ((void (*)(void *, SEL, UIView *))objc_msgSend)(__VA_ARGS__)
#define MJRefreshMsgTarget(target) (__bridge void *)(target)
// RGB颜色
#define MJRefreshColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
// 文字颜色
#define MJRefreshLabelTextColor MJRefreshColor(90, 90, 90)
// 字体大小
#define MJRefreshLabelFont [UIFont boldSystemFontOfSize:14]
// 常量
UIKIT_EXTERN
const
CGFloat
MJRefreshLabelLeftInset
;
UIKIT_EXTERN
const
CGFloat
MJRefreshHeaderHeight
;
UIKIT_EXTERN
const
CGFloat
MJRefreshFooterHeight
;
UIKIT_EXTERN
const
CGFloat
MJRefreshFastAnimationDuration
;
UIKIT_EXTERN
const
CGFloat
MJRefreshSlowAnimationDuration
;
UIKIT_EXTERN
NSString
*
const
MJRefreshKeyPathContentOffset
;
UIKIT_EXTERN
NSString
*
const
MJRefreshKeyPathContentSize
;
UIKIT_EXTERN
NSString
*
const
MJRefreshKeyPathContentInset
;
UIKIT_EXTERN
NSString
*
const
MJRefreshKeyPathPanState
;
UIKIT_EXTERN
NSString
*
const
MJRefreshHeaderLastUpdatedTimeKey
;
UIKIT_EXTERN
NSString
*
const
MJRefreshHeaderIdleText
;
UIKIT_EXTERN
NSString
*
const
MJRefreshHeaderPullingText
;
UIKIT_EXTERN
NSString
*
const
MJRefreshHeaderRefreshingText
;
UIKIT_EXTERN
NSString
*
const
MJRefreshAutoFooterIdleText
;
UIKIT_EXTERN
NSString
*
const
MJRefreshAutoFooterRefreshingText
;
UIKIT_EXTERN
NSString
*
const
MJRefreshAutoFooterNoMoreDataText
;
UIKIT_EXTERN
NSString
*
const
MJRefreshBackFooterIdleText
;
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; \
if (state == oldState) return; \
[super setState:state];
Example/Pods/MJRefresh/MJRefresh/MJRefreshConst.m
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
;
const
CGFloat
MJRefreshSlowAnimationDuration
=
0
.
4
;
NSString
*
const
MJRefreshKeyPathContentOffset
=
@"contentOffset"
;
NSString
*
const
MJRefreshKeyPathContentInset
=
@"contentInset"
;
NSString
*
const
MJRefreshKeyPathContentSize
=
@"contentSize"
;
NSString
*
const
MJRefreshKeyPathPanState
=
@"state"
;
NSString
*
const
MJRefreshHeaderLastUpdatedTimeKey
=
@"MJRefreshHeaderLastUpdatedTimeKey"
;
NSString
*
const
MJRefreshHeaderIdleText
=
@"MJRefreshHeaderIdleText"
;
NSString
*
const
MJRefreshHeaderPullingText
=
@"MJRefreshHeaderPullingText"
;
NSString
*
const
MJRefreshHeaderRefreshingText
=
@"MJRefreshHeaderRefreshingText"
;
NSString
*
const
MJRefreshAutoFooterIdleText
=
@"MJRefreshAutoFooterIdleText"
;
NSString
*
const
MJRefreshAutoFooterRefreshingText
=
@"MJRefreshAutoFooterRefreshingText"
;
NSString
*
const
MJRefreshAutoFooterNoMoreDataText
=
@"MJRefreshAutoFooterNoMoreDataText"
;
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
Example/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.h
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
// UIScrollView+Extension.h
// MJRefreshExample
//
// Created by MJ Lee on 14-5-28.
// Copyright (c) 2014年 小码哥. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface
UIScrollView
(
MJExtension
)
@property
(
readonly
,
nonatomic
)
UIEdgeInsets
mj_inset
;
@property
(
assign
,
nonatomic
)
CGFloat
mj_insetT
;
@property
(
assign
,
nonatomic
)
CGFloat
mj_insetB
;
@property
(
assign
,
nonatomic
)
CGFloat
mj_insetL
;
@property
(
assign
,
nonatomic
)
CGFloat
mj_insetR
;
@property
(
assign
,
nonatomic
)
CGFloat
mj_offsetX
;
@property
(
assign
,
nonatomic
)
CGFloat
mj_offsetY
;
@property
(
assign
,
nonatomic
)
CGFloat
mj_contentW
;
@property
(
assign
,
nonatomic
)
CGFloat
mj_contentH
;
@end
Example/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.m
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
// UIScrollView+Extension.m
// MJRefreshExample
//
// Created by MJ Lee on 14-5-28.
// Copyright (c) 2014年 小码哥. All rights reserved.
//
#import "UIScrollView+MJExtension.h"
#import <objc/runtime.h>
#define SYSTEM_VERSION_GREATER_NOT_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability-new"
@implementation
UIScrollView
(
MJExtension
)
-
(
UIEdgeInsets
)
mj_inset
{
#ifdef __IPHONE_11_0
if
(
SYSTEM_VERSION_GREATER_NOT_LESS_THAN
(
@"11.0"
))
{
return
self
.
adjustedContentInset
;
}
#endif
return
self
.
contentInset
;
}
-
(
void
)
setMj_insetT
:
(
CGFloat
)
mj_insetT
{
UIEdgeInsets
inset
=
self
.
contentInset
;
inset
.
top
=
mj_insetT
;
#ifdef __IPHONE_11_0
if
(
SYSTEM_VERSION_GREATER_NOT_LESS_THAN
(
@"11.0"
))
{
inset
.
top
-=
(
self
.
adjustedContentInset
.
top
-
self
.
contentInset
.
top
);
}
#endif
self
.
contentInset
=
inset
;
}
-
(
CGFloat
)
mj_insetT
{
return
self
.
mj_inset
.
top
;
}
-
(
void
)
setMj_insetB
:
(
CGFloat
)
mj_insetB
{
UIEdgeInsets
inset
=
self
.
contentInset
;
inset
.
bottom
=
mj_insetB
;
#ifdef __IPHONE_11_0
if
(
SYSTEM_VERSION_GREATER_NOT_LESS_THAN
(
@"11.0"
))
{
inset
.
bottom
-=
(
self
.
adjustedContentInset
.
bottom
-
self
.
contentInset
.
bottom
);
}
#endif
self
.
contentInset
=
inset
;
}
-
(
CGFloat
)
mj_insetB
{
return
self
.
mj_inset
.
bottom
;
}
-
(
void
)
setMj_insetL
:
(
CGFloat
)
mj_insetL
{
UIEdgeInsets
inset
=
self
.
contentInset
;
inset
.
left
=
mj_insetL
;
#ifdef __IPHONE_11_0
if
(
SYSTEM_VERSION_GREATER_NOT_LESS_THAN
(
@"11.0"
))
{
inset
.
left
-=
(
self
.
adjustedContentInset
.
left
-
self
.
contentInset
.
left
);
}
#endif
self
.
contentInset
=
inset
;
}
-
(
CGFloat
)
mj_insetL
{
return
self
.
contentInset
.
left
;
}
-
(
void
)
setMj_insetR
:
(
CGFloat
)
mj_insetR
{
UIEdgeInsets
inset
=
self
.
contentInset
;
inset
.
right
=
mj_insetR
;
#ifdef __IPHONE_11_0
if
(
SYSTEM_VERSION_GREATER_NOT_LESS_THAN
(
@"11.0"
))
{
inset
.
right
-=
(
self
.
adjustedContentInset
.
right
-
self
.
contentInset
.
right
);
}
#endif
self
.
contentInset
=
inset
;
}
-
(
CGFloat
)
mj_insetR
{
return
self
.
contentInset
.
right
;
}
-
(
void
)
setMj_offsetX
:
(
CGFloat
)
mj_offsetX
{
CGPoint
offset
=
self
.
contentOffset
;
offset
.
x
=
mj_offsetX
;
self
.
contentOffset
=
offset
;
}
-
(
CGFloat
)
mj_offsetX
{
return
self
.
contentOffset
.
x
;
}
-
(
void
)
setMj_offsetY
:
(
CGFloat
)
mj_offsetY
{
CGPoint
offset
=
self
.
contentOffset
;
offset
.
y
=
mj_offsetY
;
self
.
contentOffset
=
offset
;
}
-
(
CGFloat
)
mj_offsetY
{
return
self
.
contentOffset
.
y
;
}
-
(
void
)
setMj_contentW
:
(
CGFloat
)
mj_contentW
{
CGSize
size
=
self
.
contentSize
;
size
.
width
=
mj_contentW
;
self
.
contentSize
=
size
;
}
-
(
CGFloat
)
mj_contentW
{
return
self
.
contentSize
.
width
;
}
-
(
void
)
setMj_contentH
:
(
CGFloat
)
mj_contentH
{
CGSize
size
=
self
.
contentSize
;
size
.
height
=
mj_contentH
;
self
.
contentSize
=
size
;
}
-
(
CGFloat
)
mj_contentH
{
return
self
.
contentSize
.
height
;
}
@end
#pragma clang diagnostic pop
Example/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
// UIScrollView+MJRefresh.h
// MJRefreshExample
//
// Created by MJ Lee on 15/3/4.
// Copyright (c) 2015年 小码哥. All rights reserved.
// 给ScrollView增加下拉刷新、上拉刷新的功能
#import <UIKit/UIKit.h>
#import "MJRefreshConst.h"
@class
MJRefreshHeader
,
MJRefreshFooter
;
@
interface
UIScrollView
(
MJRefresh
)
/** 下拉刷新控件 */
@property
(
strong
,
nonatomic
)
MJRefreshHeader
*
mj_header
;
@property
(
strong
,
nonatomic
)
MJRefreshHeader
*
header
MJRefreshDeprecated
(
"使用mj_header"
);
/** 上拉刷新控件 */
@property
(
strong
,
nonatomic
)
MJRefreshFooter
*
mj_footer
;
@property
(
strong
,
nonatomic
)
MJRefreshFooter
*
footer
MJRefreshDeprecated
(
"使用mj_footer"
);
#pragma mark - other
-
(
NSInteger
)
mj_totalDataCount
;
@property
(
copy
,
nonatomic
)
void
(
^
mj_reloadDataBlock
)(
NSInteger
totalDataCount
);
@end
Example/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
// UIScrollView+MJRefresh.m
// MJRefreshExample
//
// Created by MJ Lee on 15/3/4.
// Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "UIScrollView+MJRefresh.h"
#import "MJRefreshHeader.h"
#import "MJRefreshFooter.h"
#import <objc/runtime.h>
@implementation
NSObject
(
MJRefresh
)
+
(
void
)
exchangeInstanceMethod1
:(
SEL
)
method1
method2
:(
SEL
)
method2
{
method_exchangeImplementations
(
class_getInstanceMethod
(
self
,
method1
),
class_getInstanceMethod
(
self
,
method2
));
}
+
(
void
)
exchangeClassMethod1
:(
SEL
)
method1
method2
:(
SEL
)
method2
{
method_exchangeImplementations
(
class_getClassMethod
(
self
,
method1
),
class_getClassMethod
(
self
,
method2
));
}
@end
@implementation
UIScrollView
(
MJRefresh
)
#pragma mark - header
static
const
char
MJRefreshHeaderKey
=
'\0'
;
-
(
void
)
setMj_header
:(
MJRefreshHeader
*
)
mj_header
{
if
(
mj_header
!=
self
.
mj_header
)
{
// 删除旧的,添加新的
[
self
.
mj_header
removeFromSuperview
];
[
self
insertSubview
:
mj_header
atIndex
:
0
];
// 存储新的
[
self
willChangeValueForKey
:
@"mj_header"
];
// KVO
objc_setAssociatedObject
(
self
,
&
MJRefreshHeaderKey
,
mj_header
,
OBJC_ASSOCIATION_ASSIGN
);
[
self
didChangeValueForKey
:
@"mj_header"
];
// KVO
}
}
-
(
MJRefreshHeader
*
)
mj_header
{
return
objc_getAssociatedObject
(
self
,
&
MJRefreshHeaderKey
);
}
#pragma mark - footer
static
const
char
MJRefreshFooterKey
=
'\0'
;
-
(
void
)
setMj_footer
:(
MJRefreshFooter
*
)
mj_footer
{
if
(
mj_footer
!=
self
.
mj_footer
)
{
// 删除旧的,添加新的
[
self
.
mj_footer
removeFromSuperview
];
[
self
insertSubview
:
mj_footer
atIndex
:
0
];
// 存储新的
[
self
willChangeValueForKey
:
@"mj_footer"
];
// KVO
objc_setAssociatedObject
(
self
,
&
MJRefreshFooterKey
,
mj_footer
,
OBJC_ASSOCIATION_ASSIGN
);
[
self
didChangeValueForKey
:
@"mj_footer"
];
// KVO
}
}
-
(
MJRefreshFooter
*
)
mj_footer
{
return
objc_getAssociatedObject
(
self
,
&
MJRefreshFooterKey
);
}
#pragma mark - 过期
-
(
void
)
setFooter
:
(
MJRefreshFooter
*
)
footer
{
self
.
mj_footer
=
footer
;
}
-
(
MJRefreshFooter
*
)
footer
{
return
self
.
mj_footer
;
}
-
(
void
)
setHeader
:
(
MJRefreshHeader
*
)
header
{
self
.
mj_header
=
header
;
}
-
(
MJRefreshHeader
*
)
header
{
return
self
.
mj_header
;
}
#pragma mark - other
-
(
NSInteger
)
mj_totalDataCount
{
NSInteger
totalCount
=
0
;
if
([
self
isKindOfClass
:[
UITableView
class
]])
{
UITableView
*
tableView
=
(
UITableView
*
)
self
;
for
(
NSInteger
section
=
0
;
section
<
tableView
.
numberOfSections
;
section
++
)
{
totalCount
+=
[
tableView
numberOfRowsInSection
:
section
];
}
}
else
if
([
self
isKindOfClass
:[
UICollectionView
class
]])
{
UICollectionView
*
collectionView
=
(
UICollectionView
*
)
self
;
for
(
NSInteger
section
=
0
;
section
<
collectionView
.
numberOfSections
;
section
++
)
{
totalCount
+=
[
collectionView
numberOfItemsInSection
:
section
];
}
}
return
totalCount
;
}
static
const
char
MJRefreshReloadDataBlockKey
=
'\0'
;
-
(
void
)
setMj_reloadDataBlock
:(
void
(
^
)(
NSInteger
))
mj_reloadDataBlock
{
[
self
willChangeValueForKey
:
@"mj_reloadDataBlock"
];
// KVO
objc_setAssociatedObject
(
self
,
&
MJRefreshReloadDataBlockKey
,
mj_reloadDataBlock
,
OBJC_ASSOCIATION_COPY_NONATOMIC
);
[
self
didChangeValueForKey
:
@"mj_reloadDataBlock"
];
// KVO
}
-
(
void
(
^
)(
NSInteger
))
mj_reloadDataBlock
{
return
objc_getAssociatedObject
(
self
,
&
MJRefreshReloadDataBlockKey
);
}
-
(
void
)
executeReloadDataBlock
{
!
self
.
mj_reloadDataBlock
?
:
self
.
mj_reloadDataBlock
(
self
.
mj_totalDataCount
);
}
@end
@implementation
UITableView
(
MJRefresh
)
+
(
void
)
load
{
[
self
exchangeInstanceMethod1
:
@selector
(
reloadData
)
method2
:
@selector
(
mj_reloadData
)];
}
-
(
void
)
mj_reloadData
{
[
self
mj_reloadData
];
[
self
executeReloadDataBlock
];
}
@end
@implementation
UICollectionView
(
MJRefresh
)
+
(
void
)
load
{
[
self
exchangeInstanceMethod1
:
@selector
(
reloadData
)
method2
:
@selector
(
mj_reloadData
)];
}
-
(
void
)
mj_reloadData
{
[
self
mj_reloadData
];
[
self
executeReloadDataBlock
];
}
@end
Example/Pods/MJRefresh/MJRefresh/UIView+MJExtension.h
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
// UIView+Extension.h
// MJRefreshExample
//
// Created by MJ Lee on 14-5-28.
// Copyright (c) 2014年 小码哥. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface
UIView
(
MJExtension
)
@property
(
assign
,
nonatomic
)
CGFloat
mj_x
;
@property
(
assign
,
nonatomic
)
CGFloat
mj_y
;
@property
(
assign
,
nonatomic
)
CGFloat
mj_w
;
@property
(
assign
,
nonatomic
)
CGFloat
mj_h
;
@property
(
assign
,
nonatomic
)
CGSize
mj_size
;
@property
(
assign
,
nonatomic
)
CGPoint
mj_origin
;
@end
Example/Pods/MJRefresh/MJRefresh/UIView+MJExtension.m
deleted
100644 → 0
View file @
e36f45c6
// 代码地址: https://github.com/CoderMJLee/MJRefresh
// 代码地址: 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
// UIView+Extension.m
// MJRefreshExample
//
// Created by MJ Lee on 14-5-28.
// Copyright (c) 2014年 小码哥. All rights reserved.
//
#import "UIView+MJExtension.h"
@implementation
UIView
(
MJExtension
)
-
(
void
)
setMj_x
:(
CGFloat
)
mj_x
{
CGRect
frame
=
self
.
frame
;
frame
.
origin
.
x
=
mj_x
;
self
.
frame
=
frame
;
}
-
(
CGFloat
)
mj_x
{
return
self
.
frame
.
origin
.
x
;
}
-
(
void
)
setMj_y
:
(
CGFloat
)
mj_y
{
CGRect
frame
=
self
.
frame
;
frame
.
origin
.
y
=
mj_y
;
self
.
frame
=
frame
;
}
-
(
CGFloat
)
mj_y
{
return
self
.
frame
.
origin
.
y
;
}
-
(
void
)
setMj_w
:
(
CGFloat
)
mj_w
{
CGRect
frame
=
self
.
frame
;
frame
.
size
.
width
=
mj_w
;
self
.
frame
=
frame
;
}
-
(
CGFloat
)
mj_w
{
return
self
.
frame
.
size
.
width
;
}
-
(
void
)
setMj_h
:
(
CGFloat
)
mj_h
{
CGRect
frame
=
self
.
frame
;
frame
.
size
.
height
=
mj_h
;
self
.
frame
=
frame
;
}
-
(
CGFloat
)
mj_h
{
return
self
.
frame
.
size
.
height
;
}
-
(
void
)
setMj_size
:
(
CGSize
)
mj_size
{
CGRect
frame
=
self
.
frame
;
frame
.
size
=
mj_size
;
self
.
frame
=
frame
;
}
-
(
CGSize
)
mj_size
{
return
self
.
frame
.
size
;
}
-
(
void
)
setMj_origin
:
(
CGPoint
)
mj_origin
{
CGRect
frame
=
self
.
frame
;
frame
.
origin
=
mj_origin
;
self
.
frame
=
frame
;
}
-
(
CGPoint
)
mj_origin
{
return
self
.
frame
.
origin
;
}
@end
Example/Pods/MJRefresh/README.md
deleted
100644 → 0
View file @
e36f45c6
This diff is collapsed.
Click to expand it.
Example/Pods/Manifest.lock
deleted
100644 → 0
View file @
e36f45c6
PODS:
- GMCache (0.1.1):
- TMCache (~> 2.1.0)
- GMPhobos (0.3.7):
- GMCache (~> 0.1.1)
- GMRefresh (0.1.6):
- GMPhobos
- MJRefresh (~> 3.1.14)
- MJRefresh (3.1.14.1)
- TMCache (2.1.0)
DEPENDENCIES:
- GMRefresh (from `../`)
EXTERNAL SOURCES:
GMRefresh:
:path: ../
SPEC CHECKSUMS:
GMCache: 73855b613b9d7e34f4f37ad425e8b8153b760c04
GMPhobos: 78912659a3f3587d0c2ea4ca469032e7e88e9592
GMRefresh: dac465173bfb7e45f0b7dc5a4c195aed5daeeb91
MJRefresh: 238e6a37e2dba12160ee3b79f6d2a2b26abcab42
TMCache: 95ebcc9b3c7e90fb5fd8fc3036cba3aa781c9bed
PODFILE CHECKSUM: 6b447183006b1a0e6da7bc6db007dd5df4f4fe65
COCOAPODS: 1.3.1
Example/Pods/Pods.xcodeproj/project.pbxproj
deleted
100644 → 0
View file @
e36f45c6
This diff is collapsed.
Click to expand it.
Example/Pods/Target Support Files/GMRefresh/GMRefresh-dummy.m
deleted
100644 → 0
View file @
e36f45c6
#import <Foundation/Foundation.h>
@interface
PodsDummy_GMRefresh
:
NSObject
@end
@implementation
PodsDummy_GMRefresh
@end
Example/Pods/Target Support Files/GMRefresh/GMRefresh-prefix.pch
deleted
100644 → 0
View file @
e36f45c6
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#else
#ifndef FOUNDATION_EXPORT
#if defined(__cplusplus)
#define FOUNDATION_EXPORT extern "C"
#else
#define FOUNDATION_EXPORT extern
#endif
#endif
#endif
Example/Pods/Target Support Files/GMRefresh/GMRefresh-umbrella.h
deleted
100644 → 0
View file @
e36f45c6
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#else
#ifndef FOUNDATION_EXPORT
#if defined(__cplusplus)
#define FOUNDATION_EXPORT extern "C"
#else
#define FOUNDATION_EXPORT extern
#endif
#endif
#endif
#import "GMRefreshConstant.h"
#import "GMRefreshFooter.h"
#import "GMRefreshHeader.h"
#import "MJRefreshComponent+Private.h"
FOUNDATION_EXPORT
double
GMRefreshVersionNumber
;
FOUNDATION_EXPORT
const
unsigned
char
GMRefreshVersionString
[];
Example/Pods/Target Support Files/GMRefresh/GMRefresh.modulemap
deleted
100644 → 0
View file @
e36f45c6
framework module GMRefresh {
umbrella header "GMRefresh-umbrella.h"
export *
module * { export * }
}
Example/Pods/Target Support Files/GMRefresh/GMRefresh.xcconfig
deleted
100644 → 0
View file @
e36f45c6
CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/GMRefresh
FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/GMCache" "$PODS_CONFIGURATION_BUILD_DIR/GMPhobos" "$PODS_CONFIGURATION_BUILD_DIR/MJRefresh" "$PODS_CONFIGURATION_BUILD_DIR/TMCache"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
PODS_BUILD_DIR = $BUILD_DIR
PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/../..
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
Example/Pods/Target Support Files/GMRefresh/Info.plist
deleted
100644 → 0
View file @
e36f45c6
<
?xml
v
e
rsion="
1
.
0
"
e
n
c
o
d
ing="UT
F
-
8
"?
>
<
!
D
O
C
TYP
E
plist
PU
B
LI
C
"-//
A
ppl
e
//
D
T
D
PLIST
1
.
0
//
E
N"
"http://www.
a
ppl
e
.
c
om/
D
T
D
s/Prop
e
rtyList-
1
.
0
.
d
t
d
"
>
<
plist
v
e
rsion="
1
.
0
"
>
<
d
i
c
t
>
<
k
e
y
>
CFBundleDevelopmentRegion
<
/k
e
y
>
<
string
>
en
<
/string
>
<
k
e
y
>
CFBundleExecutable
<
/k
e
y
>
<
string
>
$
{
EXECUTABLE_NAME
}<
/string
>
<
k
e
y
>
CFBundleIdentifier
<
/k
e
y
>
<
string
>
$
{
PRODUCT_BUNDLE_IDENTIFIER
}<
/string
>
<
k
e
y
>
CFBundleInfoDictionaryVersion
<
/k
e
y
>
<
string
>
6.0
<
/string
>
<
k
e
y
>
CFBundleName
<
/k
e
y
>
<
string
>
$
{
PRODUCT_NAME
}<
/string
>
<
k
e
y
>
CFBundlePackageType
<
/k
e
y
>
<
string
>
FMWK
<
/string
>
<
k
e
y
>
CFBundleShortVersionString
<
/k
e
y
>
<
string
>
0.1.6
<
/string
>
<
k
e
y
>
CFBundleSignature
<
/k
e
y
>
<
string
>
????
<
/string
>
<
k
e
y
>
CFBundleVersion
<
/k
e
y
>
<
string
>
$
{
CURRENT_PROJECT_VERSION
}<
/string
>
<
k
e
y
>
NSPrincipalClass
<
/k
e
y
>
<
string
><
/string
>
<
/
d
i
c
t
>
<
/plist
>
Example/Pods/Target Support Files/GMRefresh/ResourceBundle-GMRefresh-Info.plist
deleted
100644 → 0
View file @
e36f45c6
<
?xml
v
e
rsion="
1
.
0
"
e
n
c
o
d
ing="UT
F
-
8
"?
>
<
!
D
O
C
TYP
E
plist
PU
B
LI
C
"-//
A
ppl
e
//
D
T
D
PLIST
1
.
0
//
E
N"
"http://www.
a
ppl
e
.
c
om/
D
T
D
s/Prop
e
rtyList-
1
.
0
.
d
t
d
"
>
<
plist
v
e
rsion="
1
.
0
"
>
<
d
i
c
t
>
<
k
e
y
>
CFBundleDevelopmentRegion
<
/k
e
y
>
<
string
>
en
<
/string
>
<
k
e
y
>
CFBundleIdentifier
<
/k
e
y
>
<
string
>
$
{
PRODUCT_BUNDLE_IDENTIFIER
}<
/string
>
<
k
e
y
>
CFBundleInfoDictionaryVersion
<
/k
e
y
>
<
string
>
6.0
<
/string
>
<
k
e
y
>
CFBundleName
<
/k
e
y
>
<
string
>
$
{
PRODUCT_NAME
}<
/string
>
<
k
e
y
>
CFBundlePackageType
<
/k
e
y
>
<
string
>
BNDL
<
/string
>
<
k
e
y
>
CFBundleShortVersionString
<
/k
e
y
>
<
string
>
0.1.6
<
/string
>
<
k
e
y
>
CFBundleSignature
<
/k
e
y
>
<
string
>
????
<
/string
>
<
k
e
y
>
CFBundleVersion
<
/k
e
y
>
<
string
>
1
<
/string
>
<
k
e
y
>
NSPrincipalClass
<
/k
e
y
>
<
string
><
/string
>
<
/
d
i
c
t
>
<
/plist
>
Example/Pods/Target Support Files/MJRefresh/Info.plist
deleted
100644 → 0
View file @
e36f45c6
<
?xml
v
e
rsion="
1
.
0
"
e
n
c
o
d
ing="UT
F
-
8
"?
>
<
!
D
O
C
TYP
E
plist
PU
B
LI
C
"-//
A
ppl
e
//
D
T
D
PLIST
1
.
0
//
E
N"
"http://www.
a
ppl
e
.
c
om/
D
T
D
s/Prop
e
rtyList-
1
.
0
.
d
t
d
"
>
<
plist
v
e
rsion="
1
.
0
"
>
<
d
i
c
t
>
<
k
e
y
>
CFBundleDevelopmentRegion
<
/k
e
y
>
<
string
>
en
<
/string
>
<
k
e
y
>
CFBundleExecutable
<
/k
e
y
>
<
string
>
$
{
EXECUTABLE_NAME
}<
/string
>
<
k
e
y
>
CFBundleIdentifier
<
/k
e
y
>
<
string
>
$
{
PRODUCT_BUNDLE_IDENTIFIER
}<
/string
>
<
k
e
y
>
CFBundleInfoDictionaryVersion
<
/k
e
y
>
<
string
>
6.0
<
/string
>
<
k
e
y
>
CFBundleName
<
/k
e
y
>
<
string
>
$
{
PRODUCT_NAME
}<
/string
>
<
k
e
y
>
CFBundlePackageType
<
/k
e
y
>
<
string
>
FMWK
<
/string
>
<
k
e
y
>
CFBundleShortVersionString
<
/k
e
y
>
<
string
>
3.1.14
<
/string
>
<
k
e
y
>
CFBundleSignature
<
/k
e
y
>
<
string
>
????
<
/string
>
<
k
e
y
>
CFBundleVersion
<
/k
e
y
>
<
string
>
$
{
CURRENT_PROJECT_VERSION
}<
/string
>
<
k
e
y
>
NSPrincipalClass
<
/k
e
y
>
<
string
><
/string
>
<
/
d
i
c
t
>
<
/plist
>
Example/Pods/Target Support Files/MJRefresh/MJRefresh-dummy.m
deleted
100644 → 0
View file @
e36f45c6
#import <Foundation/Foundation.h>
@interface
PodsDummy_MJRefresh
:
NSObject
@end
@implementation
PodsDummy_MJRefresh
@end
Example/Pods/Target Support Files/MJRefresh/MJRefresh-prefix.pch
deleted
100644 → 0
View file @
e36f45c6
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#else
#ifndef FOUNDATION_EXPORT
#if defined(__cplusplus)
#define FOUNDATION_EXPORT extern "C"
#else
#define FOUNDATION_EXPORT extern
#endif
#endif
#endif
Example/Pods/Target Support Files/MJRefresh/MJRefresh-umbrella.h
deleted
100644 → 0
View file @
e36f45c6
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#else
#ifndef FOUNDATION_EXPORT
#if defined(__cplusplus)
#define FOUNDATION_EXPORT extern "C"
#else
#define FOUNDATION_EXPORT extern
#endif
#endif
#endif
#import "MJRefreshAutoFooter.h"
#import "MJRefreshBackFooter.h"
#import "MJRefreshComponent.h"
#import "MJRefreshFooter.h"
#import "MJRefreshHeader.h"
#import "MJRefreshAutoGifFooter.h"
#import "MJRefreshAutoNormalFooter.h"
#import "MJRefreshAutoStateFooter.h"
#import "MJRefreshBackGifFooter.h"
#import "MJRefreshBackNormalFooter.h"
#import "MJRefreshBackStateFooter.h"
#import "MJRefreshGifHeader.h"
#import "MJRefreshNormalHeader.h"
#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"
FOUNDATION_EXPORT
double
MJRefreshVersionNumber
;
FOUNDATION_EXPORT
const
unsigned
char
MJRefreshVersionString
[];
Example/Pods/Target Support Files/MJRefresh/MJRefresh.modulemap
deleted
100644 → 0
View file @
e36f45c6
framework module MJRefresh {
umbrella header "MJRefresh-umbrella.h"
export *
module * { export * }
}
Example/Pods/Target Support Files/MJRefresh/MJRefresh.xcconfig
deleted
100644 → 0
View file @
e36f45c6
CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MJRefresh
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
PODS_BUILD_DIR = $BUILD_DIR
PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/MJRefresh
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
Example/Pods/Target Support Files/Pods-GMRefresh_Example/Info.plist
deleted
100644 → 0
View file @
e36f45c6
<
?xml
v
e
rsion="
1
.
0
"
e
n
c
o
d
ing="UT
F
-
8
"?
>
<
!
D
O
C
TYP
E
plist
PU
B
LI
C
"-//
A
ppl
e
//
D
T
D
PLIST
1
.
0
//
E
N"
"http://www.
a
ppl
e
.
c
om/
D
T
D
s/Prop
e
rtyList-
1
.
0
.
d
t
d
"
>
<
plist
v
e
rsion="
1
.
0
"
>
<
d
i
c
t
>
<
k
e
y
>
CFBundleDevelopmentRegion
<
/k
e
y
>
<
string
>
en
<
/string
>
<
k
e
y
>
CFBundleExecutable
<
/k
e
y
>
<
string
>
$
{
EXECUTABLE_NAME
}<
/string
>
<
k
e
y
>
CFBundleIdentifier
<
/k
e
y
>
<
string
>
$
{
PRODUCT_BUNDLE_IDENTIFIER
}<
/string
>
<
k
e
y
>
CFBundleInfoDictionaryVersion
<
/k
e
y
>
<
string
>
6.0
<
/string
>
<
k
e
y
>
CFBundleName
<
/k
e
y
>
<
string
>
$
{
PRODUCT_NAME
}<
/string
>
<
k
e
y
>
CFBundlePackageType
<
/k
e
y
>
<
string
>
FMWK
<
/string
>
<
k
e
y
>
CFBundleShortVersionString
<
/k
e
y
>
<
string
>
1.0.0
<
/string
>
<
k
e
y
>
CFBundleSignature
<
/k
e
y
>
<
string
>
????
<
/string
>
<
k
e
y
>
CFBundleVersion
<
/k
e
y
>
<
string
>
$
{
CURRENT_PROJECT_VERSION
}<
/string
>
<
k
e
y
>
NSPrincipalClass
<
/k
e
y
>
<
string
><
/string
>
<
/
d
i
c
t
>
<
/plist
>
Example/Pods/Target Support Files/Pods-GMRefresh_Example/Pods-GMRefresh_Example-acknowledgements.markdown
deleted
100644 → 0
View file @
e36f45c6
This diff is collapsed.
Click to expand it.
Example/Pods/Target Support Files/Pods-GMRefresh_Example/Pods-GMRefresh_Example-acknowledgements.plist
deleted
100644 → 0
View file @
e36f45c6
This diff is collapsed.
Click to expand it.
Example/Pods/Target Support Files/Pods-GMRefresh_Example/Pods-GMRefresh_Example-dummy.m
deleted
100644 → 0
View file @
e36f45c6
#import <Foundation/Foundation.h>
@interface
PodsDummy_Pods_GMRefresh_Example
:
NSObject
@end
@implementation
PodsDummy_Pods_GMRefresh_Example
@end
Example/Pods/Target Support Files/Pods-GMRefresh_Example/Pods-GMRefresh_Example-frameworks.sh
deleted
100755 → 0
View file @
e36f45c6
#!/bin/sh
set
-e
echo
"mkdir -p
${
CONFIGURATION_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
mkdir
-p
"
${
CONFIGURATION_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
SWIFT_STDLIB_PATH
=
"
${
DT_TOOLCHAIN_DIR
}
/usr/lib/swift/
${
PLATFORM_NAME
}
"
# This protects against multiple targets copying the same framework dependency at the same time. The solution
# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
RSYNC_PROTECT_TMP_FILES
=(
--filter
"P .*.??????"
)
install_framework
()
{
if
[
-r
"
${
BUILT_PRODUCTS_DIR
}
/
$1
"
]
;
then
local source
=
"
${
BUILT_PRODUCTS_DIR
}
/
$1
"
elif
[
-r
"
${
BUILT_PRODUCTS_DIR
}
/
$(
basename
"
$1
"
)
"
]
;
then
local source
=
"
${
BUILT_PRODUCTS_DIR
}
/
$(
basename
"
$1
"
)
"
elif
[
-r
"
$1
"
]
;
then
local source
=
"
$1
"
fi
local
destination
=
"
${
TARGET_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
if
[
-L
"
${
source
}
"
]
;
then
echo
"Symlinked..."
source
=
"
$(
readlink
"
${
source
}
"
)
"
fi
# Use filter instead of exclude so missing patterns don't throw errors.
echo
"rsync --delete -av "
${
RSYNC_PROTECT_TMP_FILES
[@]
}
" --filter
\"
- CVS/
\"
--filter
\"
- .svn/
\"
--filter
\"
- .git/
\"
--filter
\"
- .hg/
\"
--filter
\"
- Headers
\"
--filter
\"
- PrivateHeaders
\"
--filter
\"
- Modules
\"
\"
${
source
}
\"
\"
${
destination
}
\"
"
rsync
--delete
-av
"
${
RSYNC_PROTECT_TMP_FILES
[@]
}
"
--filter
"- CVS/"
--filter
"- .svn/"
--filter
"- .git/"
--filter
"- .hg/"
--filter
"- Headers"
--filter
"- PrivateHeaders"
--filter
"- Modules"
"
${
source
}
"
"
${
destination
}
"
local basename
basename
=
"
$(
basename
-s
.framework
"
$1
"
)
"
binary
=
"
${
destination
}
/
${
basename
}
.framework/
${
basename
}
"
if
!
[
-r
"
$binary
"
]
;
then
binary
=
"
${
destination
}
/
${
basename
}
"
fi
# Strip invalid architectures so "fat" simulator / device frameworks work on device
if
[[
"
$(
file
"
$binary
"
)
"
==
*
"dynamically linked shared library"
*
]]
;
then
strip_invalid_archs
"
$binary
"
fi
# Resign the code if required by the build settings to avoid unstable apps
code_sign_if_enabled
"
${
destination
}
/
$(
basename
"
$1
"
)
"
# Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
if
[
"
${
XCODE_VERSION_MAJOR
}
"
-lt
7
]
;
then
local
swift_runtime_libs
swift_runtime_libs
=
$(
xcrun otool
-LX
"
$binary
"
|
grep
--color
=
never @rpath/libswift |
sed
-E
s/@rpath
\\
/
\(
.+dylib
\)
.
*
/
\\
1/g |
uniq
-u
&&
exit
${
PIPESTATUS
[0]
})
for
lib
in
$swift_runtime_libs
;
do
echo
"rsync -auv
\"
${
SWIFT_STDLIB_PATH
}
/
${
lib
}
\"
\"
${
destination
}
\"
"
rsync
-auv
"
${
SWIFT_STDLIB_PATH
}
/
${
lib
}
"
"
${
destination
}
"
code_sign_if_enabled
"
${
destination
}
/
${
lib
}
"
done
fi
}
# Copies the dSYM of a vendored framework
install_dsym
()
{
local source
=
"
$1
"
if
[
-r
"
$source
"
]
;
then
echo
"rsync --delete -av "
${
RSYNC_PROTECT_TMP_FILES
[@]
}
" --filter
\"
- CVS/
\"
--filter
\"
- .svn/
\"
--filter
\"
- .git/
\"
--filter
\"
- .hg/
\"
--filter
\"
- Headers
\"
--filter
\"
- PrivateHeaders
\"
--filter
\"
- Modules
\"
\"
${
source
}
\"
\"
${
DWARF_DSYM_FOLDER_PATH
}
\"
"
rsync
--delete
-av
"
${
RSYNC_PROTECT_TMP_FILES
[@]
}
"
--filter
"- CVS/"
--filter
"- .svn/"
--filter
"- .git/"
--filter
"- .hg/"
--filter
"- Headers"
--filter
"- PrivateHeaders"
--filter
"- Modules"
"
${
source
}
"
"
${
DWARF_DSYM_FOLDER_PATH
}
"
fi
}
# Signs a framework with the provided identity
code_sign_if_enabled
()
{
if
[
-n
"
${
EXPANDED_CODE_SIGN_IDENTITY
}
"
-a
"
${
CODE_SIGNING_REQUIRED
}
"
!=
"NO"
-a
"
${
CODE_SIGNING_ALLOWED
}
"
!=
"NO"
]
;
then
# Use the current code_sign_identitiy
echo
"Code Signing
$1
with Identity
${
EXPANDED_CODE_SIGN_IDENTITY_NAME
}
"
local
code_sign_cmd
=
"/usr/bin/codesign --force --sign
${
EXPANDED_CODE_SIGN_IDENTITY
}
${
OTHER_CODE_SIGN_FLAGS
}
--preserve-metadata=identifier,entitlements '
$1
'"
if
[
"
${
COCOAPODS_PARALLEL_CODE_SIGN
}
"
==
"true"
]
;
then
code_sign_cmd
=
"
$code_sign_cmd
&"
fi
echo
"
$code_sign_cmd
"
eval
"
$code_sign_cmd
"
fi
}
# Strip invalid architectures
strip_invalid_archs
()
{
binary
=
"
$1
"
# Get architectures for current file
archs
=
"
$(
lipo
-info
"
$binary
"
| rev |
cut
-d
':'
-f1
| rev
)
"
stripped
=
""
for
arch
in
$archs
;
do
if
!
[[
"
${
ARCHS
}
"
==
*
"
$arch
"
*
]]
;
then
# Strip non-valid architectures in-place
lipo
-remove
"
$arch
"
-output
"
$binary
"
"
$binary
"
||
exit
1
stripped
=
"
$stripped
$arch
"
fi
done
if
[[
"
$stripped
"
]]
;
then
echo
"Stripped
$binary
of architectures:
$stripped
"
fi
}
if
[[
"
$CONFIGURATION
"
==
"Debug"
]]
;
then
install_framework
"
${
BUILT_PRODUCTS_DIR
}
/GMCache/GMCache.framework"
install_framework
"
${
BUILT_PRODUCTS_DIR
}
/GMPhobos/GMPhobos.framework"
install_framework
"
${
BUILT_PRODUCTS_DIR
}
/GMRefresh/GMRefresh.framework"
install_framework
"
${
BUILT_PRODUCTS_DIR
}
/MJRefresh/MJRefresh.framework"
install_framework
"
${
BUILT_PRODUCTS_DIR
}
/TMCache/TMCache.framework"
fi
if
[[
"
$CONFIGURATION
"
==
"Release"
]]
;
then
install_framework
"
${
BUILT_PRODUCTS_DIR
}
/GMCache/GMCache.framework"
install_framework
"
${
BUILT_PRODUCTS_DIR
}
/GMPhobos/GMPhobos.framework"
install_framework
"
${
BUILT_PRODUCTS_DIR
}
/GMRefresh/GMRefresh.framework"
install_framework
"
${
BUILT_PRODUCTS_DIR
}
/MJRefresh/MJRefresh.framework"
install_framework
"
${
BUILT_PRODUCTS_DIR
}
/TMCache/TMCache.framework"
fi
if
[
"
${
COCOAPODS_PARALLEL_CODE_SIGN
}
"
==
"true"
]
;
then
wait
fi
Example/Pods/Target Support Files/Pods-GMRefresh_Example/Pods-GMRefresh_Example-resources.sh
deleted
100755 → 0
View file @
e36f45c6
#!/bin/sh
set
-e
mkdir
-p
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
"
RESOURCES_TO_COPY
=
${
PODS_ROOT
}
/resources-to-copy-
${
TARGETNAME
}
.txt
>
"
$RESOURCES_TO_COPY
"
XCASSET_FILES
=()
# This protects against multiple targets copying the same framework dependency at the same time. The solution
# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
RSYNC_PROTECT_TMP_FILES
=(
--filter
"P .*.??????"
)
case
"
${
TARGETED_DEVICE_FAMILY
}
"
in
1,2
)
TARGET_DEVICE_ARGS
=
"--target-device ipad --target-device iphone"
;;
1
)
TARGET_DEVICE_ARGS
=
"--target-device iphone"
;;
2
)
TARGET_DEVICE_ARGS
=
"--target-device ipad"
;;
3
)
TARGET_DEVICE_ARGS
=
"--target-device tv"
;;
4
)
TARGET_DEVICE_ARGS
=
"--target-device watch"
;;
*
)
TARGET_DEVICE_ARGS
=
"--target-device mac"
;;
esac
install_resource
()
{
if
[[
"
$1
"
=
/
*
]]
;
then
RESOURCE_PATH
=
"
$1
"
else
RESOURCE_PATH
=
"
${
PODS_ROOT
}
/
$1
"
fi
if
[[
!
-e
"
$RESOURCE_PATH
"
]]
;
then
cat
<<
EOM
error: Resource "
$RESOURCE_PATH
" not found. Run 'pod install' to update the copy resources script.
EOM
exit
1
fi
case
$RESOURCE_PATH
in
*
.storyboard
)
echo
"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target
${
!DEPLOYMENT_TARGET_SETTING_NAME
}
--output-format human-readable-text --compile
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
\"
$RESOURCE_PATH
\"
.storyboard
`
.storyboardc
$RESOURCE_PATH
--sdk
${
SDKROOT
}
${
TARGET_DEVICE_ARGS
}
"
||
true
ibtool
--reference-external-strings-file
--errors
--warnings
--notices
--minimum-deployment-target
${
!DEPLOYMENT_TARGET_SETTING_NAME
}
--output-format
human-readable-text
--compile
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
\"
$RESOURCE_PATH
\"
.storyboard
`
.storyboardc"
"
$RESOURCE_PATH
"
--sdk
"
${
SDKROOT
}
"
${
TARGET_DEVICE_ARGS
}
;;
*
.xib
)
echo
"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target
${
!DEPLOYMENT_TARGET_SETTING_NAME
}
--output-format human-readable-text --compile
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
\"
$RESOURCE_PATH
\"
.xib
`
.nib
$RESOURCE_PATH
--sdk
${
SDKROOT
}
${
TARGET_DEVICE_ARGS
}
"
||
true
ibtool
--reference-external-strings-file
--errors
--warnings
--notices
--minimum-deployment-target
${
!DEPLOYMENT_TARGET_SETTING_NAME
}
--output-format
human-readable-text
--compile
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
\"
$RESOURCE_PATH
\"
.xib
`
.nib"
"
$RESOURCE_PATH
"
--sdk
"
${
SDKROOT
}
"
${
TARGET_DEVICE_ARGS
}
;;
*
.framework
)
echo
"mkdir -p
${
TARGET_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
||
true
mkdir
-p
"
${
TARGET_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
echo
"rsync --delete -av "
${
RSYNC_PROTECT_TMP_FILES
[@]
}
"
$RESOURCE_PATH
${
TARGET_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
||
true
rsync
--delete
-av
"
${
RSYNC_PROTECT_TMP_FILES
[@]
}
"
"
$RESOURCE_PATH
"
"
${
TARGET_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
;;
*
.xcdatamodel
)
echo
"xcrun momc
\"
$RESOURCE_PATH
\"
\"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
"
$RESOURCE_PATH
"
`
.mom
\"
"
||
true
xcrun momc
"
$RESOURCE_PATH
"
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
"
$RESOURCE_PATH
"
.xcdatamodel
`
.mom"
;;
*
.xcdatamodeld
)
echo
"xcrun momc
\"
$RESOURCE_PATH
\"
\"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
"
$RESOURCE_PATH
"
.xcdatamodeld
`
.momd
\"
"
||
true
xcrun momc
"
$RESOURCE_PATH
"
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
"
$RESOURCE_PATH
"
.xcdatamodeld
`
.momd"
;;
*
.xcmappingmodel
)
echo
"xcrun mapc
\"
$RESOURCE_PATH
\"
\"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
"
$RESOURCE_PATH
"
.xcmappingmodel
`
.cdm
\"
"
||
true
xcrun mapc
"
$RESOURCE_PATH
"
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
"
$RESOURCE_PATH
"
.xcmappingmodel
`
.cdm"
;;
*
.xcassets
)
ABSOLUTE_XCASSET_FILE
=
"
$RESOURCE_PATH
"
XCASSET_FILES+
=(
"
$ABSOLUTE_XCASSET_FILE
"
)
;;
*
)
echo
"
$RESOURCE_PATH
"
||
true
echo
"
$RESOURCE_PATH
"
>>
"
$RESOURCES_TO_COPY
"
;;
esac
}
mkdir
-p
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
"
rsync
-avr
--copy-links
--no-relative
--exclude
'*/.svn/*'
--files-from
=
"
$RESOURCES_TO_COPY
"
/
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
"
if
[[
"
${
ACTION
}
"
==
"install"
]]
&&
[[
"
${
SKIP_INSTALL
}
"
==
"NO"
]]
;
then
mkdir
-p
"
${
INSTALL_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
"
rsync
-avr
--copy-links
--no-relative
--exclude
'*/.svn/*'
--files-from
=
"
$RESOURCES_TO_COPY
"
/
"
${
INSTALL_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
"
fi
rm
-f
"
$RESOURCES_TO_COPY
"
if
[[
-n
"
${
WRAPPER_EXTENSION
}
"
]]
&&
[
"
`
xcrun
--find
actool
`
"
]
&&
[
-n
"
$XCASSET_FILES
"
]
then
# Find all other xcassets (this unfortunately includes those of path pods and other targets).
OTHER_XCASSETS
=
$(
find
"
$PWD
"
-iname
"*.xcassets"
-type
d
)
while
read
line
;
do
if
[[
$line
!=
"
${
PODS_ROOT
}
*"
]]
;
then
XCASSET_FILES+
=(
"
$line
"
)
fi
done
<<<
"
$OTHER_XCASSETS
"
printf
"%s
\0
"
"
${
XCASSET_FILES
[@]
}
"
| xargs
-0
xcrun actool
--output-format
human-readable-text
--notices
--warnings
--platform
"
${
PLATFORM_NAME
}
"
--minimum-deployment-target
"
${
!DEPLOYMENT_TARGET_SETTING_NAME
}
"
${
TARGET_DEVICE_ARGS
}
--compress-pngs
--compile
"
${
BUILT_PRODUCTS_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
"
fi
Example/Pods/Target Support Files/Pods-GMRefresh_Example/Pods-GMRefresh_Example-umbrella.h
deleted
100644 → 0
View file @
e36f45c6
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#else
#ifndef FOUNDATION_EXPORT
#if defined(__cplusplus)
#define FOUNDATION_EXPORT extern "C"
#else
#define FOUNDATION_EXPORT extern
#endif
#endif
#endif
FOUNDATION_EXPORT
double
Pods_GMRefresh_ExampleVersionNumber
;
FOUNDATION_EXPORT
const
unsigned
char
Pods_GMRefresh_ExampleVersionString
[];
Example/Pods/Target Support Files/Pods-GMRefresh_Example/Pods-GMRefresh_Example.debug.xcconfig
deleted
100644 → 0
View file @
e36f45c6
FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/GMCache" "$PODS_CONFIGURATION_BUILD_DIR/GMPhobos" "$PODS_CONFIGURATION_BUILD_DIR/GMRefresh" "$PODS_CONFIGURATION_BUILD_DIR/MJRefresh" "$PODS_CONFIGURATION_BUILD_DIR/TMCache"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/GMCache/GMCache.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GMPhobos/GMPhobos.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GMRefresh/GMRefresh.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MJRefresh/MJRefresh.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/TMCache/TMCache.framework/Headers"
OTHER_LDFLAGS = $(inherited) -framework "GMCache" -framework "GMPhobos" -framework "GMRefresh" -framework "MJRefresh" -framework "TMCache"
PODS_BUILD_DIR = $BUILD_DIR
PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
PODS_ROOT = ${SRCROOT}/Pods
Example/Pods/Target Support Files/Pods-GMRefresh_Example/Pods-GMRefresh_Example.modulemap
deleted
100644 → 0
View file @
e36f45c6
framework module Pods_GMRefresh_Example {
umbrella header "Pods-GMRefresh_Example-umbrella.h"
export *
module * { export * }
}
Example/Pods/Target Support Files/Pods-GMRefresh_Example/Pods-GMRefresh_Example.release.xcconfig
deleted
100644 → 0
View file @
e36f45c6
FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/GMCache" "$PODS_CONFIGURATION_BUILD_DIR/GMPhobos" "$PODS_CONFIGURATION_BUILD_DIR/GMRefresh" "$PODS_CONFIGURATION_BUILD_DIR/MJRefresh" "$PODS_CONFIGURATION_BUILD_DIR/TMCache"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/GMCache/GMCache.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GMPhobos/GMPhobos.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GMRefresh/GMRefresh.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MJRefresh/MJRefresh.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/TMCache/TMCache.framework/Headers"
OTHER_LDFLAGS = $(inherited) -framework "GMCache" -framework "GMPhobos" -framework "GMRefresh" -framework "MJRefresh" -framework "TMCache"
PODS_BUILD_DIR = $BUILD_DIR
PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
PODS_ROOT = ${SRCROOT}/Pods
Example/Pods/Target Support Files/Pods-GMRefresh_Tests/Info.plist
deleted
100644 → 0
View file @
e36f45c6
<
?xml
v
e
rsion="
1
.
0
"
e
n
c
o
d
ing="UT
F
-
8
"?
>
<
!
D
O
C
TYP
E
plist
PU
B
LI
C
"-//
A
ppl
e
//
D
T
D
PLIST
1
.
0
//
E
N"
"http://www.
a
ppl
e
.
c
om/
D
T
D
s/Prop
e
rtyList-
1
.
0
.
d
t
d
"
>
<
plist
v
e
rsion="
1
.
0
"
>
<
d
i
c
t
>
<
k
e
y
>
CFBundleDevelopmentRegion
<
/k
e
y
>
<
string
>
en
<
/string
>
<
k
e
y
>
CFBundleExecutable
<
/k
e
y
>
<
string
>
$
{
EXECUTABLE_NAME
}<
/string
>
<
k
e
y
>
CFBundleIdentifier
<
/k
e
y
>
<
string
>
$
{
PRODUCT_BUNDLE_IDENTIFIER
}<
/string
>
<
k
e
y
>
CFBundleInfoDictionaryVersion
<
/k
e
y
>
<
string
>
6.0
<
/string
>
<
k
e
y
>
CFBundleName
<
/k
e
y
>
<
string
>
$
{
PRODUCT_NAME
}<
/string
>
<
k
e
y
>
CFBundlePackageType
<
/k
e
y
>
<
string
>
FMWK
<
/string
>
<
k
e
y
>
CFBundleShortVersionString
<
/k
e
y
>
<
string
>
1.0.0
<
/string
>
<
k
e
y
>
CFBundleSignature
<
/k
e
y
>
<
string
>
????
<
/string
>
<
k
e
y
>
CFBundleVersion
<
/k
e
y
>
<
string
>
$
{
CURRENT_PROJECT_VERSION
}<
/string
>
<
k
e
y
>
NSPrincipalClass
<
/k
e
y
>
<
string
><
/string
>
<
/
d
i
c
t
>
<
/plist
>
Example/Pods/Target Support Files/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests-acknowledgements.markdown
deleted
100644 → 0
View file @
e36f45c6
# Acknowledgements
This application makes use of the following third party libraries:
Generated by CocoaPods - https://cocoapods.org
Example/Pods/Target Support Files/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests-acknowledgements.plist
deleted
100644 → 0
View file @
e36f45c6
<
?xml
v
e
rsion="
1
.
0
"
e
n
c
o
d
ing="UT
F
-
8
"?
>
<
!
D
O
C
TYP
E
plist
PU
B
LI
C
"-//
A
ppl
e
//
D
T
D
PLIST
1
.
0
//
E
N"
"http://www.
a
ppl
e
.
c
om/
D
T
D
s/Prop
e
rtyList-
1
.
0
.
d
t
d
"
>
<
plist
v
e
rsion="
1
.
0
"
>
<
d
i
c
t
>
<
k
e
y
>
PreferenceSpecifiers
<
/k
e
y
>
<
a
rr
a
y
>
<
d
i
c
t
>
<
k
e
y
>
FooterText
<
/k
e
y
>
<
string
>
This
application
makes
use
of
the
following
third
party
libraries:
<
/string
>
<
k
e
y
>
Title
<
/k
e
y
>
<
string
>
Acknowledgements
<
/string
>
<
k
e
y
>
Type
<
/k
e
y
>
<
string
>
PSGroupSpecifier
<
/string
>
<
/
d
i
c
t
>
<
d
i
c
t
>
<
k
e
y
>
FooterText
<
/k
e
y
>
<
string
>
Generated
by
CocoaPods
-
https://cocoapods.org
<
/string
>
<
k
e
y
>
Title
<
/k
e
y
>
<
string
><
/string
>
<
k
e
y
>
Type
<
/k
e
y
>
<
string
>
PSGroupSpecifier
<
/string
>
<
/
d
i
c
t
>
<
/
a
rr
a
y
>
<
k
e
y
>
StringsTable
<
/k
e
y
>
<
string
>
Acknowledgements
<
/string
>
<
k
e
y
>
Title
<
/k
e
y
>
<
string
>
Acknowledgements
<
/string
>
<
/
d
i
c
t
>
<
/plist
>
Example/Pods/Target Support Files/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests-dummy.m
deleted
100644 → 0
View file @
e36f45c6
#import <Foundation/Foundation.h>
@interface
PodsDummy_Pods_GMRefresh_Tests
:
NSObject
@end
@implementation
PodsDummy_Pods_GMRefresh_Tests
@end
Example/Pods/Target Support Files/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests-frameworks.sh
deleted
100755 → 0
View file @
e36f45c6
#!/bin/sh
set
-e
echo
"mkdir -p
${
CONFIGURATION_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
mkdir
-p
"
${
CONFIGURATION_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
SWIFT_STDLIB_PATH
=
"
${
DT_TOOLCHAIN_DIR
}
/usr/lib/swift/
${
PLATFORM_NAME
}
"
# This protects against multiple targets copying the same framework dependency at the same time. The solution
# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
RSYNC_PROTECT_TMP_FILES
=(
--filter
"P .*.??????"
)
install_framework
()
{
if
[
-r
"
${
BUILT_PRODUCTS_DIR
}
/
$1
"
]
;
then
local source
=
"
${
BUILT_PRODUCTS_DIR
}
/
$1
"
elif
[
-r
"
${
BUILT_PRODUCTS_DIR
}
/
$(
basename
"
$1
"
)
"
]
;
then
local source
=
"
${
BUILT_PRODUCTS_DIR
}
/
$(
basename
"
$1
"
)
"
elif
[
-r
"
$1
"
]
;
then
local source
=
"
$1
"
fi
local
destination
=
"
${
TARGET_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
if
[
-L
"
${
source
}
"
]
;
then
echo
"Symlinked..."
source
=
"
$(
readlink
"
${
source
}
"
)
"
fi
# Use filter instead of exclude so missing patterns don't throw errors.
echo
"rsync --delete -av "
${
RSYNC_PROTECT_TMP_FILES
[@]
}
" --filter
\"
- CVS/
\"
--filter
\"
- .svn/
\"
--filter
\"
- .git/
\"
--filter
\"
- .hg/
\"
--filter
\"
- Headers
\"
--filter
\"
- PrivateHeaders
\"
--filter
\"
- Modules
\"
\"
${
source
}
\"
\"
${
destination
}
\"
"
rsync
--delete
-av
"
${
RSYNC_PROTECT_TMP_FILES
[@]
}
"
--filter
"- CVS/"
--filter
"- .svn/"
--filter
"- .git/"
--filter
"- .hg/"
--filter
"- Headers"
--filter
"- PrivateHeaders"
--filter
"- Modules"
"
${
source
}
"
"
${
destination
}
"
local basename
basename
=
"
$(
basename
-s
.framework
"
$1
"
)
"
binary
=
"
${
destination
}
/
${
basename
}
.framework/
${
basename
}
"
if
!
[
-r
"
$binary
"
]
;
then
binary
=
"
${
destination
}
/
${
basename
}
"
fi
# Strip invalid architectures so "fat" simulator / device frameworks work on device
if
[[
"
$(
file
"
$binary
"
)
"
==
*
"dynamically linked shared library"
*
]]
;
then
strip_invalid_archs
"
$binary
"
fi
# Resign the code if required by the build settings to avoid unstable apps
code_sign_if_enabled
"
${
destination
}
/
$(
basename
"
$1
"
)
"
# Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
if
[
"
${
XCODE_VERSION_MAJOR
}
"
-lt
7
]
;
then
local
swift_runtime_libs
swift_runtime_libs
=
$(
xcrun otool
-LX
"
$binary
"
|
grep
--color
=
never @rpath/libswift |
sed
-E
s/@rpath
\\
/
\(
.+dylib
\)
.
*
/
\\
1/g |
uniq
-u
&&
exit
${
PIPESTATUS
[0]
})
for
lib
in
$swift_runtime_libs
;
do
echo
"rsync -auv
\"
${
SWIFT_STDLIB_PATH
}
/
${
lib
}
\"
\"
${
destination
}
\"
"
rsync
-auv
"
${
SWIFT_STDLIB_PATH
}
/
${
lib
}
"
"
${
destination
}
"
code_sign_if_enabled
"
${
destination
}
/
${
lib
}
"
done
fi
}
# Copies the dSYM of a vendored framework
install_dsym
()
{
local source
=
"
$1
"
if
[
-r
"
$source
"
]
;
then
echo
"rsync --delete -av "
${
RSYNC_PROTECT_TMP_FILES
[@]
}
" --filter
\"
- CVS/
\"
--filter
\"
- .svn/
\"
--filter
\"
- .git/
\"
--filter
\"
- .hg/
\"
--filter
\"
- Headers
\"
--filter
\"
- PrivateHeaders
\"
--filter
\"
- Modules
\"
\"
${
source
}
\"
\"
${
DWARF_DSYM_FOLDER_PATH
}
\"
"
rsync
--delete
-av
"
${
RSYNC_PROTECT_TMP_FILES
[@]
}
"
--filter
"- CVS/"
--filter
"- .svn/"
--filter
"- .git/"
--filter
"- .hg/"
--filter
"- Headers"
--filter
"- PrivateHeaders"
--filter
"- Modules"
"
${
source
}
"
"
${
DWARF_DSYM_FOLDER_PATH
}
"
fi
}
# Signs a framework with the provided identity
code_sign_if_enabled
()
{
if
[
-n
"
${
EXPANDED_CODE_SIGN_IDENTITY
}
"
-a
"
${
CODE_SIGNING_REQUIRED
}
"
!=
"NO"
-a
"
${
CODE_SIGNING_ALLOWED
}
"
!=
"NO"
]
;
then
# Use the current code_sign_identitiy
echo
"Code Signing
$1
with Identity
${
EXPANDED_CODE_SIGN_IDENTITY_NAME
}
"
local
code_sign_cmd
=
"/usr/bin/codesign --force --sign
${
EXPANDED_CODE_SIGN_IDENTITY
}
${
OTHER_CODE_SIGN_FLAGS
}
--preserve-metadata=identifier,entitlements '
$1
'"
if
[
"
${
COCOAPODS_PARALLEL_CODE_SIGN
}
"
==
"true"
]
;
then
code_sign_cmd
=
"
$code_sign_cmd
&"
fi
echo
"
$code_sign_cmd
"
eval
"
$code_sign_cmd
"
fi
}
# Strip invalid architectures
strip_invalid_archs
()
{
binary
=
"
$1
"
# Get architectures for current file
archs
=
"
$(
lipo
-info
"
$binary
"
| rev |
cut
-d
':'
-f1
| rev
)
"
stripped
=
""
for
arch
in
$archs
;
do
if
!
[[
"
${
ARCHS
}
"
==
*
"
$arch
"
*
]]
;
then
# Strip non-valid architectures in-place
lipo
-remove
"
$arch
"
-output
"
$binary
"
"
$binary
"
||
exit
1
stripped
=
"
$stripped
$arch
"
fi
done
if
[[
"
$stripped
"
]]
;
then
echo
"Stripped
$binary
of architectures:
$stripped
"
fi
}
if
[
"
${
COCOAPODS_PARALLEL_CODE_SIGN
}
"
==
"true"
]
;
then
wait
fi
Example/Pods/Target Support Files/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests-resources.sh
deleted
100755 → 0
View file @
e36f45c6
#!/bin/sh
set
-e
mkdir
-p
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
"
RESOURCES_TO_COPY
=
${
PODS_ROOT
}
/resources-to-copy-
${
TARGETNAME
}
.txt
>
"
$RESOURCES_TO_COPY
"
XCASSET_FILES
=()
# This protects against multiple targets copying the same framework dependency at the same time. The solution
# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
RSYNC_PROTECT_TMP_FILES
=(
--filter
"P .*.??????"
)
case
"
${
TARGETED_DEVICE_FAMILY
}
"
in
1,2
)
TARGET_DEVICE_ARGS
=
"--target-device ipad --target-device iphone"
;;
1
)
TARGET_DEVICE_ARGS
=
"--target-device iphone"
;;
2
)
TARGET_DEVICE_ARGS
=
"--target-device ipad"
;;
3
)
TARGET_DEVICE_ARGS
=
"--target-device tv"
;;
4
)
TARGET_DEVICE_ARGS
=
"--target-device watch"
;;
*
)
TARGET_DEVICE_ARGS
=
"--target-device mac"
;;
esac
install_resource
()
{
if
[[
"
$1
"
=
/
*
]]
;
then
RESOURCE_PATH
=
"
$1
"
else
RESOURCE_PATH
=
"
${
PODS_ROOT
}
/
$1
"
fi
if
[[
!
-e
"
$RESOURCE_PATH
"
]]
;
then
cat
<<
EOM
error: Resource "
$RESOURCE_PATH
" not found. Run 'pod install' to update the copy resources script.
EOM
exit
1
fi
case
$RESOURCE_PATH
in
*
.storyboard
)
echo
"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target
${
!DEPLOYMENT_TARGET_SETTING_NAME
}
--output-format human-readable-text --compile
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
\"
$RESOURCE_PATH
\"
.storyboard
`
.storyboardc
$RESOURCE_PATH
--sdk
${
SDKROOT
}
${
TARGET_DEVICE_ARGS
}
"
||
true
ibtool
--reference-external-strings-file
--errors
--warnings
--notices
--minimum-deployment-target
${
!DEPLOYMENT_TARGET_SETTING_NAME
}
--output-format
human-readable-text
--compile
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
\"
$RESOURCE_PATH
\"
.storyboard
`
.storyboardc"
"
$RESOURCE_PATH
"
--sdk
"
${
SDKROOT
}
"
${
TARGET_DEVICE_ARGS
}
;;
*
.xib
)
echo
"ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target
${
!DEPLOYMENT_TARGET_SETTING_NAME
}
--output-format human-readable-text --compile
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
\"
$RESOURCE_PATH
\"
.xib
`
.nib
$RESOURCE_PATH
--sdk
${
SDKROOT
}
${
TARGET_DEVICE_ARGS
}
"
||
true
ibtool
--reference-external-strings-file
--errors
--warnings
--notices
--minimum-deployment-target
${
!DEPLOYMENT_TARGET_SETTING_NAME
}
--output-format
human-readable-text
--compile
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
\"
$RESOURCE_PATH
\"
.xib
`
.nib"
"
$RESOURCE_PATH
"
--sdk
"
${
SDKROOT
}
"
${
TARGET_DEVICE_ARGS
}
;;
*
.framework
)
echo
"mkdir -p
${
TARGET_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
||
true
mkdir
-p
"
${
TARGET_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
echo
"rsync --delete -av "
${
RSYNC_PROTECT_TMP_FILES
[@]
}
"
$RESOURCE_PATH
${
TARGET_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
||
true
rsync
--delete
-av
"
${
RSYNC_PROTECT_TMP_FILES
[@]
}
"
"
$RESOURCE_PATH
"
"
${
TARGET_BUILD_DIR
}
/
${
FRAMEWORKS_FOLDER_PATH
}
"
;;
*
.xcdatamodel
)
echo
"xcrun momc
\"
$RESOURCE_PATH
\"
\"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
"
$RESOURCE_PATH
"
`
.mom
\"
"
||
true
xcrun momc
"
$RESOURCE_PATH
"
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
"
$RESOURCE_PATH
"
.xcdatamodel
`
.mom"
;;
*
.xcdatamodeld
)
echo
"xcrun momc
\"
$RESOURCE_PATH
\"
\"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
"
$RESOURCE_PATH
"
.xcdatamodeld
`
.momd
\"
"
||
true
xcrun momc
"
$RESOURCE_PATH
"
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
"
$RESOURCE_PATH
"
.xcdatamodeld
`
.momd"
;;
*
.xcmappingmodel
)
echo
"xcrun mapc
\"
$RESOURCE_PATH
\"
\"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
"
$RESOURCE_PATH
"
.xcmappingmodel
`
.cdm
\"
"
||
true
xcrun mapc
"
$RESOURCE_PATH
"
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
/
`
basename
"
$RESOURCE_PATH
"
.xcmappingmodel
`
.cdm"
;;
*
.xcassets
)
ABSOLUTE_XCASSET_FILE
=
"
$RESOURCE_PATH
"
XCASSET_FILES+
=(
"
$ABSOLUTE_XCASSET_FILE
"
)
;;
*
)
echo
"
$RESOURCE_PATH
"
||
true
echo
"
$RESOURCE_PATH
"
>>
"
$RESOURCES_TO_COPY
"
;;
esac
}
mkdir
-p
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
"
rsync
-avr
--copy-links
--no-relative
--exclude
'*/.svn/*'
--files-from
=
"
$RESOURCES_TO_COPY
"
/
"
${
TARGET_BUILD_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
"
if
[[
"
${
ACTION
}
"
==
"install"
]]
&&
[[
"
${
SKIP_INSTALL
}
"
==
"NO"
]]
;
then
mkdir
-p
"
${
INSTALL_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
"
rsync
-avr
--copy-links
--no-relative
--exclude
'*/.svn/*'
--files-from
=
"
$RESOURCES_TO_COPY
"
/
"
${
INSTALL_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
"
fi
rm
-f
"
$RESOURCES_TO_COPY
"
if
[[
-n
"
${
WRAPPER_EXTENSION
}
"
]]
&&
[
"
`
xcrun
--find
actool
`
"
]
&&
[
-n
"
$XCASSET_FILES
"
]
then
# Find all other xcassets (this unfortunately includes those of path pods and other targets).
OTHER_XCASSETS
=
$(
find
"
$PWD
"
-iname
"*.xcassets"
-type
d
)
while
read
line
;
do
if
[[
$line
!=
"
${
PODS_ROOT
}
*"
]]
;
then
XCASSET_FILES+
=(
"
$line
"
)
fi
done
<<<
"
$OTHER_XCASSETS
"
printf
"%s
\0
"
"
${
XCASSET_FILES
[@]
}
"
| xargs
-0
xcrun actool
--output-format
human-readable-text
--notices
--warnings
--platform
"
${
PLATFORM_NAME
}
"
--minimum-deployment-target
"
${
!DEPLOYMENT_TARGET_SETTING_NAME
}
"
${
TARGET_DEVICE_ARGS
}
--compress-pngs
--compile
"
${
BUILT_PRODUCTS_DIR
}
/
${
UNLOCALIZED_RESOURCES_FOLDER_PATH
}
"
fi
Example/Pods/Target Support Files/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests-umbrella.h
deleted
100644 → 0
View file @
e36f45c6
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#else
#ifndef FOUNDATION_EXPORT
#if defined(__cplusplus)
#define FOUNDATION_EXPORT extern "C"
#else
#define FOUNDATION_EXPORT extern
#endif
#endif
#endif
FOUNDATION_EXPORT
double
Pods_GMRefresh_TestsVersionNumber
;
FOUNDATION_EXPORT
const
unsigned
char
Pods_GMRefresh_TestsVersionString
[];
Example/Pods/Target Support Files/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests.debug.xcconfig
deleted
100644 → 0
View file @
e36f45c6
FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/GMCache" "$PODS_CONFIGURATION_BUILD_DIR/GMPhobos" "$PODS_CONFIGURATION_BUILD_DIR/GMRefresh" "$PODS_CONFIGURATION_BUILD_DIR/MJRefresh" "$PODS_CONFIGURATION_BUILD_DIR/TMCache"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/GMCache/GMCache.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GMPhobos/GMPhobos.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GMRefresh/GMRefresh.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MJRefresh/MJRefresh.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/TMCache/TMCache.framework/Headers"
PODS_BUILD_DIR = $BUILD_DIR
PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
PODS_ROOT = ${SRCROOT}/Pods
Example/Pods/Target Support Files/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests.modulemap
deleted
100644 → 0
View file @
e36f45c6
framework module Pods_GMRefresh_Tests {
umbrella header "Pods-GMRefresh_Tests-umbrella.h"
export *
module * { export * }
}
Example/Pods/Target Support Files/Pods-GMRefresh_Tests/Pods-GMRefresh_Tests.release.xcconfig
deleted
100644 → 0
View file @
e36f45c6
FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/GMCache" "$PODS_CONFIGURATION_BUILD_DIR/GMPhobos" "$PODS_CONFIGURATION_BUILD_DIR/GMRefresh" "$PODS_CONFIGURATION_BUILD_DIR/MJRefresh" "$PODS_CONFIGURATION_BUILD_DIR/TMCache"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/GMCache/GMCache.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GMPhobos/GMPhobos.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/GMRefresh/GMRefresh.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MJRefresh/MJRefresh.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/TMCache/TMCache.framework/Headers"
PODS_BUILD_DIR = $BUILD_DIR
PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
PODS_ROOT = ${SRCROOT}/Pods
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment