├── .gitignore
├── Demo
├── CurveMask.gif
├── QQ.gif
├── TXVideo.gif
├── Taobao.gif
└── Youku.gif
├── GTMRefresh.podspec
├── GTMRefresh.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── xcuserdata
│ └── luoyang.xcuserdatad
│ ├── xcdebugger
│ └── Breakpoints_v2.xcbkptlist
│ └── xcschemes
│ ├── GTMRefresh.xcscheme
│ ├── GTMRefreshExample.xcscheme
│ └── xcschememanagement.plist
├── GTMRefresh
├── DefaultGTMLoadMoreFooter.swift
├── DefaultGTMRefreshHeader.swift
├── GTMLoadMoreFooter.swift
├── GTMRefreshComponent.swift
├── GTMRefreshConstant.swift
├── GTMRefreshExtension.swift
├── GTMRefreshHeader.swift
├── GTMRefreshStyle.swift
├── Info.plist
└── Resource
│ ├── Base.lproj
│ └── Localize.strings
│ ├── arrow_down@3x.png
│ ├── en.lproj
│ └── Localize.strings
│ ├── failure@3x.png
│ ├── success@3x.png
│ └── zh-Hans.lproj
│ └── Localize.strings
├── GTMRefreshExample
├── AppDelegate.swift
├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── 1024.png
│ │ ├── Contents.json
│ │ ├── Icon-120.png
│ │ ├── Icon-121.png
│ │ ├── Icon-180.png
│ │ ├── Icon-40.png
│ │ ├── Icon-58.png
│ │ ├── Icon-60.png
│ │ ├── Icon-80.png
│ │ └── Icon-87.png
│ ├── Contents.json
│ ├── dropdown_anim__0001.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__0001@2x.png
│ ├── dropdown_anim__00010.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00010@2x.png
│ ├── dropdown_anim__00011.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00011@2x.png
│ ├── dropdown_anim__00012.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00012@2x.png
│ ├── dropdown_anim__00013.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00013@2x.png
│ ├── dropdown_anim__00014.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00014@2x.png
│ ├── dropdown_anim__00015.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00015@2x.png
│ ├── dropdown_anim__00016.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00016@2x.png
│ ├── dropdown_anim__00017.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00017@2x.png
│ ├── dropdown_anim__00018.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00018@2x.png
│ ├── dropdown_anim__00019.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00019@2x.png
│ ├── dropdown_anim__0002.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__0002@2x.png
│ ├── dropdown_anim__00020.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00020@2x.png
│ ├── dropdown_anim__00021.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00021@2x.png
│ ├── dropdown_anim__00022.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00022@2x.png
│ ├── dropdown_anim__00023.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00023@2x.png
│ ├── dropdown_anim__00024.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00024@2x.png
│ ├── dropdown_anim__00025.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00025@2x.png
│ ├── dropdown_anim__00026.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00026@2x.png
│ ├── dropdown_anim__00027.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00027@2x.png
│ ├── dropdown_anim__00028.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00028@2x.png
│ ├── dropdown_anim__00029.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00029@2x.png
│ ├── dropdown_anim__0003.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__0003@2x.png
│ ├── dropdown_anim__00030.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00030@2x.png
│ ├── dropdown_anim__00031.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00031@2x.png
│ ├── dropdown_anim__00032.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00032@2x.png
│ ├── dropdown_anim__00033.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00033@2x.png
│ ├── dropdown_anim__00034.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00034@2x.png
│ ├── dropdown_anim__00035.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00035@2x.png
│ ├── dropdown_anim__00036.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00036@2x.png
│ ├── dropdown_anim__00037.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00037@2x.png
│ ├── dropdown_anim__00038.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00038@2x.png
│ ├── dropdown_anim__00039.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00039@2x.png
│ ├── dropdown_anim__0004.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__0004@2x.png
│ ├── dropdown_anim__00040.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00040@2x.png
│ ├── dropdown_anim__00041.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00041@2x.png
│ ├── dropdown_anim__00042.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00042@2x.png
│ ├── dropdown_anim__00043.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00043@2x.png
│ ├── dropdown_anim__00044.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00044@2x.png
│ ├── dropdown_anim__00045.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00045@2x.png
│ ├── dropdown_anim__00046.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00046@2x.png
│ ├── dropdown_anim__00047.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00047@2x.png
│ ├── dropdown_anim__00048.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00048@2x.png
│ ├── dropdown_anim__00049.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00049@2x.png
│ ├── dropdown_anim__0005.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__0005@2x.png
│ ├── dropdown_anim__00050.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00050@2x.png
│ ├── dropdown_anim__00051.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00051@2x.png
│ ├── dropdown_anim__00052.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00052@2x.png
│ ├── dropdown_anim__00053.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00053@2x.png
│ ├── dropdown_anim__00054.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00054@2x.png
│ ├── dropdown_anim__00055.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00055@2x.png
│ ├── dropdown_anim__00056.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00056@2x.png
│ ├── dropdown_anim__00057.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00057@2x.png
│ ├── dropdown_anim__00058.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00058@2x.png
│ ├── dropdown_anim__00059.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00059@2x.png
│ ├── dropdown_anim__0006.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__0006@2x.png
│ ├── dropdown_anim__00060.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__00060@2x.png
│ ├── dropdown_anim__0007.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__0007@2x.png
│ ├── dropdown_anim__0008.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__0008@2x.png
│ ├── dropdown_anim__0009.imageset
│ │ ├── Contents.json
│ │ └── dropdown_anim__0009@2x.png
│ ├── dropdown_loading_01.imageset
│ │ ├── Contents.json
│ │ └── dropdown_loading_01@2x.png
│ ├── dropdown_loading_02.imageset
│ │ ├── Contents.json
│ │ └── dropdown_loading_02@2x.png
│ └── dropdown_loading_03.imageset
│ │ ├── Contents.json
│ │ └── dropdown_loading_03@2x.png
├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
├── BaseTableViewController.swift
├── CurveMask
│ ├── CurveMaskTableViewController.swift
│ ├── CurveRefreshHeader.swift
│ └── arrow_downWhite.png
├── Default
│ ├── DefaultCollectionViewController.swift
│ ├── DefaultScrollViewController.swift
│ ├── DefaultTableViewController.swift
│ └── DefaultWebViewController.swift
├── DianPing
│ ├── DianpingRefreshHeader.swift
│ └── DianpingTableviewController.swift
├── Info.plist
├── NavigationController.swift
├── QQRefresh
│ ├── QQStyleHeaderViewController.swift
│ ├── QQStylePullingIndicator.swift
│ └── QQStyleRefreshHeader.swift
├── QQVideo
│ ├── QQVideoRefreshHeader.swift
│ ├── QQVideoTableViewController.swift
│ └── Resource
│ │ ├── loading00@2x.png
│ │ ├── loading00@3x.png
│ │ ├── loading01@2x.png
│ │ ├── loading01@3x.png
│ │ ├── loading02@2x.png
│ │ ├── loading02@3x.png
│ │ ├── loading03@2x.png
│ │ ├── loading03@3x.png
│ │ ├── loading04@2x.png
│ │ ├── loading04@3x.png
│ │ ├── loading05@2x.png
│ │ ├── loading05@3x.png
│ │ ├── loading06@2x.png
│ │ ├── loading06@3x.png
│ │ ├── loading07@2x.png
│ │ ├── loading07@3x.png
│ │ ├── loading08@2x.png
│ │ ├── loading08@3x.png
│ │ ├── loading09@2x.png
│ │ ├── loading09@3x.png
│ │ ├── loading10@2x.png
│ │ ├── loading10@3x.png
│ │ ├── loading11@2x.png
│ │ ├── loading11@3x.png
│ │ ├── loading12@2x.png
│ │ ├── loading12@3x.png
│ │ ├── loading13@2x.png
│ │ ├── loading13@3x.png
│ │ ├── loading14@2x.png
│ │ ├── loading14@3x.png
│ │ ├── loading15@2x.png
│ │ ├── loading15@3x.png
│ │ ├── loading16@2x.png
│ │ ├── loading16@3x.png
│ │ ├── loading17@2x.png
│ │ ├── loading17@3x.png
│ │ ├── loading18@2x.png
│ │ ├── loading18@3x.png
│ │ ├── loading19@2x.png
│ │ ├── loading19@3x.png
│ │ ├── loading20@2x.png
│ │ ├── loading20@3x.png
│ │ ├── loading21@2x.png
│ │ ├── loading21@3x.png
│ │ ├── loading22@2x.png
│ │ ├── loading22@3x.png
│ │ ├── loading23@2x.png
│ │ ├── loading23@3x.png
│ │ ├── loading24@2x.png
│ │ ├── loading24@3x.png
│ │ ├── loading25@2x.png
│ │ ├── loading25@3x.png
│ │ ├── loading26@2x.png
│ │ ├── loading26@3x.png
│ │ ├── loading27@2x.png
│ │ ├── loading27@3x.png
│ │ ├── loading28@2x.png
│ │ ├── loading28@3x.png
│ │ ├── loading29@2x.png
│ │ └── loading29@3x.png
├── SectionModel.swift
├── TaoBao
│ ├── TaoBaoRefreshHeader.swift
│ ├── TaobaoTableViewController.swift
│ └── taobaoLogo.png
├── ViewController.swift
├── Wechat
│ ├── WechatRefreshHeader.swift
│ ├── WechatRefreshHeaderTestVC.swift
│ └── wechat.png
├── YahooWeather
│ ├── Resource
│ │ ├── sun_00000.png
│ │ ├── sun_00001.png
│ │ ├── sun_00002.png
│ │ ├── sun_00003.png
│ │ ├── sun_00004.png
│ │ ├── sun_00005.png
│ │ ├── sun_00006.png
│ │ ├── sun_00007.png
│ │ ├── sun_00008.png
│ │ ├── sun_00009.png
│ │ ├── sun_00010.png
│ │ ├── sun_00011.png
│ │ ├── sun_00012.png
│ │ ├── sun_00013.png
│ │ ├── sun_00014.png
│ │ ├── sun_00015.png
│ │ ├── sun_00016.png
│ │ ├── sun_00017.png
│ │ ├── sun_00018.png
│ │ ├── sun_00019.png
│ │ ├── sun_00020.png
│ │ ├── sun_00021.png
│ │ ├── sun_00022.png
│ │ ├── sun_00023.png
│ │ ├── sun_00024.png
│ │ ├── sun_00025.png
│ │ ├── sun_00026.png
│ │ ├── sun_00027.png
│ │ ├── sun_00028.png
│ │ ├── sun_00029.png
│ │ ├── sun_00030.png
│ │ ├── sun_00031.png
│ │ ├── sun_00032.png
│ │ ├── sun_00033.png
│ │ ├── sun_00034.png
│ │ ├── sun_00035.png
│ │ ├── sun_00036.png
│ │ ├── sun_00037.png
│ │ ├── sun_00038.png
│ │ ├── sun_00039.png
│ │ ├── sun_00040.png
│ │ ├── sun_00041.png
│ │ ├── sun_00042.png
│ │ ├── sun_00043.png
│ │ ├── sun_00044.png
│ │ ├── sun_00045.png
│ │ ├── sun_00046.png
│ │ ├── sun_00047.png
│ │ ├── sun_00048.png
│ │ ├── sun_00049.png
│ │ ├── sun_00050.png
│ │ ├── sun_00051.png
│ │ ├── sun_00052.png
│ │ ├── sun_00053.png
│ │ ├── sun_00054.png
│ │ ├── sun_00055.png
│ │ ├── sun_00056.png
│ │ ├── sun_00057.png
│ │ ├── sun_00058.png
│ │ ├── sun_00059.png
│ │ ├── sun_00060.png
│ │ ├── sun_00061.png
│ │ ├── sun_00062.png
│ │ ├── sun_00063.png
│ │ ├── sun_00064.png
│ │ ├── sun_00065.png
│ │ ├── sun_00066.png
│ │ ├── sun_00067.png
│ │ ├── sun_00068.png
│ │ ├── sun_00069.png
│ │ ├── sun_00070.png
│ │ ├── sun_00071.png
│ │ ├── sun_00072.png
│ │ ├── sun_00073.png
│ │ ├── sun_00074.png
│ │ ├── sun_00075.png
│ │ ├── sun_00076.png
│ │ ├── sun_00077.png
│ │ ├── sun_00078.png
│ │ ├── sun_00079.png
│ │ ├── sun_00080.png
│ │ ├── sun_00081.png
│ │ ├── sun_00082.png
│ │ ├── sun_00083.png
│ │ ├── sun_00084.png
│ │ ├── sun_00085.png
│ │ ├── sun_00086.png
│ │ ├── sun_00087.png
│ │ ├── sun_00088.png
│ │ ├── sun_00089.png
│ │ ├── sun_00090.png
│ │ ├── sun_00091.png
│ │ ├── sun_00092.png
│ │ ├── sun_00093.png
│ │ ├── sun_00094.png
│ │ ├── sun_00095.png
│ │ ├── sun_00096.png
│ │ ├── sun_00097.png
│ │ ├── sun_00098.png
│ │ ├── sun_00099.png
│ │ ├── sun_00100.png
│ │ ├── sun_00101.png
│ │ ├── sun_00102.png
│ │ ├── sun_00103.png
│ │ ├── sun_00104.png
│ │ ├── sun_00105.png
│ │ ├── sun_00106.png
│ │ ├── sun_00107.png
│ │ ├── sun_00108.png
│ │ ├── sun_00109.png
│ │ └── yahoo_logo@3x.png
│ ├── YahooWeatherRefreshHeader.swift
│ └── YahooWeatherTableViewController.swift
└── YouKu
│ ├── YoukuRefreshHeader.swift
│ ├── YoukuTableViewController.swift
│ ├── youku_ad.jpeg
│ ├── youku_down@3x.png
│ └── youku_refreshing@3x.png
├── LICENSE
├── README.md
└── logo.png
/.gitignore:
--------------------------------------------------------------------------------
1 | #CocoaPods
2 |
3 | Pods/
4 |
5 |
6 | # Xcode
7 |
8 | #
9 |
10 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore &Swift.gitignore
11 |
12 | # Mac OS X Finder and whatnot
13 |
14 | .DS_Store
15 |
16 | ## Build generated
17 |
18 | build/DerivedData/
19 |
20 | ## Various settings
21 |
22 | *.pbxuser!default.pbxuser
23 |
24 | *.mode1v3!default.mode1v3
25 |
26 | *.mode2v3!default.mode2v3
27 |
28 | *.perspectivev3!default.perspectivev3
29 |
30 | xcuserdata/
31 |
32 | ## Other
33 |
34 | *.moved-aside
35 |
36 | *.xcuserstate
37 |
38 | *.xccheckout
39 |
40 | ## Obj-C/Swift specific
41 |
42 | *.hmap
43 |
44 | *.ipa
45 |
46 | *.dSYM.zip
47 |
48 | *.dSYM
--------------------------------------------------------------------------------
/Demo/CurveMask.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/Demo/CurveMask.gif
--------------------------------------------------------------------------------
/Demo/QQ.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/Demo/QQ.gif
--------------------------------------------------------------------------------
/Demo/TXVideo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/Demo/TXVideo.gif
--------------------------------------------------------------------------------
/Demo/Taobao.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/Demo/Taobao.gif
--------------------------------------------------------------------------------
/Demo/Youku.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/Demo/Youku.gif
--------------------------------------------------------------------------------
/GTMRefresh.podspec:
--------------------------------------------------------------------------------
1 |
2 |
3 | Pod::Spec.new do |s|
4 |
5 | s.name = "GTMRefresh"
6 | s.version = "1.3.9"
7 | s.summary = "swift 实现的上拉刷新,下拉加载动效库"
8 | s.swift_version= "5.1"
9 |
10 | s.homepage = "https://github.com/GTMYang/GTMRefresh"
11 |
12 | s.license = { :type => "MIT", :file => "LICENSE" }
13 | s.author = { "GTMYang" => "17757128523@163.com" }
14 |
15 |
16 | s.source = { :git => "https://github.com/GTMYang/GTMRefresh.git", :tag => s.version }
17 | s.source_files = "GTMRefresh/*.{h,swift}"
18 | s.resources = 'GTMRefresh/Resource/**/*'
19 |
20 | s.ios.deployment_target = "8.0"
21 | s.frameworks = "UIKit"
22 |
23 | end
24 |
--------------------------------------------------------------------------------
/GTMRefresh.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/GTMRefresh.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/GTMRefresh.xcodeproj/xcuserdata/luoyang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/GTMRefresh.xcodeproj/xcuserdata/luoyang.xcuserdatad/xcschemes/GTMRefresh.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
52 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
70 |
71 |
72 |
73 |
75 |
76 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/GTMRefresh.xcodeproj/xcuserdata/luoyang.xcuserdatad/xcschemes/GTMRefreshExample.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/GTMRefresh.xcodeproj/xcuserdata/luoyang.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | GTMRefresh.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 | GTMRefreshExample.xcscheme
13 |
14 | orderHint
15 | 1
16 |
17 |
18 | SuppressBuildableAutocreation
19 |
20 | 267115411DF6AE0D00F27CEA
21 |
22 | primary
23 |
24 |
25 | 267115571DF6AEAA00F27CEA
26 |
27 | primary
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/GTMRefresh/DefaultGTMLoadMoreFooter.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DefaultGTMLoadMoreFooter.swift
3 | // GTMRefresh
4 | //
5 | // Created by 骆扬 on 2019/12/30.
6 | // Copyright © 2019 luoyang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 |
12 | public class DefaultGTMLoadMoreFooter: GTMLoadMoreFooter, SubGTMLoadMoreFooterProtocol {
13 |
14 | var pullUpToRefreshText: String = GTMRLocalize("pullUpToRefresh")
15 | public var loaddingText: String = GTMRLocalize("loadMore")
16 | public var noMoreDataText: String = GTMRLocalize("noMoreData")
17 | public var releaseLoadMoreText: String = GTMRLocalize("releaseLoadMore")
18 |
19 | var txtColor: UIColor? {
20 | didSet {
21 | if let color = txtColor {
22 | self.messageLabel.textColor = color
23 | }
24 | }
25 | }
26 | var idleImage: UIImage? {
27 | didSet {
28 | if let idleImg = idleImage {
29 | self.pullingIndicator.image = idleImg
30 | }
31 | }
32 | }
33 |
34 |
35 | lazy var pullingIndicator: UIImageView = {
36 | let pindicator = UIImageView()
37 | if let img = self.idleImage {
38 | pindicator.image = img
39 | } else {
40 | pindicator.image = UIImage(named: "arrow_down", in: Bundle(for: GTMLoadMoreFooter.self), compatibleWith: nil)
41 | }
42 | return pindicator
43 | }()
44 |
45 | lazy var loaddingIndicator: UIActivityIndicatorView = {
46 | let indicator = UIActivityIndicatorView()
47 | indicator.hidesWhenStopped = true
48 | indicator.style = .gray
49 | //indicator.backgroundColor = UIColor.white
50 |
51 | return indicator
52 | }()
53 |
54 | lazy var messageLabel: UILabel = {
55 | let label = UILabel()
56 | label.textAlignment = .center
57 | label.font = UIFont.systemFont(ofSize: 15)
58 |
59 | return label
60 | }()
61 |
62 | // MARK: Life Cycle
63 |
64 | override init(frame: CGRect) {
65 | super.init(frame: frame)
66 |
67 | self.contentView.addSubview(self.messageLabel)
68 | self.contentView.addSubview(self.pullingIndicator)
69 | self.contentView.addSubview(self.loaddingIndicator)
70 | }
71 |
72 | required public init?(coder aDecoder: NSCoder) {
73 | fatalError("init(coder:) has not been implemented")
74 | }
75 |
76 | override public func willMove(toSuperview newSuperview: UIView?) {
77 | super.willMove(toSuperview: newSuperview)
78 |
79 | guard newSuperview != nil else {
80 | return
81 | }
82 |
83 | self.pullingIndicator.transform = CGAffineTransform(rotationAngle: CGFloat(-Double.pi+0.000001))
84 | }
85 |
86 | // MARK: Layout
87 |
88 | override public func layoutSubviews() {
89 | super.layoutSubviews()
90 |
91 | let center = CGPoint(x: frame.width * 0.5 - 70 - 30, y: frame.height * 0.5)
92 | pullingIndicator.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
93 | pullingIndicator.mj_center = center
94 |
95 | loaddingIndicator.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
96 | loaddingIndicator.mj_center = center
97 | messageLabel.frame = self.bounds
98 | }
99 |
100 | // MARK: SubGTMLoadMoreFooterProtocol
101 |
102 | /// 控件的高度
103 | ///
104 | /// - Returns: 控件的高度
105 | public func contentHeith() -> CGFloat {
106 | return 50.0
107 | }
108 |
109 | public func toNormalState() {
110 | self.pullingIndicator.isHidden = false
111 | self.loaddingIndicator.isHidden = true
112 | self.loaddingIndicator.stopAnimating()
113 |
114 | self.messageLabel.text = self.pullUpToRefreshText
115 | // print(".........\(self.messageLabel.text ?? "")")
116 | UIView.animate(withDuration: 0.4, animations: {
117 | self.pullingIndicator.transform = CGAffineTransform(rotationAngle: CGFloat(-Double.pi+0.000001))
118 | })
119 | }
120 | public func toNoMoreDataState() {
121 | self.pullingIndicator.isHidden = true
122 | self.loaddingIndicator.isHidden = true
123 | self.loaddingIndicator.stopAnimating()
124 |
125 | self.messageLabel.text = self.noMoreDataText
126 | }
127 | public func toWillRefreshState() {
128 | messageLabel.text = self.releaseLoadMoreText
129 | UIView.animate(withDuration: 0.4, animations: {
130 | self.pullingIndicator.transform = CGAffineTransform.identity
131 | })
132 | }
133 | public func toRefreshingState() {
134 | self.pullingIndicator.isHidden = true
135 | self.loaddingIndicator.isHidden = false
136 | self.loaddingIndicator.startAnimating()
137 |
138 | messageLabel.text = self.loaddingText
139 | }
140 |
141 | }
142 |
--------------------------------------------------------------------------------
/GTMRefresh/GTMRefreshComponent.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GTMRefreshComponent.swift
3 | // GTMRefresh
4 | //
5 | // Created by luoyang on 2016/12/7.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | /// 状态枚举
12 | ///
13 | /// - idle: 闲置
14 | /// - pulling: 可以进行刷新
15 | /// - refreshing: 正在刷新
16 | /// - willRefresh: 即将刷新
17 | /// - noMoreData: 没有更多数据
18 | public enum GTMRefreshState {
19 | case idle // 闲置
20 | case pulling // 可以进行刷新
21 | case refreshing // 正在刷新
22 | case willRefresh // 即将刷新
23 | case noMoreData // 没有更多数据
24 | }
25 |
26 | public protocol SubGTMRefreshComponentProtocol {
27 | func scollViewContentOffsetDidChange(change: [NSKeyValueChangeKey : Any]?)
28 | func scollViewContentSizeDidChange(change: [NSKeyValueChangeKey : Any]?)
29 | }
30 |
31 | open class GTMRefreshComponent: UIView {
32 |
33 | public weak var scrollView: UIScrollView?
34 |
35 | public var scrollViewOriginalInset: UIEdgeInsets?
36 |
37 | var state: GTMRefreshState = .idle
38 |
39 | // MARK: Life Cycle
40 |
41 | override init(frame: CGRect) {
42 | super.init(frame: frame)
43 | setup()
44 | }
45 |
46 | required public init?(coder aDecoder: NSCoder) {
47 | super.init(coder: aDecoder)
48 | setup()
49 | }
50 |
51 | func setup() {
52 | self.autoresizingMask = UIView.AutoresizingMask.flexibleWidth
53 | self.backgroundColor = UIColor.clear
54 |
55 | self.state = .idle
56 | }
57 |
58 | override open func draw(_ rect: CGRect) {
59 | super.draw(rect)
60 |
61 | if self.state == .willRefresh {
62 | // 预防view还没显示出来就调用了beginRefreshing
63 | self.state = .refreshing
64 | }
65 | }
66 |
67 | deinit {
68 | if GTMRefreshConstant.debug { print("GTMRefreshComponent excute deinit() ... ")}
69 | }
70 |
71 | override open func willMove(toSuperview newSuperview: UIView?) {
72 | super.willMove(toSuperview: newSuperview)
73 |
74 | guard let scrollView = newSuperview as? UIScrollView else {
75 | return
76 | }
77 |
78 | self.mj_x = 0
79 | self.mj_w = scrollView.mj_w
80 |
81 | self.scrollView = scrollView
82 | // 设置永远支持垂直弹簧效果
83 | self.scrollView?.alwaysBounceVertical = true
84 | self.scrollViewOriginalInset = scrollView.mj_inset
85 |
86 | }
87 |
88 | open override func willMove(toWindow newWindow: UIWindow?) {
89 | super.willMove(toWindow: newWindow)
90 |
91 | if newWindow != nil {
92 | self.addObserver()
93 | } else {
94 | self.removeAbserver()
95 | }
96 | }
97 |
98 |
99 | // MARK: KVO
100 |
101 | private func addObserver() {
102 | if GTMRefreshConstant.debug { print("GTMRefresh -> addObserver ... ")}
103 | scrollView?.addObserver(self, forKeyPath: GTMRefreshConstant.keyPathContentOffset, options: .new, context: nil)
104 | scrollView?.addObserver(self, forKeyPath: GTMRefreshConstant.keyPathContentSize, options: .new, context: nil)
105 | }
106 |
107 | private func removeAbserver() {
108 | if GTMRefreshConstant.debug { print("GTMRefresh -> removeAbserver ... ")}
109 | scrollView?.removeObserver(self, forKeyPath: GTMRefreshConstant.keyPathContentOffset)
110 | scrollView?.removeObserver(self, forKeyPath: GTMRefreshConstant.keyPathContentSize)
111 | }
112 |
113 | override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
114 | guard isUserInteractionEnabled else {
115 | return
116 | }
117 |
118 | if let sub: SubGTMRefreshComponentProtocol = self as? SubGTMRefreshComponentProtocol {
119 | if keyPath == GTMRefreshConstant.keyPathContentSize {
120 | sub.scollViewContentSizeDidChange(change: change)
121 | }
122 |
123 | if self.isHidden {
124 | return
125 | }
126 |
127 | if keyPath == GTMRefreshConstant.keyPathContentOffset {
128 | sub.scollViewContentOffsetDidChange(change: change)
129 | }
130 |
131 | }
132 | }
133 |
134 |
135 |
136 | }
137 |
--------------------------------------------------------------------------------
/GTMRefresh/GTMRefreshConstant.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GTMRefreshConstant.swift
3 | // GTMRefresh
4 | //
5 | // Created by luoyang on 2016/12/7.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class GTMRefreshConstant {
12 | static let slowAnimationDuration: TimeInterval = 0.4
13 | static let fastAnimationDuration: TimeInterval = 0.25
14 |
15 |
16 | static let keyPathContentOffset: String = "contentOffset"
17 | static let keyPathContentInset: String = "contentInset"
18 | static let keyPathContentSize: String = "contentSize"
19 | // static let keyPathPanState: String = "state"
20 |
21 |
22 | static var associatedObjectGtmHeader = 0
23 | static var associatedObjectGtmFooter = 1
24 |
25 | static let debug = false
26 | }
27 |
28 | public func GTMRLocalize(_ string:String)->String{
29 | return NSLocalizedString(string, tableName: "Localize", bundle: Bundle(for: DefaultGTMRefreshHeader.self), value: "", comment: "")
30 | }
31 | public struct GTMRHeaderString{
32 | static public let pullDownToRefresh = GTMRLocalize("pullDownToRefresh")
33 | static public let releaseToRefresh = GTMRLocalize("releaseToRefresh")
34 | static public let refreshSuccess = GTMRLocalize("refreshSuccess")
35 | static public let refreshFailure = GTMRLocalize("refreshFailure")
36 | static public let refreshing = GTMRLocalize("refreshing")
37 | }
38 |
39 | public struct GTMRFooterString{
40 | static public let pullUpToRefresh = GTMRLocalize("pullUpToRefresh")
41 | static public let loadding = GTMRLocalize("loadMore")
42 | static public let noMoreData = GTMRLocalize("noMoreData")
43 | static public let releaseLoadMore = GTMRLocalize("releaseLoadMore")
44 | //static public let scrollAndTapToRefresh = GTMRLocalize("scrollAndTapToRefresh")
45 | }
46 |
--------------------------------------------------------------------------------
/GTMRefresh/GTMRefreshStyle.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GTMRefreshStyle.swift
3 | // GTMRefresh
4 | //
5 | // Created by luoyang on 2017/8/8.
6 | // Copyright © 2017年 luoyang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UIScrollView {
12 |
13 | // MARK: - 自定义 header 文字
14 | @discardableResult
15 | final public func pullDownToRefreshText(_ text: String) -> UIScrollView {
16 | if let header = self.gtmHeader as? DefaultGTMRefreshHeader {
17 | header.pullDownToRefresh = text
18 | }
19 | return self
20 | }
21 | @discardableResult
22 | final public func releaseToRefreshText(_ text: String) -> UIScrollView {
23 | if let header = self.gtmHeader as? DefaultGTMRefreshHeader {
24 | header.releaseToRefresh = text
25 | }
26 | return self
27 | }
28 | @discardableResult
29 | final public func refreshSuccessText(_ text: String) -> UIScrollView {
30 | if let header = self.gtmHeader as? DefaultGTMRefreshHeader {
31 | header.refreshSuccess = text
32 | }
33 | return self
34 | }
35 | @discardableResult
36 | final public func refreshFailureText(_ text: String) -> UIScrollView {
37 | if let header = self.gtmHeader as? DefaultGTMRefreshHeader {
38 | header.refreshFailure = text
39 | }
40 | return self
41 | }
42 | @discardableResult
43 | final public func refreshingText(_ text: String) -> UIScrollView {
44 | if let header = self.gtmHeader as? DefaultGTMRefreshHeader {
45 | header.refreshing = text
46 | }
47 | return self
48 | }
49 |
50 |
51 | //MARK: - 自定义 footer 文字
52 | @discardableResult
53 | final public func pullUpToRefreshText(_ text: String) -> UIScrollView {
54 | if let footer = self.gtmFooter as? DefaultGTMLoadMoreFooter {
55 | footer.pullUpToRefreshText = text
56 | }
57 | return self
58 | }
59 | @discardableResult
60 | final public func loaddingText(_ text: String) -> UIScrollView {
61 | if let footer = self.gtmFooter as? DefaultGTMLoadMoreFooter {
62 | footer.loaddingText = text
63 | }
64 | return self
65 | }
66 | @discardableResult
67 | final public func noMoreDataText(_ text: String) -> UIScrollView {
68 | if let footer = self.gtmFooter as? DefaultGTMLoadMoreFooter {
69 | footer.noMoreDataText = text
70 | }
71 | return self
72 | }
73 | @discardableResult
74 | final public func releaseLoadMoreText(_ text: String) -> UIScrollView {
75 | if let footer = self.gtmFooter as? DefaultGTMLoadMoreFooter {
76 | footer.releaseLoadMoreText = text
77 | }
78 | return self
79 | }
80 |
81 | //MARK: - 自定义文字颜色
82 | @discardableResult
83 | final public func headerTextColor(_ color: UIColor) -> UIScrollView {
84 | if let header = self.gtmHeader as? DefaultGTMRefreshHeader {
85 | header.txtColor = color
86 | }
87 | return self
88 | }
89 | @discardableResult
90 | final public func footerTextColor(_ color: UIColor) -> UIScrollView {
91 | if let footer = self.gtmFooter as? DefaultGTMLoadMoreFooter {
92 | footer.txtColor = color
93 | }
94 | return self
95 | }
96 |
97 | //MARK: - 自定义文图片
98 | // header's
99 | @discardableResult
100 | final public func headerIdleImage(_ image: UIImage?) -> UIScrollView {
101 | if let header = self.gtmHeader as? DefaultGTMRefreshHeader {
102 | header.idleImage = image
103 | }
104 | return self
105 | }
106 | @discardableResult
107 | final public func headerSucImage(_ image: UIImage?) -> UIScrollView {
108 | if let header = self.gtmHeader as? DefaultGTMRefreshHeader {
109 | header.sucImage = image
110 | }
111 | return self
112 | }
113 | @discardableResult
114 | final public func headerFailImage(_ image: UIImage?) -> UIScrollView {
115 | if let header = self.gtmHeader as? DefaultGTMRefreshHeader {
116 | header.failImage = image
117 | }
118 | return self
119 | }
120 | // footer's
121 | @discardableResult
122 | final public func footerIdleImage(_ image: UIImage?) -> UIScrollView {
123 | if let footer = self.gtmFooter as? DefaultGTMLoadMoreFooter {
124 | footer.idleImage = image
125 | }
126 | return self
127 | }
128 |
129 | }
130 |
--------------------------------------------------------------------------------
/GTMRefresh/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | $(MARKETING_VERSION)
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/GTMRefresh/Resource/Base.lproj/Localize.strings:
--------------------------------------------------------------------------------
1 | /*
2 | Localize.strings
3 | GTMRefresh
4 |
5 | Created by luoyang on 2016/12/8.
6 | Copyright © 2016年 luoyang. All rights reserved.
7 | */
8 | pullDownToRefresh = "Pull to refresh";
9 |
10 | releaseToRefresh = "Release to refresh";
11 |
12 | refreshSuccess = "Update successful";
13 |
14 | refreshFailure = "Update failed";
15 |
16 | refreshing = "Refreshing...";
17 |
18 | pullUpToRefresh = "Scroll to load";
19 |
20 | noMoreData = "No more data, daling!";
21 |
22 | tapToRefresh = "Tap to refresh";
23 |
24 | scrollAndTapToRefresh = "Scroll or tap to load";
25 |
26 | loadMore = "Loading...";
27 |
28 | releaseLoadMore = "Release to load more";
29 |
--------------------------------------------------------------------------------
/GTMRefresh/Resource/arrow_down@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefresh/Resource/arrow_down@3x.png
--------------------------------------------------------------------------------
/GTMRefresh/Resource/en.lproj/Localize.strings:
--------------------------------------------------------------------------------
1 | /*
2 | Localize.strings
3 | GTMRefresh
4 |
5 | Created by luoyang on 2016/12/8.
6 | Copyright © 2016年 luoyang. All rights reserved.
7 | */
8 | pullDownToRefresh = "Pull to refresh";
9 |
10 | releaseToRefresh = "Release to refresh";
11 |
12 | refreshSuccess = "Update successful";
13 |
14 | refreshFailure = "Update failed";
15 |
16 | refreshing = "Refreshing...";
17 |
18 | pullUpToRefresh = "Scroll to load";
19 |
20 | noMoreData = "No more data, daling!";
21 |
22 | tapToRefresh = "Tap to refresh";
23 |
24 | scrollAndTapToRefresh = "Scroll or tap to load";
25 |
26 | loadMore = "Loading...";
27 |
28 | releaseLoadMore = "Release to load more";
29 |
--------------------------------------------------------------------------------
/GTMRefresh/Resource/failure@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefresh/Resource/failure@3x.png
--------------------------------------------------------------------------------
/GTMRefresh/Resource/success@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefresh/Resource/success@3x.png
--------------------------------------------------------------------------------
/GTMRefresh/Resource/zh-Hans.lproj/Localize.strings:
--------------------------------------------------------------------------------
1 | /*
2 | Localize.strings
3 | GTMRefresh
4 |
5 | Created by luoyang on 2016/12/8.
6 | Copyright © 2016年 luoyang. All rights reserved.
7 | */
8 | pullDownToRefresh = "下拉可以刷新";
9 |
10 | releaseToRefresh = "松开立即刷新";
11 |
12 | refreshSuccess = "刷新成功";
13 |
14 | refreshFailure = "刷新失败";
15 |
16 | refreshing = "正在刷新数据中...";
17 |
18 | pullUpToRefresh = "上拉加载更多数据";
19 |
20 | noMoreData = "真没有了,哥!";
21 |
22 | tapToRefresh = "点击加载更多";
23 |
24 | scrollAndTapToRefresh = "上拉或点击加载更多";
25 |
26 | loadMore = "正在加载...";
27 |
28 | releaseLoadMore = "松开加载更多";
29 |
--------------------------------------------------------------------------------
/GTMRefreshExample/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // GTMRefreshExample
4 | //
5 | // Created by luoyang on 2016/12/6.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 |
17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
18 | // Override point for customization after application launch.
19 | return true
20 | }
21 |
22 | func applicationWillResignActive(_ application: UIApplication) {
23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
25 | }
26 |
27 | func applicationDidEnterBackground(_ application: UIApplication) {
28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
30 | }
31 |
32 | func applicationWillEnterForeground(_ application: UIApplication) {
33 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
34 | }
35 |
36 | func applicationDidBecomeActive(_ application: UIApplication) {
37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
38 | }
39 |
40 | func applicationWillTerminate(_ application: UIApplication) {
41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
42 | }
43 |
44 |
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/1024.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-40.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-60.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-58.png",
19 | "scale" : "2x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-87.png",
25 | "scale" : "3x"
26 | },
27 | {
28 | "size" : "40x40",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-80.png",
31 | "scale" : "2x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-120.png",
37 | "scale" : "3x"
38 | },
39 | {
40 | "size" : "60x60",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-121.png",
43 | "scale" : "2x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-180.png",
49 | "scale" : "3x"
50 | },
51 | {
52 | "size" : "1024x1024",
53 | "idiom" : "ios-marketing",
54 | "filename" : "1024.png",
55 | "scale" : "1x"
56 | }
57 | ],
58 | "info" : {
59 | "version" : 1,
60 | "author" : "xcode"
61 | }
62 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-120.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-121.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-121.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-180.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-40.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-58.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-60.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-80.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/AppIcon.appiconset/Icon-87.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0001.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__0001@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0001.imageset/dropdown_anim__0001@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__0001.imageset/dropdown_anim__0001@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00010.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00010@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00010.imageset/dropdown_anim__00010@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00010.imageset/dropdown_anim__00010@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00011.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00011@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00011.imageset/dropdown_anim__00011@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00011.imageset/dropdown_anim__00011@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00012.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00012@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00012.imageset/dropdown_anim__00012@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00012.imageset/dropdown_anim__00012@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00013.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00013@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00013.imageset/dropdown_anim__00013@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00013.imageset/dropdown_anim__00013@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00014.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00014@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00014.imageset/dropdown_anim__00014@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00014.imageset/dropdown_anim__00014@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00015.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00015@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00015.imageset/dropdown_anim__00015@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00015.imageset/dropdown_anim__00015@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00016.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00016@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00016.imageset/dropdown_anim__00016@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00016.imageset/dropdown_anim__00016@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00017.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00017@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00017.imageset/dropdown_anim__00017@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00017.imageset/dropdown_anim__00017@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00018.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00018@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00018.imageset/dropdown_anim__00018@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00018.imageset/dropdown_anim__00018@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00019.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00019@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00019.imageset/dropdown_anim__00019@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00019.imageset/dropdown_anim__00019@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0002.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__0002@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0002.imageset/dropdown_anim__0002@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__0002.imageset/dropdown_anim__0002@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00020.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00020@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00020.imageset/dropdown_anim__00020@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00020.imageset/dropdown_anim__00020@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00021.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00021@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00021.imageset/dropdown_anim__00021@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00021.imageset/dropdown_anim__00021@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00022.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00022@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00022.imageset/dropdown_anim__00022@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00022.imageset/dropdown_anim__00022@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00023.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00023@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00023.imageset/dropdown_anim__00023@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00023.imageset/dropdown_anim__00023@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00024.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00024@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00024.imageset/dropdown_anim__00024@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00024.imageset/dropdown_anim__00024@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00025.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00025@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00025.imageset/dropdown_anim__00025@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00025.imageset/dropdown_anim__00025@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00026.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00026@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00026.imageset/dropdown_anim__00026@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00026.imageset/dropdown_anim__00026@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00027.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00027@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00027.imageset/dropdown_anim__00027@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00027.imageset/dropdown_anim__00027@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00028.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00028@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00028.imageset/dropdown_anim__00028@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00028.imageset/dropdown_anim__00028@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00029.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00029@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00029.imageset/dropdown_anim__00029@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00029.imageset/dropdown_anim__00029@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0003.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__0003@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0003.imageset/dropdown_anim__0003@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__0003.imageset/dropdown_anim__0003@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00030.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00030@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00030.imageset/dropdown_anim__00030@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00030.imageset/dropdown_anim__00030@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00031.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00031@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00031.imageset/dropdown_anim__00031@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00031.imageset/dropdown_anim__00031@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00032.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00032@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00032.imageset/dropdown_anim__00032@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00032.imageset/dropdown_anim__00032@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00033.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00033@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00033.imageset/dropdown_anim__00033@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00033.imageset/dropdown_anim__00033@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00034.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00034@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00034.imageset/dropdown_anim__00034@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00034.imageset/dropdown_anim__00034@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00035.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00035@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00035.imageset/dropdown_anim__00035@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00035.imageset/dropdown_anim__00035@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00036.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00036@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00036.imageset/dropdown_anim__00036@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00036.imageset/dropdown_anim__00036@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00037.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00037@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00037.imageset/dropdown_anim__00037@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00037.imageset/dropdown_anim__00037@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00038.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00038@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00038.imageset/dropdown_anim__00038@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00038.imageset/dropdown_anim__00038@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00039.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00039@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00039.imageset/dropdown_anim__00039@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00039.imageset/dropdown_anim__00039@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0004.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__0004@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0004.imageset/dropdown_anim__0004@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__0004.imageset/dropdown_anim__0004@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00040.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00040@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00040.imageset/dropdown_anim__00040@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00040.imageset/dropdown_anim__00040@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00041.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00041@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00041.imageset/dropdown_anim__00041@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00041.imageset/dropdown_anim__00041@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00042.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00042@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00042.imageset/dropdown_anim__00042@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00042.imageset/dropdown_anim__00042@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00043.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00043@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00043.imageset/dropdown_anim__00043@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00043.imageset/dropdown_anim__00043@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00044.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00044@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00044.imageset/dropdown_anim__00044@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00044.imageset/dropdown_anim__00044@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00045.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00045@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00045.imageset/dropdown_anim__00045@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00045.imageset/dropdown_anim__00045@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00046.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00046@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00046.imageset/dropdown_anim__00046@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00046.imageset/dropdown_anim__00046@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00047.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00047@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00047.imageset/dropdown_anim__00047@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00047.imageset/dropdown_anim__00047@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00048.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00048@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00048.imageset/dropdown_anim__00048@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00048.imageset/dropdown_anim__00048@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00049.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00049@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00049.imageset/dropdown_anim__00049@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00049.imageset/dropdown_anim__00049@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0005.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__0005@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0005.imageset/dropdown_anim__0005@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__0005.imageset/dropdown_anim__0005@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00050.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00050@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00050.imageset/dropdown_anim__00050@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00050.imageset/dropdown_anim__00050@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00051.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00051@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00051.imageset/dropdown_anim__00051@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00051.imageset/dropdown_anim__00051@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00052.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00052@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00052.imageset/dropdown_anim__00052@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00052.imageset/dropdown_anim__00052@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00053.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00053@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00053.imageset/dropdown_anim__00053@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00053.imageset/dropdown_anim__00053@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00054.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00054@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00054.imageset/dropdown_anim__00054@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00054.imageset/dropdown_anim__00054@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00055.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00055@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00055.imageset/dropdown_anim__00055@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00055.imageset/dropdown_anim__00055@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00056.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00056@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00056.imageset/dropdown_anim__00056@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00056.imageset/dropdown_anim__00056@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00057.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00057@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00057.imageset/dropdown_anim__00057@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00057.imageset/dropdown_anim__00057@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00058.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00058@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00058.imageset/dropdown_anim__00058@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00058.imageset/dropdown_anim__00058@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00059.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00059@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00059.imageset/dropdown_anim__00059@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00059.imageset/dropdown_anim__00059@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0006.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__0006@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0006.imageset/dropdown_anim__0006@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__0006.imageset/dropdown_anim__0006@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00060.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__00060@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__00060.imageset/dropdown_anim__00060@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__00060.imageset/dropdown_anim__00060@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0007.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__0007@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0007.imageset/dropdown_anim__0007@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__0007.imageset/dropdown_anim__0007@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0008.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__0008@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0008.imageset/dropdown_anim__0008@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__0008.imageset/dropdown_anim__0008@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0009.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_anim__0009@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_anim__0009.imageset/dropdown_anim__0009@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_anim__0009.imageset/dropdown_anim__0009@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_loading_01.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_loading_01@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_loading_01.imageset/dropdown_loading_01@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_loading_01.imageset/dropdown_loading_01@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_loading_02.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_loading_02@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_loading_02.imageset/dropdown_loading_02@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_loading_02.imageset/dropdown_loading_02@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_loading_03.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "dropdown_loading_03@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/GTMRefreshExample/Assets.xcassets/dropdown_loading_03.imageset/dropdown_loading_03@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Assets.xcassets/dropdown_loading_03.imageset/dropdown_loading_03@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/GTMRefreshExample/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/GTMRefreshExample/BaseTableViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseTableViewController.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class BaseTableViewController: UITableViewController {
12 | var models = ["1、你若安好,便是晴天。",
13 | "2、人生没有彩排,每一天都是现场直播。",
14 | "3、我们走得太快,灵魂都跟不上了。",
15 | "4、人生就像一杯茶,不会苦一辈子,但总会苦一阵子。",
16 | "5、人生如果错了方向,停止就是进步。",
17 | "6、理想很丰满,现实很骨感。",
18 | "7、男人一有钱就变坏,女人一边坏就有钱。",
19 | "8、择一城终老,遇一人白首。",
20 | "9、低头要有勇气,抬头要有底气。",
21 | "10、愿得一人心,白首不分离。",
22 | "11、一个人炫耀什么,说明内心缺少什么。",
23 | "12、试金可以用火,试女人可以用金,试男人可以用女人。",
24 | "13、时间就像一张网,你撒在哪里,你的收获就在哪里。",
25 | "14、学习要加,骄傲要减,机会要乘,懒惰要除。",
26 | "15、如果你简单,这个世界就对你简单。"]
27 | override func viewDidLoad() {
28 | super.viewDidLoad()
29 | self.tableView.tableFooterView = UIView(frame: CGRect.zero)
30 | self.edgesForExtendedLayout = []
31 | }
32 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
33 | return models.count
34 | }
35 | override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
36 | return 44.0
37 | }
38 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
39 | var cell = tableView.dequeueReusableCell(withIdentifier: "cell")
40 | if cell == nil {
41 | cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
42 | // cell?.backgroundColor = UIColor(colorLiteralRed: 249/255, green: 148/255, blue: 28/255, alpha: 1.0)
43 | }
44 | cell?.textLabel?.text = "\(models[(indexPath as NSIndexPath).row])"
45 | return cell!
46 | }
47 | deinit{
48 | print("Deinit of \(NSStringFromClass(type(of: self)))")
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/GTMRefreshExample/CurveMask/CurveMaskTableViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CurveMaskTableViewController.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | class CurveMaskTableViewController:BaseTableViewController{
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 |
16 | //Setup
17 | let curveHeader = CurveRefreshHeader()
18 | self.tableView.gtm_addRefreshHeaderView(refreshHeader: curveHeader) {
19 | [weak self] in
20 | print("excute refreshBlock")
21 | self?.refresh()
22 | }
23 | self.tableView.triggerRefreshing()
24 | }
25 |
26 |
27 | func refresh() {
28 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
29 | }
30 |
31 | @objc func endRefresing() {
32 | self.tableView.endRefreshing(isSuccess: true)
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/GTMRefreshExample/CurveMask/CurveRefreshHeader.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CurveRefreshHeader.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import GTMRefresh
10 | import UIKit
11 |
12 | class CurveRefreshHeader: GTMRefreshHeader, SubGTMRefreshHeaderProtocol {
13 |
14 | let pullingIndicator = UIImageView()
15 | // let bgColor = UIColor(red: 77.0/255.0, green: 184.0/255.0, blue: 255.0/255.0, alpha: 0.65)
16 | let totalHeight = UIScreen.main.bounds.size.height
17 | let maskLayer = CAShapeLayer()
18 | let spinner = UIActivityIndicatorView(style: .gray)
19 | let backgroundLayer = CALayer()
20 |
21 | override init(frame: CGRect) {
22 | super.init(frame: frame)
23 | pullingIndicator.image = UIImage(named: "arrow_downWhite")
24 |
25 | self.contentView.layer.addSublayer(backgroundLayer)
26 | backgroundLayer.backgroundColor = UIColor(red: 77.0/255.0, green: 184.0/255.0, blue: 255.0/255.0, alpha: 0.65).cgColor
27 | backgroundLayer.mask = maskLayer
28 |
29 | self.contentView.addSubview(pullingIndicator)
30 | self.contentView.addSubview(spinner)
31 | }
32 |
33 | override func layoutSubviews() {
34 | super.layoutSubviews()
35 |
36 | let center = CGPoint(x: self.contentView.bounds.width/2, y: self.contentView.bounds.height - 30)
37 | spinner.center = center
38 |
39 | pullingIndicator.frame = CGRect(x: 0, y: 0, width: 25, height: 25)
40 | pullingIndicator.center = center
41 |
42 | backgroundLayer.bounds = self.contentView.bounds
43 | backgroundLayer.position = CGPoint(x: self.contentView.bounds.width/2, y: self.contentView.bounds.height/2)
44 |
45 | maskLayer.bounds = self.contentView.bounds
46 | maskLayer.anchorPoint = CGPoint(x: 0.0, y: 0.0)
47 | }
48 | required init?(coder aDecoder: NSCoder) {
49 | fatalError("init(coder:) has not been implemented")
50 | }
51 |
52 | override func refreshingHoldHeight() -> CGFloat {
53 | return 60
54 | }
55 |
56 | /// 即将触发刷新的高度(特殊的控件需要重写该方法,返回不同的数值)
57 | ///
58 | /// - Returns: 触发刷新的高度
59 | open override func willRefresHeight() -> CGFloat {
60 | return 60
61 | }
62 |
63 |
64 |
65 | func toNormalState() {
66 | UIView.animate(withDuration: 0.4, animations: {
67 | self.pullingIndicator.transform = CGAffineTransform.identity
68 | })
69 | }
70 | func toRefreshingState() {
71 | spinner.startAnimating()
72 | let controPoint = CGPoint(x: self.bounds.width/2, y: self.bounds.height - 60.0)
73 | self.maskLayer.path = createLayerWithY(60, controlPoint: controPoint).cgPath
74 | }
75 | func toPullingState() {
76 | // UIView.animate(withDuration: 0.4, animations: {
77 | // self.pullingIndicator.transform = CGAffineTransform(rotationAngle: CGFloat(-Double.pi+0.000001))
78 | // })
79 | }
80 |
81 | func changePullingPercent(percent: CGFloat) {
82 | let heightScrolled = 60 * percent;
83 | let adjustHeight = heightScrolled < 60 ? heightScrolled : 60;
84 | // print(adjustHeight)
85 | let controlPoint = CGPoint(x: self.bounds.width/2, y: self.bounds.height + adjustHeight)
86 | let bezierPath = createLayerWithY(adjustHeight,controlPoint: controlPoint)
87 | self.maskLayer.path = bezierPath.cgPath
88 |
89 | self.pullingIndicator.transform = CGAffineTransform(rotationAngle: CGFloat(-Double.pi+Double.pi*2*Double(percent)))
90 | }
91 | func willEndRefreshing(isSuccess: Bool) {
92 | spinner.stopAnimating()
93 | pullingIndicator.transform = CGAffineTransform.identity
94 | // imageView.image = UIImage(named: "success")
95 | }
96 | func didEndRefreshing() {
97 | pullingIndicator.image = UIImage(named: "arrow_downWhite")
98 | }
99 | func contentHeight()->CGFloat{
100 | return 500
101 | }
102 |
103 | // MARK: Private
104 | func createLayerWithY(_ y:CGFloat,controlPoint:CGPoint)->UIBezierPath{
105 | let bezierPath = UIBezierPath()
106 | bezierPath.move(to: CGPoint(x: 0, y: 0));
107 | bezierPath.addLine(to: CGPoint(x: self.bounds.width, y: 0))
108 | bezierPath.addLine(to: CGPoint(x: self.bounds.width, y: self.bounds.height - y))
109 | bezierPath.addQuadCurve(to: CGPoint(x: 0, y: self.bounds.height - y), controlPoint: controlPoint)
110 | bezierPath.addLine(to: CGPoint(x: 0, y: 0))
111 | return bezierPath
112 | }
113 |
114 | }
115 |
--------------------------------------------------------------------------------
/GTMRefreshExample/CurveMask/arrow_downWhite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/CurveMask/arrow_downWhite.png
--------------------------------------------------------------------------------
/GTMRefreshExample/Default/DefaultCollectionViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DefaultCollectionViewController.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | class DefaultCollectionViewController:UIViewController,UICollectionViewDataSource{
13 | var collectionView:UICollectionView?
14 | override func viewDidLoad() {
15 | self.view.backgroundColor = UIColor.white
16 | self.setUpCollectionView()
17 |
18 | self.collectionView?.gtm_addRefreshHeaderView {
19 | [weak self] in
20 | print("excute refreshBlock")
21 | self?.refresh()
22 | }
23 |
24 | self.collectionView?.gtm_addLoadMoreFooterView {
25 | [weak self] in
26 | print("excute loadMoreBlock")
27 | self?.loadMore()
28 | }
29 | }
30 |
31 |
32 | // MARK: Test
33 | func refresh() {
34 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
35 | }
36 |
37 | @objc func endRefresing() {
38 | self.collectionView?.endRefreshing(isSuccess: true)
39 | }
40 | func loadMore() {
41 | perform(#selector(endLoadMore), with: nil, afterDelay: 3)
42 | }
43 |
44 | @objc func endLoadMore() {
45 | self.collectionView?.endLoadMore(isNoMoreData: true)
46 | }
47 |
48 |
49 |
50 | func setUpCollectionView(){
51 | let flowLayout = UICollectionViewFlowLayout()
52 | flowLayout.scrollDirection = UICollectionView.ScrollDirection.vertical
53 | flowLayout.itemSize = CGSize(width: 100, height: 100)
54 | self.collectionView = UICollectionView(frame: self.view.bounds, collectionViewLayout: flowLayout)
55 | self.collectionView?.backgroundColor = UIColor.white
56 | self.collectionView?.dataSource = self
57 | self.view.addSubview(self.collectionView!)
58 |
59 | self.collectionView?.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "cell")
60 | }
61 | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
62 | return 21
63 | }
64 | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
65 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
66 | cell.backgroundColor = UIColor.lightGray
67 | return cell
68 | }
69 | deinit{
70 | print("Deinit of DefaultCollectionViewController")
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/GTMRefreshExample/Default/DefaultScrollViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DefaultScrollViewController.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 | import GTMRefresh
12 |
13 | class DefaultScrollViewController:UIViewController{
14 | var scrollView:UIScrollView?
15 | override func viewDidLoad() {
16 | super.viewDidLoad()
17 | self.view.backgroundColor = UIColor.white
18 | self.automaticallyAdjustsScrollViewInsets = false
19 | setUpScrollView()
20 |
21 | self.scrollView?.gtm_addRefreshHeaderView {
22 | [weak self] in
23 | print("excute refreshBlock")
24 | self?.refresh()
25 | }
26 |
27 | self.scrollView?.gtm_addLoadMoreFooterView {
28 | [weak self] in
29 | print("excute loadMoreBlock")
30 | self?.loadMore()
31 | }
32 | }
33 |
34 |
35 | // MARK: Test
36 | func refresh() {
37 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
38 | }
39 |
40 | @objc func endRefresing() {
41 | self.scrollView?.endRefreshing(isSuccess: true)
42 | }
43 |
44 | func loadMore() {
45 | perform(#selector(endLoadMore), with: nil, afterDelay: 3)
46 | }
47 |
48 | @objc func endLoadMore() {
49 | self.scrollView?.endLoadMore(isNoMoreData: true)
50 | }
51 |
52 | func setUpScrollView(){
53 | self.scrollView = UIScrollView(frame: CGRect(x: 0,y: 0,width: 300,height: 300))
54 | self.scrollView?.backgroundColor = UIColor.lightGray
55 | self.scrollView?.center = self.view.center
56 | self.scrollView?.contentSize = CGSize(width: 300,height: 600)
57 | self.view.addSubview(self.scrollView!)
58 | }
59 |
60 |
61 | deinit{
62 | print("Deinit of \(NSStringFromClass(type(of: self)))")
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/GTMRefreshExample/Default/DefaultTableViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WebviewController.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 | fileprivate func < (lhs: T?, rhs: T?) -> Bool {
12 | switch (lhs, rhs) {
13 | case let (l?, r?):
14 | return l < r
15 | case (nil, _?):
16 | return true
17 | default:
18 | return false
19 | }
20 | }
21 |
22 | class DefaultTableViewController:UITableViewController{
23 | var models = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
24 | override func viewDidLoad() {
25 | super.viewDidLoad()
26 | self.view.backgroundColor = UIColor.white
27 | self.tableView.tableFooterView = UIView(frame: CGRect.zero)
28 |
29 | self.tableView?.gtm_addRefreshHeaderView {
30 | [weak self] in
31 | print("excute refreshBlock")
32 | self?.refresh()
33 | }
34 |
35 | self.tableView?.gtm_addLoadMoreFooterView {
36 | [weak self] in
37 | print("excute loadMoreBlock")
38 | self?.loadMore()
39 | }
40 | }
41 |
42 |
43 | // MARK: Test
44 | func refresh() {
45 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
46 | }
47 |
48 | @objc func endRefresing() {
49 | self.tableView?.endRefreshing(isSuccess: true)
50 | }
51 | func loadMore() {
52 | perform(#selector(endLoadMore), with: nil, afterDelay: 3)
53 | }
54 |
55 | @objc func endLoadMore() {
56 | self.models += [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
57 | self.tableView?.endLoadMore(isNoMoreData: models.count > 50)
58 | self.tableView?.reloadData()
59 | }
60 |
61 |
62 |
63 |
64 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
65 | return models.count
66 | }
67 | override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
68 | return 44.0
69 | }
70 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
71 | var cell = tableView.dequeueReusableCell(withIdentifier: "cell")
72 | if cell == nil {
73 | cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
74 | }
75 | cell?.textLabel?.text = "\(models[(indexPath as NSIndexPath).row])"
76 | return cell!
77 | }
78 |
79 |
80 | deinit{
81 | print("Deinit of \(NSStringFromClass(type(of: self)))")
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/GTMRefreshExample/Default/DefaultWebViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DefaultWebViewController.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | class DefaultWebViewController: UIViewController, UIWebViewDelegate{
13 | var webview:UIWebView?
14 | override func viewDidLoad() {
15 | super.viewDidLoad()
16 | self.view.backgroundColor = UIColor.lightGray
17 | self.webview = UIWebView(frame:view.bounds)
18 | self.webview?.autoresizingMask = [.flexibleWidth,.flexibleHeight]
19 | self.webview?.backgroundColor = UIColor.white
20 | view.addSubview(self.webview!)
21 |
22 | self.webview?.scrollView.gtm_addRefreshHeaderView {
23 | [weak self] in
24 | print("excute refreshBlock")
25 | self?.refresh()
26 | }
27 |
28 | self.webview?.scrollView.gtm_addLoadMoreFooterView {
29 | [weak self] in
30 | print("excute loadMoreBlock")
31 | self?.loadMore()
32 | }
33 | }
34 |
35 |
36 | // MARK: Test
37 | func refresh() {
38 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
39 | }
40 |
41 | @objc func endRefresing() {
42 | self.webview?.scrollView.endRefreshing(isSuccess: true)
43 | }
44 | func loadMore() {
45 | perform(#selector(endLoadMore), with: nil, afterDelay: 3)
46 | }
47 |
48 | @objc func endLoadMore() {
49 | self.webview?.scrollView.endLoadMore(isNoMoreData: true)
50 | }
51 |
52 |
53 | func webViewDidFinishLoad(_ webView: UIWebView) {
54 | self.webview?.scrollView.endRefreshing(isSuccess: true)
55 | }
56 |
57 |
58 | deinit{
59 | print("Deinit of \(NSStringFromClass(type(of: self)))")
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/GTMRefreshExample/DianPing/DianpingRefreshHeader.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DianpingRefreshHeader.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import GTMRefresh
10 | import UIKit
11 |
12 | class DianpingRefreshHeader: GTMRefreshHeader, SubGTMRefreshHeaderProtocol {
13 | let imageView = UIImageView()
14 | override init(frame: CGRect) {
15 | super.init(frame: frame)
16 |
17 | self.contentView.addSubview(imageView)
18 | }
19 |
20 | required init?(coder aDecoder: NSCoder) {
21 | fatalError("init(coder:) has not been implemented")
22 | }
23 |
24 | override func layoutSubviews() {
25 | super.layoutSubviews()
26 | imageView.frame = CGRect(x: 0, y: 0, width: 60, height: 60)
27 | imageView.center = CGPoint(x: self.bounds.width/2.0, y: self.bounds.height/2.0)
28 | }
29 |
30 |
31 |
32 | func toNormalState() {}
33 | func toRefreshingState() {
34 | let images = ["dropdown_loading_01","dropdown_loading_02","dropdown_loading_03"].map { (name) -> UIImage in
35 | return UIImage(named:name)!
36 | }
37 | imageView.animationImages = images
38 | imageView.animationDuration = Double(images.count) * 0.15
39 | imageView.startAnimating()
40 | }
41 | func toPullingState() {}
42 | func toWillRefreshState() {}
43 | func changePullingPercent(percent: CGFloat) {
44 | imageView.isHidden = (percent == 0)
45 | let adjustPercent = max(min(1.0, percent),0.0)
46 | let scale = 0.2 + (1.0 - 0.2) * adjustPercent;
47 | imageView.transform = CGAffineTransform(scaleX: scale, y: scale)
48 | let mappedIndex = Int(adjustPercent * 60)
49 | let imageName = "dropdown_anim__000\(mappedIndex)"
50 | let image = UIImage(named: imageName)
51 | imageView.image = image
52 | }
53 | func willEndRefreshing(isSuccess: Bool) {}
54 | func didEndRefreshing() {
55 | imageView.animationImages = nil
56 | imageView.stopAnimating()
57 | imageView.isHidden = true
58 | }
59 | func contentHeight()->CGFloat{
60 | return 70
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/GTMRefreshExample/DianPing/DianpingTableviewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DianpingTableviewController.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | class DianpingTableviewController:BaseTableViewController{
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | //Setup
16 | self.tableView.backgroundColor = UIColor(red: 232.0/255.0, green: 234.0/255.0, blue: 235.0/255.0, alpha: 1.0)
17 | let qqHeader = DianpingRefreshHeader()
18 | self.tableView.gtm_addRefreshHeaderView(refreshHeader: qqHeader) {
19 | [weak self] in
20 | print("excute refreshBlock")
21 | self?.refresh()
22 | }
23 | self.tableView.triggerRefreshing()
24 | }
25 |
26 |
27 | func refresh() {
28 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
29 | }
30 |
31 | @objc func endRefresing() {
32 | self.tableView.endRefreshing(isSuccess: true)
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/GTMRefreshExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | $(MARKETING_VERSION)
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/GTMRefreshExample/NavigationController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NavigationController.swift
3 | // EasyLife
4 | //
5 | // Created by 骆扬 on 2018/7/24.
6 | // Copyright © 2018年 SyncSoft. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class NavigationController: UINavigationController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 |
16 | self.delegate = NavigationControllerDelegate.shared
17 | self.interactivePopGestureRecognizer?.delegate = NavigationControllerDelegate.shared
18 | }
19 |
20 | }
21 |
22 |
23 | class NavigationControllerDelegate: NSObject, UINavigationControllerDelegate, UIGestureRecognizerDelegate {
24 |
25 | static let shared = NavigationControllerDelegate()
26 | private override init() { }
27 |
28 | func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
29 | let hide = viewController.isKind(of: DefaultTableViewController.self)
30 | navigationController.setNavigationBarHidden(hide, animated: animated)
31 | }
32 |
33 |
34 | }
35 |
36 |
37 | //extension UIViewController {
38 | // var isNavigationBarHidden: Bool {
39 | // if let controller = self as? BaseViewController {
40 | // return controller.hiddenNavigationBar
41 | // }
42 | // if let controller = self as? WebViewController {
43 | // return controller.hiddenNavigationBar
44 | // }
45 | // if self.isKind(of: UITabBarController.self) {
46 | // return true
47 | // }
48 | // return false
49 | // }
50 | //}
51 |
--------------------------------------------------------------------------------
/GTMRefreshExample/QQRefresh/QQStyleHeaderViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // QQStyleHeaderViewController.swift
3 | // GTMRefresh
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class QQStyleHeaderViewController: BaseTableViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | //Setup
16 | // self.tableView.backgroundColor = UIColor(red: 232.0/255.0, green: 234.0/255.0, blue: 235.0/255.0, alpha: 1.0)
17 | let qqHeader = QQStyleRefreshHeader()
18 | self.tableView.gtm_addRefreshHeaderView(refreshHeader: qqHeader) {
19 | [weak self] in
20 | print("excute refreshBlock")
21 | self?.refresh()
22 | }
23 | self.tableView.triggerRefreshing()
24 | }
25 |
26 |
27 | func refresh() {
28 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
29 | }
30 |
31 | @objc func endRefresing() {
32 | self.tableView.endRefreshing(isSuccess: true)
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/GTMRefreshExample/QQRefresh/QQStyleRefreshHeader.swift:
--------------------------------------------------------------------------------
1 | //
2 | // QQStyleRefreshHeader.swift
3 | // GTMRefresh
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import GTMRefresh
11 |
12 | class QQStyleRefreshHeader: GTMRefreshHeader, SubGTMRefreshHeaderProtocol {
13 |
14 | let control:QQStylePullingIndicator
15 | public let textLabel:UILabel = UILabel(frame: CGRect(x: 0,y: 0,width: 120,height: 40))
16 | public let imageView:UIImageView = UIImageView(frame: CGRect.zero)
17 |
18 | // MARK: Life Cycle
19 |
20 | override public init(frame: CGRect) {
21 | control = QQStylePullingIndicator(frame: frame)
22 | super.init(frame: frame)
23 |
24 | self.autoresizingMask = .flexibleWidth
25 | self.backgroundColor = UIColor.white
26 | imageView.sizeToFit()
27 | imageView.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
28 | textLabel.font = UIFont.systemFont(ofSize: 15)
29 | textLabel.textAlignment = .center
30 | textLabel.textColor = UIColor.darkGray
31 | addSubview(control)
32 | addSubview(textLabel)
33 | addSubview(imageView)
34 |
35 | // textLabel.text = textDic[.pullToRefresh]
36 | }
37 |
38 | required public init?(coder aDecoder: NSCoder) {
39 | fatalError("init(coder:) has not been implemented")
40 | }
41 |
42 | // MARK: Layout
43 |
44 | open override func layoutSubviews() {
45 | super.layoutSubviews()
46 | control.frame = self.bounds
47 |
48 | let totalHegiht = self.contentHeight()
49 | imageView.center = CGPoint(x: frame.width/2 - 40 - 40, y: totalHegiht * 0.75)
50 | textLabel.center = CGPoint(x: frame.size.width/2, y: totalHegiht * 0.75);
51 | }
52 |
53 | // MARK: override
54 |
55 | /// Loadding动画显示区域的高度(特殊的控件需要重写该方法,返回不同的数值)
56 | ///
57 | /// - Returns: Loadding动画显示区域的高度
58 | public override func refreshingHoldHeight() -> CGFloat {
59 | return 40.0
60 | }
61 |
62 |
63 | // MARK: SubGTMRefreshHeaderProtocol
64 | func contentHeight() -> CGFloat {
65 | return 80.0
66 | }
67 |
68 | func toNormalState() {
69 |
70 | self.control.isHidden = false
71 | self.imageView.isHidden = true
72 | self.textLabel.isHidden = true
73 | }
74 | func toRefreshingState() {
75 |
76 | self.control.animating = true
77 | }
78 | func toPullingState() {
79 | }
80 | func changePullingPercent(percent: CGFloat) {
81 |
82 | self.control.animating = false
83 | if percent > 0.5 && percent <= 1.0{
84 | self.control.progress = (percent - 0.5)/0.5
85 | }else if percent <= 0.5{
86 | self.control.progress = 0.0
87 | }else{
88 | self.control.progress = 1.0
89 | }
90 | }
91 | func toWillRefreshState() {
92 | }
93 |
94 | func willEndRefreshing(isSuccess: Bool) {
95 | if isSuccess {
96 | self.control.isHidden = true
97 | imageView.isHidden = false
98 | textLabel.isHidden = false
99 | textLabel.text = GTMRHeaderString.refreshSuccess
100 | imageView.image = UIImage(named: "success", in: Bundle(for: GTMRefreshHeader.self), compatibleWith: nil)
101 | } else {
102 | self.control.isHidden = true
103 | imageView.isHidden = false
104 | textLabel.isHidden = false
105 | textLabel.text = GTMRHeaderString.refreshFailure
106 | imageView.image = UIImage(named: "failure", in: Bundle(for: GTMRefreshHeader.self), compatibleWith: nil)
107 | }
108 | }
109 | func didEndRefreshing() {
110 |
111 | }
112 |
113 | }
114 |
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/QQVideoRefreshHeader.swift:
--------------------------------------------------------------------------------
1 | //
2 | // QQVideoRefreshHeader.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 | import GTMRefresh
9 | import UIKit
10 |
11 | class QQVideoRefreshHeader: GTMRefreshHeader, SubGTMRefreshHeaderProtocol {
12 | let imageView = UIImageView()
13 | override init(frame: CGRect) {
14 | super.init(frame: frame)
15 | imageView.image = UIImage(named: "loading15")
16 | self.contentView.addSubview(imageView)
17 | }
18 |
19 | required init?(coder aDecoder: NSCoder) {
20 | fatalError("init(coder:) has not been implemented")
21 | }
22 |
23 | override func layoutSubviews() {
24 | super.layoutSubviews()
25 | imageView.frame = CGRect(x: 0, y: 0, width: 27, height: 10)
26 | imageView.center = CGPoint(x: self.bounds.width/2.0, y: self.bounds.height/2.0)
27 | }
28 |
29 |
30 |
31 | func toNormalState() {
32 | UIView.animate(withDuration: 0.3, animations: {
33 | self.imageView.transform = CGAffineTransform(translationX: 0, y: -50)
34 | })
35 | }
36 | func toRefreshingState() {
37 | imageView.image = nil
38 | let images = (0...29).map{return $0 < 10 ? "loading0\($0)" : "loading\($0)"}
39 | imageView.animationImages = images.map{return UIImage(named:$0)!}
40 | imageView.animationDuration = Double(images.count) * 0.04
41 | imageView.startAnimating()
42 | }
43 | func toPullingState() {
44 | UIView.animate(withDuration: 0.3, animations: {
45 | self.imageView.transform = CGAffineTransform.identity
46 | })
47 | }
48 | func toWillRefreshState() {}
49 | func changePullingPercent(percent: CGFloat) {}
50 | func willEndRefreshing(isSuccess: Bool) {}
51 | func didEndRefreshing() {
52 | imageView.animationImages = nil
53 | imageView.stopAnimating()
54 | imageView.image = UIImage(named: "loading15")
55 | }
56 | func contentHeight() -> CGFloat {
57 | return 50
58 | }
59 |
60 |
61 | }
62 |
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/QQVideoTableViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // QQVideoTableViewController.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | class QQVideoTableviewController:BaseTableViewController{
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 |
16 | let qqHeader = QQVideoRefreshHeader()
17 | self.tableView.gtm_addRefreshHeaderView(refreshHeader: qqHeader) {
18 | [weak self] in
19 | print("excute refreshBlock")
20 | self?.refresh()
21 | }
22 | self.tableView.triggerRefreshing()
23 | }
24 |
25 |
26 | func refresh() {
27 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
28 | }
29 |
30 | @objc func endRefresing() {
31 | self.tableView.endRefreshing(isSuccess: true)
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading00@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading00@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading00@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading00@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading01@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading01@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading01@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading01@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading02@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading02@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading02@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading02@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading03@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading03@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading03@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading03@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading04@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading04@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading04@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading04@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading05@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading05@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading05@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading05@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading06@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading06@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading06@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading06@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading07@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading07@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading07@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading07@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading08@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading08@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading08@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading08@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading09@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading09@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading09@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading09@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading10@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading10@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading10@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading10@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading11@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading11@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading11@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading11@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading12@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading12@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading12@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading12@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading13@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading13@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading13@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading13@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading14@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading14@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading14@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading14@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading15@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading15@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading15@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading15@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading16@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading16@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading16@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading16@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading17@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading17@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading17@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading17@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading18@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading18@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading18@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading18@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading19@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading19@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading19@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading19@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading20@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading20@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading21@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading21@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading21@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading21@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading22@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading22@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading22@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading22@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading23@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading23@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading23@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading23@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading24@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading24@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading24@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading24@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading25@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading25@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading25@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading25@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading26@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading26@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading26@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading26@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading27@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading27@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading27@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading27@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading28@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading28@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading28@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading28@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading29@2x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/QQVideo/Resource/loading29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/QQVideo/Resource/loading29@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/SectionModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SectionModel.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct SectionModel {
12 | var rowsCount:Int
13 | var sectionTitle:String
14 | var rowsTitles:[String]
15 | var rowsTargetControlerNames:[String]
16 | }
17 |
--------------------------------------------------------------------------------
/GTMRefreshExample/TaoBao/TaobaoTableViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TaobaoTableViewController.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 | class TaobaoTableViewController:BaseTableViewController{
12 | override func viewDidLoad() {
13 | super.viewDidLoad()
14 | //Setup
15 | // self.tableView.backgroundColor = UIColor(red: 232.0/255.0, green: 234.0/255.0, blue: 235.0/255.0, alpha: 1.0)
16 | let qqHeader = TaoBaoRefreshHeader()
17 | self.tableView.gtm_addRefreshHeaderView(refreshHeader: qqHeader) {
18 | [weak self] in
19 | print("excute refreshBlock")
20 | self?.refresh()
21 | }
22 | self.tableView.triggerRefreshing()
23 | }
24 |
25 |
26 | func refresh() {
27 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
28 | }
29 |
30 | @objc func endRefresing() {
31 | self.tableView.endRefreshing(isSuccess: true)
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/GTMRefreshExample/TaoBao/taobaoLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/TaoBao/taobaoLogo.png
--------------------------------------------------------------------------------
/GTMRefreshExample/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // GTMRefreshExample
4 | //
5 | // Created by luoyang on 2016/12/6.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import GTMRefresh
11 |
12 | class ViewController: UITableViewController {
13 |
14 | var models = [SectionModel]()
15 |
16 | override func viewDidLoad() {
17 | super.viewDidLoad()
18 | let section0 = SectionModel(rowsCount: 4,
19 | sectionTitle:"Default",
20 | rowsTitles: ["Tableview","CollectionView","ScrollView","WebView"],
21 | rowsTargetControlerNames:["DefaultTableViewController","DefaultCollectionViewController","DefaultScrollViewController","DefaultWebViewController"])
22 |
23 |
24 | let section1 = SectionModel(rowsCount: 8,
25 | sectionTitle:"Customize",
26 | rowsTitles: ["QQ","YahooWeather","Curve Mask","Youku","TaoBao","QQ Video","DianPing", "Wechat"],
27 | rowsTargetControlerNames:["QQStyleHeaderViewController","YahooWeatherTableViewController","CurveMaskTableViewController","YoukuTableViewController","TaobaoTableViewController","QQVideoTableviewController","DianpingTableviewController", "WechatRefreshHeaderTestVC"])
28 | models.append(section0)
29 | models.append(section1)
30 |
31 | self.tableView.gtm_addRefreshHeaderView {
32 | [weak self] in
33 | print("excute refreshBlock")
34 | self?.refresh()
35 | }
36 |
37 | self.tableView.gtm_addLoadMoreFooterView {
38 | [weak self] in
39 | print("excute loadMoreBlock")
40 | self?.loadMore()
41 | }
42 |
43 | self.tableView.tableFooterView = UIView(frame: CGRect.zero)
44 |
45 | // text
46 | self.tableView.pullDownToRefreshText("亲,试试下拉会刷新的")
47 | .releaseToRefreshText("亲,松开试试")
48 | .refreshSuccessText("亲,成功了")
49 | .refreshFailureText("亲,无果")
50 | .refreshingText("亲,正在努力刷新")
51 | // color
52 | self.tableView.headerTextColor(.red)
53 | // icon
54 | self.tableView.headerIdleImage(UIImage.init(named: "dropdown_anim__00048"))
55 |
56 | }
57 |
58 |
59 | // MARK: Test
60 | func refresh() {
61 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
62 | }
63 |
64 | @objc func endRefresing() {
65 | self.tableView.endRefreshing(isSuccess: true)
66 | }
67 | func loadMore() {
68 | perform(#selector(endLoadMore), with: nil, afterDelay: 3)
69 | }
70 |
71 | @objc func endLoadMore() {
72 | self.tableView.endLoadMore(isNoMoreData: true)
73 | }
74 |
75 | // MARK: Table View
76 |
77 | override func numberOfSections(in tableView: UITableView) -> Int {
78 | return models.count
79 | }
80 | override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
81 | return 30.0
82 | }
83 | override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
84 | let sectionModel = models[section]
85 | return sectionModel.sectionTitle
86 | }
87 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
88 | let sectionModel = models[section]
89 | return sectionModel.rowsCount
90 | }
91 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
92 | var cell = tableView.dequeueReusableCell(withIdentifier: "cell")
93 | if cell == nil {
94 | cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
95 |
96 | }
97 | let sectionModel = models[(indexPath as NSIndexPath).section]
98 | cell?.textLabel?.text = sectionModel.rowsTitles[(indexPath as NSIndexPath).row]
99 | return cell!
100 | }
101 | override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
102 | tableView.deselectRow(at: indexPath, animated: true)
103 | let sectionModel = models[(indexPath as NSIndexPath).section]
104 | var className = sectionModel.rowsTargetControlerNames[(indexPath as NSIndexPath).row]
105 | className = "GTMRefreshExample.\(className)"
106 | if let cls = NSClassFromString(className) as? UIViewController.Type{
107 | let dvc = cls.init()
108 | self.navigationController?.pushViewController(dvc, animated: true)
109 | }
110 |
111 | }
112 | }
113 |
114 |
--------------------------------------------------------------------------------
/GTMRefreshExample/Wechat/WechatRefreshHeader.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WechatRefreshHeader.swift
3 | // GTMRefreshExample
4 | //
5 | // Created by 骆扬 on 2020/1/2.
6 | // Copyright © 2020 luoyang. All rights reserved.
7 | //
8 |
9 | import GTMRefresh
10 | import UIKit
11 |
12 | class WechatRefreshHeader: GTMRefreshHeader, SubGTMRefreshHeaderProtocol {
13 | var wheel: UIImageView = {
14 | let wheel = UIImageView()
15 | wheel.image = UIImage(named: "wechat")
16 |
17 | return wheel
18 | }()
19 |
20 | override init(frame: CGRect) {
21 | super.init(frame: frame)
22 | setup()
23 | }
24 | required init?(coder aDecoder: NSCoder) {
25 | super.init(coder: aDecoder)
26 | setup()
27 | }
28 |
29 | func setup() {
30 | self.backgroundColor = .white
31 | }
32 |
33 | func startWheelAnimation() {
34 |
35 | let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
36 | rotateAnimation.toValue = NSNumber(value: Double.pi * 2.0 as Double)
37 | rotateAnimation.duration = 1.6
38 | rotateAnimation.isCumulative = true
39 | rotateAnimation.repeatCount = MAXFLOAT
40 | self.wheel.layer.add(rotateAnimation, forKey: "rotate")
41 | }
42 |
43 |
44 | // MARK: - SubGTMRefreshHeaderProtocol
45 | /// 状态变成.idle
46 | func toNormalState() {
47 | self.wheel.removeFromSuperview()
48 | }
49 |
50 | /// 状态变成.pulling
51 | func toPullingState() {
52 | // 掉落动画
53 | if self.wheel.superview == nil {
54 | self.scrollView?.addSubview(self.wheel)
55 | self.wheel.frame = CGRect(x: 20, y: -30, width: 28, height: 28)
56 | UIView.animate(withDuration: 0.5) {
57 | self.wheel.frame = CGRect(x: 20, y: 30, width: 28, height: 28)
58 | }
59 | }
60 | }
61 | /// 状态变成.willRefresh
62 | func toRefreshingState() {
63 | if self.wheel.superview == nil {
64 | self.scrollView?.addSubview(self.wheel)
65 | self.wheel.frame = CGRect(x: 20, y: -30, width: 28, height: 28)
66 | UIView.animate(withDuration: 0.5) {
67 | self.wheel.frame = CGRect(x: 20, y: 30, width: 28, height: 28)
68 | }
69 | }
70 | startWheelAnimation()
71 | }
72 | /// 结束动画完成后执行
73 | func didEndRefreshing() {
74 | self.wheel.layer.removeAllAnimations()
75 | }
76 |
77 | func contentHeight() -> CGFloat {
78 | return 30
79 | }
80 | override func refreshingHoldHeight() -> CGFloat {
81 | return 10
82 | }
83 |
84 |
85 | }
86 |
--------------------------------------------------------------------------------
/GTMRefreshExample/Wechat/WechatRefreshHeaderTestVC.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WechatRefreshHeaderTestVC.swift
3 | // GTMRefreshExample
4 | //
5 | // Created by 骆扬 on 2020/1/2.
6 | // Copyright © 2020 luoyang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class WechatRefreshHeaderTestVC: BaseTableViewController{
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | self.tableView.backgroundColor = UIColor.lightGray
16 | //Setup
17 | let wechatHeader = WechatRefreshHeader()
18 | self.tableView.gtm_addRefreshHeaderView(refreshHeader: wechatHeader) {
19 | [weak self] in
20 | print("excute refreshBlock")
21 | self?.refresh()
22 | }
23 | self.tableView.triggerRefreshing()
24 |
25 | }
26 |
27 |
28 | func refresh() {
29 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
30 | }
31 |
32 | @objc func endRefresing() {
33 | self.tableView.endRefreshing(isSuccess: true)
34 | }
35 |
36 |
37 |
38 |
39 | }
40 |
41 |
42 |
--------------------------------------------------------------------------------
/GTMRefreshExample/Wechat/wechat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/Wechat/wechat.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00000.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00000.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00001.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00001.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00002.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00002.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00003.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00003.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00004.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00004.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00005.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00005.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00006.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00006.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00007.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00007.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00008.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00008.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00009.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00009.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00010.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00010.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00011.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00011.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00012.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00012.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00013.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00013.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00014.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00014.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00015.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00015.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00016.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00016.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00017.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00017.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00018.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00018.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00019.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00019.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00020.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00020.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00021.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00021.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00022.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00022.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00023.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00023.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00024.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00025.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00025.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00026.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00026.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00027.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00027.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00028.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00028.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00029.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00029.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00030.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00030.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00031.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00031.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00032.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00032.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00033.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00033.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00034.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00034.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00035.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00035.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00036.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00036.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00037.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00037.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00038.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00038.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00039.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00039.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00040.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00040.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00041.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00041.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00042.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00042.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00043.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00043.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00044.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00044.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00045.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00045.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00046.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00046.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00047.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00047.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00048.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00048.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00049.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00049.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00050.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00050.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00051.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00051.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00052.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00052.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00053.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00053.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00054.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00054.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00055.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00055.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00056.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00056.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00057.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00057.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00058.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00058.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00059.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00059.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00060.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00060.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00061.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00061.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00062.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00062.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00063.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00063.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00064.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00064.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00065.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00065.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00066.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00066.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00067.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00067.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00068.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00068.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00069.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00069.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00070.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00070.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00071.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00071.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00072.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00072.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00073.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00073.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00074.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00074.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00075.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00075.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00076.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00076.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00077.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00077.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00078.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00078.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00079.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00079.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00080.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00080.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00081.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00081.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00082.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00082.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00083.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00083.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00084.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00084.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00085.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00085.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00086.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00086.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00087.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00087.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00088.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00088.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00089.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00089.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00090.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00090.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00091.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00091.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00092.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00092.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00093.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00093.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00094.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00094.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00095.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00095.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00096.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00096.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00097.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00097.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00098.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00098.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00099.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00099.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00100.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00101.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00101.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00102.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00102.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00103.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00103.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00104.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00104.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00105.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00105.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00106.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00106.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00107.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00107.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00108.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00108.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/sun_00109.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/sun_00109.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/Resource/yahoo_logo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YahooWeather/Resource/yahoo_logo@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/YahooWeatherRefreshHeader.swift:
--------------------------------------------------------------------------------
1 | //
2 | // YahooWeatherRefreshHeader.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import GTMRefresh
11 |
12 | class YahooWeatherRefreshHeader: GTMRefreshHeader, SubGTMRefreshHeaderProtocol {
13 |
14 | let imageView = UIImageView(frame:CGRect(x: 0, y: 0, width: 40, height: 40))
15 | let logoImage = UIImageView(frame: CGRect(x: 0, y: 0, width: 60, height: 14))
16 | let label = UILabel()
17 |
18 | override init(frame: CGRect) {
19 | super.init(frame: frame)
20 | setup()
21 | }
22 |
23 | required init?(coder aDecoder: NSCoder) {
24 | super.init(coder: aDecoder)
25 | setup()
26 | }
27 |
28 | func setup() {
29 | // self.backgroundColor = UIColor(white: 0.0, alpha: 0.25)
30 | imageView.image = UIImage(named: "sun_000000")
31 | logoImage.image = UIImage(named: "yahoo_logo")
32 | label.textColor = UIColor.white
33 | label.font = UIFont.systemFont(ofSize: 12)
34 | label.text = "Last update: 5 minutes ago"
35 |
36 | self.contentView.addSubview(imageView)
37 | self.contentView.addSubview(logoImage)
38 | self.contentView.addSubview(label)
39 |
40 | }
41 |
42 | override func layoutSubviews() {
43 | super.layoutSubviews()
44 |
45 |
46 | logoImage.center = CGPoint(x: self.bounds.width/2.0, y: frame.height - 30 - 7.0)
47 | imageView.center = CGPoint(x: self.bounds.width/2.0 - 60.0, y: frame.height - 30)
48 | label.frame = CGRect(x: logoImage.frame.origin.x, y: logoImage.frame.origin.y + logoImage.frame.height + 2,width: 200, height: 20)
49 | }
50 |
51 |
52 | var animating: Bool = false
53 | func startTransitionAnimation(){
54 | if animating {
55 | return
56 | }
57 | animating = true
58 | imageView.image = UIImage(named: "sun_00073")
59 | // let images = (27...72).map({"sun_000\($0)"}).map({UIImage(named:$0)!})
60 | // imageView.animationImages = images
61 | // imageView.animationDuration = Double(images.count) * 0.02
62 | // imageView.animationRepeatCount = 1
63 | // imageView.startAnimating()
64 | // self.perform(#selector(YahooWeatherRefreshHeader.transitionFinihsed), with: nil, afterDelay: imageView.animationDuration)
65 | let images = (73...109).map({return $0 < 100 ? "sun_000\($0)" : "sun_00\($0)"}).map({UIImage(named:$0)!})
66 |
67 | imageView.animationImages = images
68 | imageView.animationDuration = Double(images.count) * 0.03
69 | imageView.animationRepeatCount = 1000000
70 | imageView.startAnimating()
71 | }
72 |
73 | @objc func transitionFinihsed(){
74 | let images = (73...109).map({return $0 < 100 ? "sun_000\($0)" : "sun_00\($0)"}).map({UIImage(named:$0)!})
75 |
76 | imageView.animationImages = images
77 | imageView.animationDuration = Double(images.count) * 0.03
78 | imageView.animationRepeatCount = 1000000
79 | imageView.startAnimating()
80 | }
81 |
82 |
83 |
84 |
85 | // MARK: SubGTMRefreshHeaderProtocol
86 | func contentHeight() -> CGFloat {
87 | return 60.0
88 | }
89 |
90 |
91 | func toNormalState() {
92 | print("\(self) toNormalState")
93 | //imageView.image = UIImage(named: "sun_000000")
94 | }
95 |
96 | func toRefreshingState() {
97 | // imageView.image = nil
98 | print("\(self) statr refreshing")
99 | startTransitionAnimation()
100 | }
101 |
102 | func toPullingState() {
103 |
104 | }
105 |
106 | func changePullingPercent(percent: CGFloat) {
107 | let adjustPercent = max(min(1.0, percent),0.0)
108 | let index = Int(adjustPercent * 27)
109 | let imageName = index < 10 ? "sun_0000\(index)" : "sun_000\(index)"
110 | DispatchQueue.main.async { [weak self] in
111 | self?.imageView.image = UIImage(named:imageName)
112 | }
113 | }
114 | func toWillRefreshState() {
115 | // imageView.image = nil
116 | print("\(self) will refreshing")
117 | startTransitionAnimation()
118 | }
119 |
120 | func willEndRefreshing(isSuccess: Bool) {
121 | print("\(self) willEndRefreshing")
122 | }
123 |
124 | func didEndRefreshing() {
125 |
126 | print("\(self) didEndRefreshing")
127 | imageView.stopAnimating()
128 | animating = false
129 | }
130 |
131 | }
132 |
--------------------------------------------------------------------------------
/GTMRefreshExample/YahooWeather/YahooWeatherTableViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // YahooWeatherTableViewController.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | class YahooWeatherTableViewController: BaseTableViewController{
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | self.tableView.backgroundColor = UIColor.lightGray
16 | //Setup
17 | let yahooHeader = YahooWeatherRefreshHeader()
18 | self.tableView.gtm_addRefreshHeaderView(refreshHeader: yahooHeader) {
19 | [weak self] in
20 | print("excute refreshBlock")
21 | self?.refresh()
22 | }
23 | self.tableView.triggerRefreshing()
24 | }
25 |
26 |
27 | func refresh() {
28 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
29 | }
30 |
31 | @objc func endRefresing() {
32 | self.tableView.endRefreshing(isSuccess: true)
33 | }}
34 |
--------------------------------------------------------------------------------
/GTMRefreshExample/YouKu/YoukuRefreshHeader.swift:
--------------------------------------------------------------------------------
1 | //
2 | // YoukuRefreshHeader.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import GTMRefresh
10 | import UIKit
11 |
12 | class YoukuRefreshHeader: GTMRefreshHeader, SubGTMRefreshHeaderProtocol {
13 | let iconImageView = UIImageView()// 这个ImageView用来显示下拉箭头
14 | let rotatingImageView = UIImageView() //这个ImageView用来播放动图
15 | let backgroundImageView = UIImageView() //这个ImageView用来显示广告的
16 | let frameHeight: CGFloat = UIScreen.main.bounds.size.width * 328.0/571.0
17 |
18 | override init(frame: CGRect) {
19 |
20 | // let adjustFrame = CGRect(x: frame.origin.x, y: frame.origin.y, width: frame.size.width, height: frameHeight)
21 | super.init(frame: frame)
22 | iconImageView.image = UIImage(named: "youku_down")
23 | rotatingImageView.image = UIImage(named: "youku_refreshing")
24 | backgroundImageView.image = UIImage(named: "youku_ad.jpeg")
25 |
26 | self.contentView.addSubview(backgroundImageView)
27 | self.contentView.addSubview(rotatingImageView)
28 | self.contentView.addSubview(iconImageView)
29 | }
30 | // override func willMove(toSuperview newSuperview: UIView?) {
31 | // super.willMove(toSuperview: newSuperview)
32 | // if let superView = newSuperview{
33 | // self.frame = CGRect(x: self.frame.origin.x, y: self.frame.origin.y, width: superView.frame.size.width, height: frameHeight)
34 | // }
35 | // }
36 | override func layoutSubviews() {
37 | super.layoutSubviews()
38 |
39 | let x = self.frame.origin.x, y = self.frame.origin.y, w = self.frame.size.width, h = self.frame.size.height
40 |
41 | backgroundImageView.frame = CGRect(x: x, y: y, width: w, height: frameHeight)
42 | backgroundImageView.center = CGPoint(x: w/2, y: h - frameHeight/2)
43 |
44 | iconImageView.frame = CGRect(x: 0, y: 0, width: 25, height: 25)
45 | iconImageView.center = CGPoint(x: w/2, y: h/2)
46 |
47 | rotatingImageView.frame = iconImageView.frame
48 | rotatingImageView.center = iconImageView.center
49 | }
50 | required init?(coder aDecoder: NSCoder) {
51 | fatalError("init(coder:) has not been implemented")
52 | }
53 | // override func willRefresHeight() -> CGFloat {
54 | // return 60
55 | // }
56 | override func refreshingHoldHeight() -> CGFloat {
57 | return self.backgroundImageView.isHidden ? 60 : frameHeight
58 | }
59 |
60 |
61 | func toNormalState() {
62 | UIView.animate(withDuration: 0.4, animations: {
63 | self.iconImageView.transform = CGAffineTransform.identity
64 | })
65 | }
66 | func toRefreshingState() {
67 | self.iconImageView.isHidden = true
68 | self.rotatingImageView.isHidden = false
69 | let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
70 | rotateAnimation.toValue = NSNumber(value: Double.pi * 2.0 as Double)
71 | rotateAnimation.duration = 0.8
72 | rotateAnimation.isCumulative = true
73 | rotateAnimation.repeatCount = 10000000
74 | self.rotatingImageView.layer.add(rotateAnimation, forKey: "rotate")
75 | }
76 | func toPullingState() {
77 | // UIView.animate(withDuration: 0.4, animations: {
78 | // self.iconImageView.transform = CGAffineTransform(rotationAngle: CGFloat(-Double.pi+0.000001))
79 | // })
80 | }
81 | func toWillRefreshState() {
82 | }
83 | func changePullingPercent(percent: CGFloat) {
84 | self.iconImageView.transform = CGAffineTransform(rotationAngle: CGFloat(-Double.pi+Double.pi*2*Double(percent)))
85 | }
86 | func willEndRefreshing(isSuccess: Bool) {
87 | self.rotatingImageView.isHidden = true
88 | self.iconImageView.isHidden = false
89 | self.iconImageView.layer.removeAllAnimations()
90 | self.iconImageView.layer.transform = CATransform3DIdentity
91 | self.iconImageView.image = UIImage(named: "youku_down")
92 | }
93 | func didEndRefreshing() {
94 | }
95 | func contentHeight()->CGFloat{
96 | return 60
97 | }
98 |
99 | }
100 |
--------------------------------------------------------------------------------
/GTMRefreshExample/YouKu/YoukuTableViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // YoukuTableViewController.swift
3 | // PullToRefreshKit
4 | //
5 | // Created by luoyang on 2016/12/8.
6 | // Copyright © 2016年 luoyang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | class YoukuTableViewController:BaseTableViewController{
13 | var refreshHeader:YoukuRefreshHeader?
14 | override func viewDidLoad() {
15 | super.viewDidLoad()
16 | //Setup
17 | //self.tableView.backgroundColor = UIColor(red: 232.0/255.0, green: 234.0/255.0, blue: 235.0/255.0, alpha: 1.0)
18 | let youkuHeader = YoukuRefreshHeader()
19 | youkuHeader.backgroundImageView.isHidden = true
20 | self.refreshHeader = youkuHeader
21 |
22 | self.navigationItem.title = "Try switch"
23 | //Set up switch
24 | let sw = UISwitch()
25 | sw.isOn = !refreshHeader!.backgroundImageView.isHidden
26 | let rightItem = UIBarButtonItem(customView: sw)
27 | sw.addTarget(self, action: #selector(YoukuTableViewController.switchValueChanged(_:)), for: UIControl.Event.valueChanged)
28 | self.navigationItem.rightBarButtonItem = rightItem
29 | self.tableView.gtm_addRefreshHeaderView(refreshHeader: youkuHeader) {
30 | [weak self] in
31 | print("excute refreshBlock")
32 | self?.refresh()
33 | }
34 | self.tableView.triggerRefreshing()
35 | }
36 |
37 |
38 | func refresh() {
39 | perform(#selector(endRefresing), with: nil, afterDelay: 3)
40 | }
41 |
42 | @objc func endRefresing() {
43 | self.tableView.endRefreshing(isSuccess: true)
44 | }
45 | @objc func switchValueChanged(_ sender:UISwitch){
46 | refreshHeader?.backgroundImageView.isHidden = !sender.isOn
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/GTMRefreshExample/YouKu/youku_ad.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YouKu/youku_ad.jpeg
--------------------------------------------------------------------------------
/GTMRefreshExample/YouKu/youku_down@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YouKu/youku_down@3x.png
--------------------------------------------------------------------------------
/GTMRefreshExample/YouKu/youku_refreshing@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/GTMRefreshExample/YouKu/youku_refreshing@3x.png
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016年 GTMYang
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GTMYang/GTMRefresh/12bab1591c5fc4dc9f41258a1bdcf30f0e185c56/logo.png
--------------------------------------------------------------------------------