├── MJdeFM.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcuserdata
│ │ └── Arthur.xcuserdatad
│ │ └── WorkspaceSettings.xcsettings
└── xcuserdata
│ └── Arthur.xcuserdatad
│ ├── xcdebugger
│ └── Breakpoints_v2.xcbkptlist
│ └── xcschemes
│ ├── MJdeFM.xcscheme
│ └── xcschememanagement.plist
├── MJdeFM.xcworkspace
├── contents.xcworkspacedata
├── xcshareddata
│ └── MJdeFM.xccheckout
└── xcuserdata
│ └── Arthur.xcuserdatad
│ ├── WorkspaceSettings.xcsettings
│ └── xcdebugger
│ └── Breakpoints_v2.xcbkptlist
├── MJdeFM
├── AppDelegate.h
├── AppDelegate.m
├── Base.lproj
│ ├── LaunchScreen.xib
│ └── Main.storyboard
├── ContextMenuCell
│ ├── ContextMenuCell.h
│ ├── ContextMenuCell.m
│ └── ContextMenuCell.xib
├── Controller
│ ├── MJChannelViewController.h
│ ├── MJChannelViewController.m
│ ├── MJLoginViewController.h
│ ├── MJLoginViewController.m
│ ├── MJPlayerViewController.h
│ ├── MJPlayerViewController.m
│ ├── MJTabBarController.h
│ ├── MJTabBarController.m
│ ├── MJUserInfoViewController.h
│ └── MJUserInfoViewController.m
├── Images.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon-60@2x.png
│ │ ├── Icon-60@3x.png
│ │ ├── Icon-72.png
│ │ ├── Icon-72@2x.png
│ │ ├── Icon-76.png
│ │ ├── Icon-76@2x.png
│ │ ├── Icon-Small-1.png
│ │ ├── Icon-Small-50.png
│ │ ├── Icon-Small-50@2x.png
│ │ ├── Icon-Small.png
│ │ ├── Icon-Small@2x-1.png
│ │ ├── Icon-Small@2x.png
│ │ ├── Icon-Small@3x.png
│ │ ├── Icon-Spotlight-40.png
│ │ ├── Icon-Spotlight-40@2x-1.png
│ │ ├── Icon-Spotlight-40@2x.png
│ │ ├── Icon-Spotlight-40@3x.png
│ │ ├── Icon.png
│ │ └── Icon@2x.png
│ ├── albumBlock.imageset
│ │ ├── Contents.json
│ │ ├── albumBlock.png
│ │ ├── albumBlock@2x.png
│ │ └── albumBlock@3x.png
│ ├── albumBlock2.imageset
│ │ ├── Contents.json
│ │ ├── albumBlock2.png
│ │ ├── albumBlock2@2x.png
│ │ └── albumBlock2@3x.png
│ ├── bar
│ │ ├── menuChannel.imageset
│ │ │ ├── Contents.json
│ │ │ ├── menuChannel.png
│ │ │ ├── menuChannel@2x.png
│ │ │ └── menuChannel@3x.png
│ │ ├── menuClose.imageset
│ │ │ ├── Contents.json
│ │ │ ├── menuClose.png
│ │ │ ├── menuClose@2x.png
│ │ │ └── menuClose@3x.png
│ │ ├── menuIcon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── menuIcon.png
│ │ │ ├── menuIcon@2x.png
│ │ │ └── menuIcon@3x.png
│ │ ├── menuLogin.imageset
│ │ │ ├── Contents.json
│ │ │ ├── menuLogin.png
│ │ │ ├── menuLogin@2x.png
│ │ │ └── menuLogin@3x.png
│ │ └── menuPlayer.imageset
│ │ │ ├── Contents.json
│ │ │ ├── menuPlayer.png
│ │ │ ├── menuPlayer@2x.png
│ │ │ └── menuPlayer@3x.png
│ ├── login.imageset
│ │ ├── Contents.json
│ │ ├── login.png
│ │ ├── login@2x.png
│ │ └── login@3x.png
│ ├── lufei.imageset
│ │ ├── Contents.json
│ │ ├── lufei.png
│ │ ├── lufei@2x.png
│ │ └── lufei@3x.png
│ └── player
│ │ ├── delete.imageset
│ │ ├── Contents.json
│ │ └── delete.png
│ │ ├── heart1.imageset
│ │ ├── Contents.json
│ │ └── heart1.png
│ │ ├── heart2.imageset
│ │ ├── Contents.json
│ │ └── heart2.png
│ │ ├── next.imageset
│ │ ├── Contents.json
│ │ └── next.png
│ │ ├── pause.imageset
│ │ ├── Contents.json
│ │ └── stop.png
│ │ └── play.imageset
│ │ ├── Contents.json
│ │ └── play.png
├── Info.plist
├── Model
│ ├── MJChannel.h
│ ├── MJChannel.m
│ ├── MJChannelManager.h
│ ├── MJChannelManager.m
│ ├── MJSong.h
│ ├── MJSong.m
│ ├── MJUserInfo.h
│ ├── MJUserInfo.m
│ ├── MJUserInfoManager.h
│ └── MJUserInfoManager.m
├── Utility
│ ├── MJFetcher.h
│ └── MJFetcher.m
├── YALContextMenu
│ ├── UIView+YALConstraints.h
│ ├── UIView+YALConstraints.m
│ ├── YALContextMenuCell.h
│ ├── YALContextMenuTableView.h
│ └── YALContextMenuTableView.m
└── main.m
├── MJdeFMTests
├── Info.plist
└── MJdeFMTests.m
├── Podfile
├── Podfile.lock
├── Pods
├── AFNetworking
│ ├── AFNetworking
│ │ ├── AFHTTPRequestOperation.h
│ │ ├── AFHTTPRequestOperation.m
│ │ ├── AFHTTPRequestOperationManager.h
│ │ ├── AFHTTPRequestOperationManager.m
│ │ ├── AFHTTPSessionManager.h
│ │ ├── AFHTTPSessionManager.m
│ │ ├── AFNetworkReachabilityManager.h
│ │ ├── AFNetworkReachabilityManager.m
│ │ ├── AFNetworking.h
│ │ ├── AFSecurityPolicy.h
│ │ ├── AFSecurityPolicy.m
│ │ ├── AFURLConnectionOperation.h
│ │ ├── AFURLConnectionOperation.m
│ │ ├── AFURLRequestSerialization.h
│ │ ├── AFURLRequestSerialization.m
│ │ ├── AFURLResponseSerialization.h
│ │ ├── AFURLResponseSerialization.m
│ │ ├── AFURLSessionManager.h
│ │ └── AFURLSessionManager.m
│ ├── LICENSE
│ ├── README.md
│ └── UIKit+AFNetworking
│ │ ├── AFNetworkActivityIndicatorManager.h
│ │ ├── AFNetworkActivityIndicatorManager.m
│ │ ├── UIActivityIndicatorView+AFNetworking.h
│ │ ├── UIActivityIndicatorView+AFNetworking.m
│ │ ├── UIAlertView+AFNetworking.h
│ │ ├── UIAlertView+AFNetworking.m
│ │ ├── UIButton+AFNetworking.h
│ │ ├── UIButton+AFNetworking.m
│ │ ├── UIImage+AFNetworking.h
│ │ ├── UIImageView+AFNetworking.h
│ │ ├── UIImageView+AFNetworking.m
│ │ ├── UIKit+AFNetworking.h
│ │ ├── UIProgressView+AFNetworking.h
│ │ ├── UIProgressView+AFNetworking.m
│ │ ├── UIRefreshControl+AFNetworking.h
│ │ ├── UIRefreshControl+AFNetworking.m
│ │ ├── UIWebView+AFNetworking.h
│ │ └── UIWebView+AFNetworking.m
├── Headers
│ ├── Private
│ │ ├── AFNetworking
│ │ │ ├── AFHTTPRequestOperation.h
│ │ │ ├── AFHTTPRequestOperationManager.h
│ │ │ ├── AFHTTPSessionManager.h
│ │ │ ├── AFNetworkActivityIndicatorManager.h
│ │ │ ├── AFNetworkReachabilityManager.h
│ │ │ ├── AFNetworking.h
│ │ │ ├── AFSecurityPolicy.h
│ │ │ ├── AFURLConnectionOperation.h
│ │ │ ├── AFURLRequestSerialization.h
│ │ │ ├── AFURLResponseSerialization.h
│ │ │ ├── AFURLSessionManager.h
│ │ │ ├── UIActivityIndicatorView+AFNetworking.h
│ │ │ ├── UIAlertView+AFNetworking.h
│ │ │ ├── UIButton+AFNetworking.h
│ │ │ ├── UIImage+AFNetworking.h
│ │ │ ├── UIImageView+AFNetworking.h
│ │ │ ├── UIKit+AFNetworking.h
│ │ │ ├── UIProgressView+AFNetworking.h
│ │ │ ├── UIRefreshControl+AFNetworking.h
│ │ │ └── UIWebView+AFNetworking.h
│ │ ├── MBProgressHUD
│ │ │ └── MBProgressHUD.h
│ │ ├── MJRefresh
│ │ │ ├── MJRefresh.h
│ │ │ ├── MJRefreshAutoFooter.h
│ │ │ ├── MJRefreshAutoGifFooter.h
│ │ │ ├── MJRefreshAutoNormalFooter.h
│ │ │ ├── MJRefreshAutoStateFooter.h
│ │ │ ├── MJRefreshBackFooter.h
│ │ │ ├── MJRefreshBackGifFooter.h
│ │ │ ├── MJRefreshBackNormalFooter.h
│ │ │ ├── MJRefreshBackStateFooter.h
│ │ │ ├── MJRefreshComponent.h
│ │ │ ├── MJRefreshConst.h
│ │ │ ├── MJRefreshFooter.h
│ │ │ ├── MJRefreshGifHeader.h
│ │ │ ├── MJRefreshHeader.h
│ │ │ ├── MJRefreshNormalHeader.h
│ │ │ ├── MJRefreshStateHeader.h
│ │ │ ├── UIScrollView+MJExtension.h
│ │ │ ├── UIScrollView+MJRefresh.h
│ │ │ └── UIView+MJExtension.h
│ │ └── Masonry
│ │ │ ├── MASCompositeConstraint.h
│ │ │ ├── MASConstraint+Private.h
│ │ │ ├── MASConstraint.h
│ │ │ ├── MASConstraintMaker.h
│ │ │ ├── MASLayoutConstraint.h
│ │ │ ├── MASUtilities.h
│ │ │ ├── MASViewAttribute.h
│ │ │ ├── MASViewConstraint.h
│ │ │ ├── Masonry.h
│ │ │ ├── NSArray+MASAdditions.h
│ │ │ ├── NSArray+MASShorthandAdditions.h
│ │ │ ├── NSLayoutConstraint+MASDebugAdditions.h
│ │ │ ├── View+MASAdditions.h
│ │ │ ├── View+MASShorthandAdditions.h
│ │ │ └── ViewController+MASAdditions.h
│ └── Public
│ │ ├── AFNetworking
│ │ ├── AFHTTPRequestOperation.h
│ │ ├── AFHTTPRequestOperationManager.h
│ │ ├── AFHTTPSessionManager.h
│ │ ├── AFNetworkActivityIndicatorManager.h
│ │ ├── AFNetworkReachabilityManager.h
│ │ ├── AFNetworking.h
│ │ ├── AFSecurityPolicy.h
│ │ ├── AFURLConnectionOperation.h
│ │ ├── AFURLRequestSerialization.h
│ │ ├── AFURLResponseSerialization.h
│ │ ├── AFURLSessionManager.h
│ │ ├── UIActivityIndicatorView+AFNetworking.h
│ │ ├── UIAlertView+AFNetworking.h
│ │ ├── UIButton+AFNetworking.h
│ │ ├── UIImage+AFNetworking.h
│ │ ├── UIImageView+AFNetworking.h
│ │ ├── UIKit+AFNetworking.h
│ │ ├── UIProgressView+AFNetworking.h
│ │ ├── UIRefreshControl+AFNetworking.h
│ │ └── UIWebView+AFNetworking.h
│ │ ├── MBProgressHUD
│ │ └── MBProgressHUD.h
│ │ ├── MJRefresh
│ │ ├── MJRefresh.h
│ │ ├── MJRefreshAutoFooter.h
│ │ ├── MJRefreshAutoGifFooter.h
│ │ ├── MJRefreshAutoNormalFooter.h
│ │ ├── MJRefreshAutoStateFooter.h
│ │ ├── MJRefreshBackFooter.h
│ │ ├── MJRefreshBackGifFooter.h
│ │ ├── MJRefreshBackNormalFooter.h
│ │ ├── MJRefreshBackStateFooter.h
│ │ ├── MJRefreshComponent.h
│ │ ├── MJRefreshConst.h
│ │ ├── MJRefreshFooter.h
│ │ ├── MJRefreshGifHeader.h
│ │ ├── MJRefreshHeader.h
│ │ ├── MJRefreshNormalHeader.h
│ │ ├── MJRefreshStateHeader.h
│ │ ├── UIScrollView+MJExtension.h
│ │ ├── UIScrollView+MJRefresh.h
│ │ └── UIView+MJExtension.h
│ │ └── Masonry
│ │ ├── MASCompositeConstraint.h
│ │ ├── MASConstraint+Private.h
│ │ ├── MASConstraint.h
│ │ ├── MASConstraintMaker.h
│ │ ├── MASLayoutConstraint.h
│ │ ├── MASUtilities.h
│ │ ├── MASViewAttribute.h
│ │ ├── MASViewConstraint.h
│ │ ├── Masonry.h
│ │ ├── NSArray+MASAdditions.h
│ │ ├── NSArray+MASShorthandAdditions.h
│ │ ├── NSLayoutConstraint+MASDebugAdditions.h
│ │ ├── View+MASAdditions.h
│ │ ├── View+MASShorthandAdditions.h
│ │ └── ViewController+MASAdditions.h
├── MBProgressHUD
│ ├── LICENSE
│ ├── MBProgressHUD.h
│ ├── MBProgressHUD.m
│ └── README.mdown
├── MJRefresh
│ ├── LICENSE
│ ├── MJRefresh
│ │ ├── Base
│ │ │ ├── MJRefreshAutoFooter.h
│ │ │ ├── MJRefreshAutoFooter.m
│ │ │ ├── MJRefreshBackFooter.h
│ │ │ ├── MJRefreshBackFooter.m
│ │ │ ├── MJRefreshComponent.h
│ │ │ ├── MJRefreshComponent.m
│ │ │ ├── MJRefreshFooter.h
│ │ │ ├── MJRefreshFooter.m
│ │ │ ├── MJRefreshHeader.h
│ │ │ └── MJRefreshHeader.m
│ │ ├── Custom
│ │ │ ├── Footer
│ │ │ │ ├── Auto
│ │ │ │ │ ├── MJRefreshAutoGifFooter.h
│ │ │ │ │ ├── MJRefreshAutoGifFooter.m
│ │ │ │ │ ├── MJRefreshAutoNormalFooter.h
│ │ │ │ │ ├── MJRefreshAutoNormalFooter.m
│ │ │ │ │ ├── MJRefreshAutoStateFooter.h
│ │ │ │ │ └── MJRefreshAutoStateFooter.m
│ │ │ │ └── Back
│ │ │ │ │ ├── MJRefreshBackGifFooter.h
│ │ │ │ │ ├── MJRefreshBackGifFooter.m
│ │ │ │ │ ├── MJRefreshBackNormalFooter.h
│ │ │ │ │ ├── MJRefreshBackNormalFooter.m
│ │ │ │ │ ├── MJRefreshBackStateFooter.h
│ │ │ │ │ └── MJRefreshBackStateFooter.m
│ │ │ └── Header
│ │ │ │ ├── MJRefreshGifHeader.h
│ │ │ │ ├── MJRefreshGifHeader.m
│ │ │ │ ├── MJRefreshNormalHeader.h
│ │ │ │ ├── MJRefreshNormalHeader.m
│ │ │ │ ├── MJRefreshStateHeader.h
│ │ │ │ └── MJRefreshStateHeader.m
│ │ ├── MJRefresh.bundle
│ │ │ └── arrow@2x.png
│ │ ├── MJRefresh.h
│ │ ├── MJRefreshConst.h
│ │ ├── MJRefreshConst.m
│ │ ├── UIScrollView+MJExtension.h
│ │ ├── UIScrollView+MJExtension.m
│ │ ├── UIScrollView+MJRefresh.h
│ │ ├── UIScrollView+MJRefresh.m
│ │ ├── UIView+MJExtension.h
│ │ └── UIView+MJExtension.m
│ └── README.md
├── Manifest.lock
├── Masonry
│ ├── LICENSE
│ ├── Masonry
│ │ ├── MASCompositeConstraint.h
│ │ ├── MASCompositeConstraint.m
│ │ ├── MASConstraint+Private.h
│ │ ├── MASConstraint.h
│ │ ├── MASConstraint.m
│ │ ├── MASConstraintMaker.h
│ │ ├── MASConstraintMaker.m
│ │ ├── MASLayoutConstraint.h
│ │ ├── MASLayoutConstraint.m
│ │ ├── MASUtilities.h
│ │ ├── MASViewAttribute.h
│ │ ├── MASViewAttribute.m
│ │ ├── MASViewConstraint.h
│ │ ├── MASViewConstraint.m
│ │ ├── Masonry.h
│ │ ├── NSArray+MASAdditions.h
│ │ ├── NSArray+MASAdditions.m
│ │ ├── NSArray+MASShorthandAdditions.h
│ │ ├── NSLayoutConstraint+MASDebugAdditions.h
│ │ ├── NSLayoutConstraint+MASDebugAdditions.m
│ │ ├── View+MASAdditions.h
│ │ ├── View+MASAdditions.m
│ │ ├── View+MASShorthandAdditions.h
│ │ ├── ViewController+MASAdditions.h
│ │ └── ViewController+MASAdditions.m
│ └── README.md
├── Pods.xcodeproj
│ ├── project.pbxproj
│ └── xcuserdata
│ │ └── Arthur.xcuserdatad
│ │ └── xcschemes
│ │ ├── AFNetworking.xcscheme
│ │ ├── MBProgressHUD.xcscheme
│ │ ├── MJRefresh.xcscheme
│ │ ├── Masonry.xcscheme
│ │ ├── Pods.xcscheme
│ │ └── xcschememanagement.plist
└── Target Support Files
│ ├── AFNetworking
│ ├── AFNetworking-dummy.m
│ ├── AFNetworking-prefix.pch
│ └── AFNetworking.xcconfig
│ ├── MBProgressHUD
│ ├── MBProgressHUD-dummy.m
│ ├── MBProgressHUD-prefix.pch
│ └── MBProgressHUD.xcconfig
│ ├── MJRefresh
│ ├── MJRefresh-dummy.m
│ ├── MJRefresh-prefix.pch
│ └── MJRefresh.xcconfig
│ ├── Masonry
│ ├── Masonry-dummy.m
│ ├── Masonry-prefix.pch
│ └── Masonry.xcconfig
│ └── Pods
│ ├── Pods-acknowledgements.markdown
│ ├── Pods-acknowledgements.plist
│ ├── Pods-dummy.m
│ ├── Pods-frameworks.sh
│ ├── Pods-resources.sh
│ ├── Pods.debug.xcconfig
│ └── Pods.release.xcconfig
├── README.md
├── show.gif
└── 王敏君-位置隐私保护在移动定位社交服务中的研究与应用.docx
/MJdeFM.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/MJdeFM.xcodeproj/project.xcworkspace/xcuserdata/Arthur.xcuserdatad/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges
6 |
7 | SnapshotAutomaticallyBeforeSignificantChanges
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/MJdeFM.xcodeproj/xcuserdata/Arthur.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/MJdeFM.xcodeproj/xcuserdata/Arthur.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | MJdeFM.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | 8E222BB41B6EF9FD00C86CDC
16 |
17 | primary
18 |
19 |
20 | 8E222BCD1B6EF9FD00C86CDC
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/MJdeFM.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/MJdeFM.xcworkspace/xcshareddata/MJdeFM.xccheckout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDESourceControlProjectFavoriteDictionaryKey
6 |
7 | IDESourceControlProjectIdentifier
8 | F3C2D8C2-4D36-49B1-9A88-642E114D6138
9 | IDESourceControlProjectName
10 | MJdeFM
11 | IDESourceControlProjectOriginsDictionary
12 |
13 | 72EB40751BAE138A692715166AF76AC2720A4CC6
14 | https://github.com/kingstal/MJdeFM.git
15 |
16 | IDESourceControlProjectPath
17 | MJdeFM.xcworkspace
18 | IDESourceControlProjectRelativeInstallPathDictionary
19 |
20 | 72EB40751BAE138A692715166AF76AC2720A4CC6
21 | ..
22 |
23 | IDESourceControlProjectURL
24 | https://github.com/kingstal/MJdeFM.git
25 | IDESourceControlProjectVersion
26 | 111
27 | IDESourceControlProjectWCCIdentifier
28 | 72EB40751BAE138A692715166AF76AC2720A4CC6
29 | IDESourceControlProjectWCConfigurations
30 |
31 |
32 | IDESourceControlRepositoryExtensionIdentifierKey
33 | public.vcs.git
34 | IDESourceControlWCCIdentifierKey
35 | 72EB40751BAE138A692715166AF76AC2720A4CC6
36 | IDESourceControlWCCName
37 | MJdeFM
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/MJdeFM.xcworkspace/xcuserdata/Arthur.xcuserdatad/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges
6 |
7 | SnapshotAutomaticallyBeforeSignificantChanges
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/MJdeFM.xcworkspace/xcuserdata/Arthur.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/MJdeFM/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // MJdeFM
4 | //
5 | // Created by WangMinjun on 15/8/3.
6 | // Copyright (c) 2015年 WangMinjun. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow* window;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/MJdeFM/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // MJdeFM
4 | //
5 | // Created by WangMinjun on 15/8/3.
6 | // Copyright (c) 2015年 WangMinjun. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 | #import "MJUserInfoManager.h"
11 | #import "MJChannelManager.h"
12 |
13 | @interface AppDelegate ()
14 |
15 | @end
16 |
17 | @implementation AppDelegate
18 |
19 | - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
20 | {
21 | // Override point for customization after application launch.
22 | [[UIApplication sharedApplication] setStatusBarHidden:YES];
23 |
24 | //远程控制
25 | [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
26 | [self becomeFirstResponder];
27 |
28 | // 如果已经登录,从文件中读取保存的登录信息
29 | [MJUserInfoManager sharedUserInfoManager].userInfo = [[MJUserInfoManager sharedUserInfoManager] unarchiverUserInfo];
30 |
31 | [[MJChannelManager sharedChannelManager] updateChannels];
32 | return YES;
33 | }
34 |
35 | - (void)applicationWillResignActive:(UIApplication*)application
36 | {
37 | // 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.
38 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
39 | }
40 |
41 | - (void)applicationDidEnterBackground:(UIApplication*)application
42 | {
43 | // 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.
44 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
45 | }
46 |
47 | - (void)applicationWillEnterForeground:(UIApplication*)application
48 | {
49 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
50 | }
51 |
52 | - (void)applicationDidBecomeActive:(UIApplication*)application
53 | {
54 | // 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.
55 | }
56 |
57 | - (void)applicationWillTerminate:(UIApplication*)application
58 | {
59 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
60 | }
61 |
62 | @end
63 |
--------------------------------------------------------------------------------
/MJdeFM/ContextMenuCell/ContextMenuCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // YALSideMenuCell.h
3 | // YALMenuAnimation
4 | //
5 | // Created by Maksym Lazebnyi on 1/12/15.
6 | // Copyright (c) 2015 Yalantis. All rights reserved.
7 | //
8 |
9 |
10 | @import UIKit;
11 |
12 | #import "YALContextMenuCell.h"
13 |
14 | @interface ContextMenuCell : UITableViewCell
15 |
16 | @property (strong, nonatomic) IBOutlet UIImageView *menuImageView;
17 | @property (strong, nonatomic) IBOutlet UILabel *menuTitleLabel;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/MJdeFM/ContextMenuCell/ContextMenuCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // YALSideMenuCell.m
3 | // YALMenuAnimation
4 | //
5 | // Created by Maksym Lazebnyi on 1/12/15.
6 | // Copyright (c) 2015 Yalantis. All rights reserved.
7 | //
8 |
9 | #import "ContextMenuCell.h"
10 |
11 | @interface ContextMenuCell ()
12 |
13 | @end
14 |
15 | @implementation ContextMenuCell
16 |
17 | - (void)awakeFromNib {
18 | [super awakeFromNib];
19 | self.selectionStyle = UITableViewCellSelectionStyleNone;
20 | self.layer.masksToBounds = YES;
21 | self.layer.shadowOffset = CGSizeMake(0, 2);
22 | self.layer.shadowColor = [[UIColor colorWithRed:181.0/255.0 green:181.0/255.0 blue:181.0/255.0 alpha:1] CGColor];
23 | self.layer.shadowRadius = 5;
24 | self.layer.shadowOpacity = 0.5;
25 | }
26 |
27 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
28 | [super setSelected:selected animated:animated];
29 | }
30 |
31 | #pragma mark - YALContextMenuCell
32 |
33 | - (UIView*)animatedIcon {
34 | return self.menuImageView;
35 | }
36 |
37 | - (UIView *)animatedContent {
38 | return self.menuTitleLabel;
39 | }
40 |
41 | @end
42 |
--------------------------------------------------------------------------------
/MJdeFM/Controller/MJChannelViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJChannelViewController.h
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/5.
6 | //
7 | //
8 |
9 | #import
10 |
11 | @class MJChannelViewController;
12 |
13 | @interface MJChannelViewController : UITableViewController
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/MJdeFM/Controller/MJChannelViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJChannelViewController.m
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/5.
6 | //
7 | //
8 |
9 | #import "MJChannelViewController.h"
10 | #import "MJChannelManager.h"
11 | #import "MJRefresh.h"
12 | #import "MJUserInfoManager.h"
13 | #import "MBProgressHUD.h"
14 |
15 | @interface MJChannelViewController ()
16 |
17 | @property (nonatomic, strong) NSArray* channels;
18 |
19 | @end
20 |
21 | @implementation MJChannelViewController
22 |
23 | - (void)viewDidLoad
24 | {
25 | [super viewDidLoad];
26 |
27 | // 设置 MJChannelViewController 为 MJChannelManager 的 delegate,当 channel 发生改变时,tableView reload
28 | [MJChannelManager sharedChannelManager].delegate = self;
29 | self.channels = [MJChannelManager sharedChannelManager].channels;
30 |
31 | //添加上拉刷新
32 | __weak __typeof(self) weakSelf = self;
33 | self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
34 | // 进入刷新状态后会自动调用这个block
35 | [[MJChannelManager sharedChannelManager] updateChannels];
36 | [weakSelf.tableView.header endRefreshing];
37 | }];
38 | }
39 |
40 | - (void)channelManagerdidUpdateChannel:(MJChannelManager*)manager
41 | {
42 | self.channels = manager.channels;
43 | }
44 |
45 | - (void)setChannels:(NSArray*)channels
46 | {
47 | _channels = [channels copy];
48 | [self.tableView reloadData];
49 | }
50 |
51 | #pragma mark - Table view data source
52 |
53 | - (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView
54 | {
55 | return [self.channels count];
56 | }
57 |
58 | - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
59 | {
60 | return [self.channels[section] count];
61 | }
62 |
63 | - (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
64 | {
65 | UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"channelCell" forIndexPath:indexPath];
66 |
67 | MJChannel* channel = self.channels[indexPath.section][indexPath.row];
68 | cell.textLabel.text = channel.name;
69 | return cell;
70 | }
71 |
72 | - (NSString*)tableView:(UITableView*)tableView titleForHeaderInSection:(NSInteger)section
73 | {
74 | NSString* title = nil;
75 | switch (section) {
76 | case 0:
77 | title = @"我的兆赫";
78 | break;
79 | case 1:
80 | title = @"推荐兆赫";
81 | break;
82 | case 2:
83 | title = @"上升最快兆赫";
84 | break;
85 | case 3:
86 | title = @"热门兆赫";
87 | break;
88 | default:
89 | break;
90 | }
91 | return title;
92 | }
93 |
94 | #pragma mark - UITableViewDelegate
95 |
96 | - (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
97 | {
98 | [tableView deselectRowAtIndexPath:indexPath animated:YES];
99 |
100 | if (indexPath.section == 0 && indexPath.row == 1 && ![MJUserInfoManager sharedUserInfoManager].userInfo) {
101 | MBProgressHUD* hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
102 |
103 | // Configure for text only and offset down
104 | hud.mode = MBProgressHUDModeText;
105 | hud.labelText = @"还没有登录,赶紧登录哦!";
106 | hud.margin = 10.f;
107 | hud.removeFromSuperViewOnHide = YES;
108 |
109 | [hud hide:YES afterDelay:3];
110 |
111 | return;
112 | }
113 |
114 | MJChannel* channel = self.channels[indexPath.section][indexPath.row];
115 | NSDictionary* dic = @{ @"channel" : channel };
116 |
117 | [[NSNotificationCenter defaultCenter] postNotificationName:MJChannelViewControllerDidSelectChannelNotification object:nil userInfo:dic];
118 | }
119 |
120 | @end
121 |
--------------------------------------------------------------------------------
/MJdeFM/Controller/MJLoginViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJLoginViewController.h
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/4.
6 | //
7 | //
8 |
9 | #import
10 | @class MJUserInfo;
11 | @class MJLoginViewController;
12 |
13 | @protocol MJLoginViewControllerDelegate
14 |
15 | - (void)loginViewControllerLoginSuccess:(MJLoginViewController*)loginVC userInfo:(MJUserInfo*)userInfo;
16 |
17 | @end
18 |
19 | @interface MJLoginViewController : UIViewController
20 |
21 | @property (nonatomic, weak) id delegate;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/MJdeFM/Controller/MJLoginViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJLoginViewController.m
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/4.
6 | //
7 | //
8 |
9 | #import "MJLoginViewController.h"
10 | #import "MJFetcher.h"
11 | #import "UIButton+AFNetworking.h"
12 | #import "MJUserInfo.h"
13 | #import "MBProgressHUD.h"
14 |
15 | @interface MJLoginViewController ()
16 |
17 | @property(nonatomic, weak) IBOutlet UIButton *captchaBtn;
18 | @property(nonatomic, weak) IBOutlet UITextField *username;
19 | @property(nonatomic, weak) IBOutlet UITextField *password;
20 | @property(nonatomic, weak) IBOutlet UITextField *captcha;
21 |
22 | @property(nonatomic, strong) NSString *captchaID;
23 |
24 | - (IBAction)submitButtonTapped:(UIButton *)sender;
25 | - (IBAction)cancelButtonTapped:(UIButton *)sender;
26 | - (IBAction)backgroundTap:(id)sender;
27 | - (IBAction)captchaBtnTapped:(id)sender;
28 |
29 | @end
30 |
31 | @implementation MJLoginViewController
32 |
33 | - (void)viewWillAppear:(BOOL)animated {
34 | [super viewWillAppear:animated];
35 | [self loadCaptcha];
36 | }
37 |
38 | - (void)loadCaptcha {
39 | [[MJFetcher sharedFetcher] fetchCaptchaImageURLSuccess:^(MJFetcher *fetcher,
40 | id data) {
41 | NSArray *captchaArray = data;
42 | self.captchaID = captchaArray[0];
43 | [self.captchaBtn setImageForState:UIControlStateNormal
44 | withURL:[NSURL URLWithString:captchaArray[1]]];
45 | } failure:^(MJFetcher *fetcher, id data) {
46 | NSLog(@"%@", data);
47 | }];
48 | }
49 |
50 | - (IBAction)captchaBtnTapped:(id)sender {
51 | [self loadCaptcha];
52 | }
53 |
54 | - (IBAction)submitButtonTapped:(UIButton *)sender {
55 | [MBProgressHUD showHUDAddedTo:self.view animated:YES];
56 |
57 | NSString *username = _username.text;
58 | NSString *password = _password.text;
59 | NSString *captcha = _captcha.text;
60 |
61 | [[MJFetcher sharedFetcher] loginwithUsername:username
62 | password:password
63 | captcha:captcha
64 | captchaID:self.captchaID
65 | rememberOnorOff:@"off"
66 | success:^(MJFetcher *fetcher, id data) {
67 | MJUserInfo *userInfo = data;
68 | if ([userInfo.login isEqualToString:@"0"]) {
69 | if ([self.delegate
70 | respondsToSelector:@selector(
71 | loginViewControllerLoginSuccess:
72 | userInfo:)]) {
73 | [self.delegate loginViewControllerLoginSuccess:self
74 | userInfo:userInfo];
75 | }
76 | dispatch_async(dispatch_get_main_queue(), ^{
77 | [MBProgressHUD hideHUDForView:self.view animated:YES];
78 | });
79 | }
80 | }
81 | failure:^(MJFetcher *fetcher, NSError *error) {
82 | NSLog(@"%@", error);
83 | dispatch_async(dispatch_get_main_queue(), ^{
84 | [MBProgressHUD hideHUDForView:self.view animated:YES];
85 | });
86 | }];
87 | }
88 |
89 | - (IBAction)cancelButtonTapped:(UIButton *)sender {
90 | [self dismissViewControllerAnimated:YES completion:nil];
91 | }
92 |
93 | - (IBAction)backgroundTap:(id)sender {
94 | [self.view endEditing:YES];
95 | }
96 |
97 | @end
98 |
--------------------------------------------------------------------------------
/MJdeFM/Controller/MJPlayerViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJPlayerViewController.h
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/3.
6 | //
7 | //
8 |
9 | #import
10 |
11 | @interface MJPlayerViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/MJdeFM/Controller/MJTabBarController.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJTabBarController.h
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/3.
6 | //
7 | //
8 |
9 | #import
10 |
11 | @interface MJTabBarController : UITabBarController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/MJdeFM/Controller/MJUserInfoViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJUserInfoViewController.h
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/4.
6 | //
7 | //
8 |
9 | #import
10 |
11 | @interface MJUserInfoViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "29x29",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-Small.png",
7 | "scale" : "1x"
8 | },
9 | {
10 | "size" : "29x29",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-Small@2x.png",
13 | "scale" : "2x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-Small@3x.png",
19 | "scale" : "3x"
20 | },
21 | {
22 | "size" : "40x40",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-Spotlight-40@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "40x40",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-Spotlight-40@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "57x57",
35 | "idiom" : "iphone",
36 | "filename" : "Icon.png",
37 | "scale" : "1x"
38 | },
39 | {
40 | "size" : "57x57",
41 | "idiom" : "iphone",
42 | "filename" : "Icon@2x.png",
43 | "scale" : "2x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "29x29",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-Small-1.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "29x29",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-Small@2x-1.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "40x40",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-Spotlight-40.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "40x40",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-Spotlight-40@2x-1.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "50x50",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-Small-50.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "50x50",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-Small-50@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "72x72",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-72.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "72x72",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-72@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "76x76",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-76.png",
109 | "scale" : "1x"
110 | },
111 | {
112 | "size" : "76x76",
113 | "idiom" : "ipad",
114 | "filename" : "Icon-76@2x.png",
115 | "scale" : "2x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-72.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-76.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small-1.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/AppIcon.appiconset/Icon@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/albumBlock.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "albumBlock.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x",
11 | "filename" : "albumBlock@2x.png"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x",
16 | "filename" : "albumBlock@3x.png"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/albumBlock.imageset/albumBlock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/albumBlock.imageset/albumBlock.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/albumBlock.imageset/albumBlock@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/albumBlock.imageset/albumBlock@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/albumBlock.imageset/albumBlock@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/albumBlock.imageset/albumBlock@3x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/albumBlock2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "albumBlock2.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x",
11 | "filename" : "albumBlock2@2x.png"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x",
16 | "filename" : "albumBlock2@3x.png"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/albumBlock2.imageset/albumBlock2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/albumBlock2.imageset/albumBlock2.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/albumBlock2.imageset/albumBlock2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/albumBlock2.imageset/albumBlock2@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/albumBlock2.imageset/albumBlock2@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/albumBlock2.imageset/albumBlock2@3x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuChannel.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "menuChannel.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x",
11 | "filename" : "menuChannel@2x.png"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x",
16 | "filename" : "menuChannel@3x.png"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuChannel.imageset/menuChannel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuChannel.imageset/menuChannel.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuChannel.imageset/menuChannel@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuChannel.imageset/menuChannel@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuChannel.imageset/menuChannel@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuChannel.imageset/menuChannel@3x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuClose.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "menuClose.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x",
11 | "filename" : "menuClose@2x.png"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x",
16 | "filename" : "menuClose@3x.png"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuClose.imageset/menuClose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuClose.imageset/menuClose.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuClose.imageset/menuClose@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuClose.imageset/menuClose@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuClose.imageset/menuClose@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuClose.imageset/menuClose@3x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuIcon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "menuIcon.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x",
11 | "filename" : "menuIcon@2x.png"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x",
16 | "filename" : "menuIcon@3x.png"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuIcon.imageset/menuIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuIcon.imageset/menuIcon.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuIcon.imageset/menuIcon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuIcon.imageset/menuIcon@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuIcon.imageset/menuIcon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuIcon.imageset/menuIcon@3x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuLogin.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "menuLogin.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x",
11 | "filename" : "menuLogin@2x.png"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x",
16 | "filename" : "menuLogin@3x.png"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuLogin.imageset/menuLogin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuLogin.imageset/menuLogin.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuLogin.imageset/menuLogin@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuLogin.imageset/menuLogin@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuLogin.imageset/menuLogin@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuLogin.imageset/menuLogin@3x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuPlayer.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "menuPlayer.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x",
11 | "filename" : "menuPlayer@2x.png"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x",
16 | "filename" : "menuPlayer@3x.png"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuPlayer.imageset/menuPlayer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuPlayer.imageset/menuPlayer.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuPlayer.imageset/menuPlayer@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuPlayer.imageset/menuPlayer@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/bar/menuPlayer.imageset/menuPlayer@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/bar/menuPlayer.imageset/menuPlayer@3x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/login.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "login.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "login@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "login@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/login.imageset/login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/login.imageset/login.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/login.imageset/login@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/login.imageset/login@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/login.imageset/login@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/login.imageset/login@3x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/lufei.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "lufei.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "lufei@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "lufei@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/lufei.imageset/lufei.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/lufei.imageset/lufei.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/lufei.imageset/lufei@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/lufei.imageset/lufei@2x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/lufei.imageset/lufei@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/lufei.imageset/lufei@3x.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/player/delete.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "delete.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/player/delete.imageset/delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/player/delete.imageset/delete.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/player/heart1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "heart1.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/player/heart1.imageset/heart1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/player/heart1.imageset/heart1.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/player/heart2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "heart2.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/player/heart2.imageset/heart2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/player/heart2.imageset/heart2.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/player/next.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "next.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/player/next.imageset/next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/player/next.imageset/next.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/player/pause.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "stop.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/player/pause.imageset/stop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/player/pause.imageset/stop.png
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/player/play.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x",
6 | "filename" : "play.png"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/MJdeFM/Images.xcassets/player/play.imageset/play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/MJdeFM/Images.xcassets/player/play.imageset/play.png
--------------------------------------------------------------------------------
/MJdeFM/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 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | NSAppTransportSecurity
26 |
27 | NSAllowsArbitraryLoads
28 |
29 |
30 | UIBackgroundModes
31 |
32 | audio
33 | fetch
34 |
35 | UILaunchStoryboardName
36 | LaunchScreen
37 | UIMainStoryboardFile
38 | Main
39 | UIRequiredDeviceCapabilities
40 |
41 | armv7
42 |
43 | UISupportedInterfaceOrientations
44 |
45 | UIInterfaceOrientationPortrait
46 | UIInterfaceOrientationLandscapeLeft
47 | UIInterfaceOrientationLandscapeRight
48 |
49 | UISupportedInterfaceOrientations~ipad
50 |
51 | UIInterfaceOrientationPortrait
52 | UIInterfaceOrientationPortraitUpsideDown
53 | UIInterfaceOrientationLandscapeLeft
54 | UIInterfaceOrientationLandscapeRight
55 |
56 | UIViewControllerBasedStatusBarAppearance
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/MJdeFM/Model/MJChannel.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJChannel.h
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/3.
6 | //
7 | //
8 |
9 | #import
10 |
11 | @interface MJChannel : NSObject
12 | @property (nonatomic) NSString* ID;
13 | @property (nonatomic) NSString* name;
14 |
15 | - (instancetype)initWithDictionary:(NSDictionary*)dictionary;
16 | + (instancetype)channelWithDictionary:(NSDictionary*)dictionary;
17 | @end
18 |
--------------------------------------------------------------------------------
/MJdeFM/Model/MJChannel.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJChannel.m
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/3.
6 | //
7 | //
8 |
9 | #import "MJChannel.h"
10 |
11 | @implementation MJChannel
12 |
13 | - (instancetype)initWithDictionary:(NSDictionary*)dictionary
14 | {
15 | if (self = [super init]) {
16 | self.ID = [dictionary objectForKey:@"id"];
17 | self.name = [dictionary objectForKey:@"name"];
18 | }
19 | return self;
20 | }
21 |
22 | + (instancetype)channelWithDictionary:(NSDictionary*)dictionary
23 | {
24 | return [[MJChannel alloc] initWithDictionary:dictionary];
25 | }
26 |
27 | @end
28 |
--------------------------------------------------------------------------------
/MJdeFM/Model/MJChannelManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJChannelManager.h
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/3.
6 | //
7 | //
8 |
9 | #import
10 | #import "MJChannel.h"
11 |
12 | typedef void (^UpdateChannelsSuccessBlock)();
13 |
14 | extern NSString* const MJChannelViewControllerDidSelectChannelNotification;
15 |
16 | @class MJChannelManager;
17 |
18 | @protocol MJChannelManagerDelegate
19 |
20 | - (void)channelManagerdidUpdateChannel:(MJChannelManager*)manager;
21 |
22 | @end
23 |
24 | @interface MJChannelManager : NSObject
25 |
26 | @property (nonatomic, strong) MJChannel* currentChannel;
27 | @property (nonatomic, strong) NSMutableArray* channels;
28 |
29 | @property (nonatomic, weak) id delegate;
30 |
31 | + (instancetype)sharedChannelManager;
32 | - (void)updateChannels;
33 |
34 | @end
35 |
--------------------------------------------------------------------------------
/MJdeFM/Model/MJSong.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJSong.h
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/3.
6 | //
7 | //
8 |
9 | #import
10 |
11 | @interface MJSong : NSObject
12 |
13 | @property (nonatomic) NSString* title;
14 | @property (nonatomic) NSString* artist;
15 | @property (nonatomic) NSString* picture;
16 | @property (nonatomic) NSString* length;
17 | @property (nonatomic) NSString* like;
18 | @property (nonatomic) NSString* url;
19 | @property (nonatomic) NSString* sid;
20 |
21 | - (instancetype)initWithDictionary:(NSDictionary*)dictionary;
22 | + (instancetype)songWithDictionary:(NSDictionary*)dictionary;
23 | @end
24 |
--------------------------------------------------------------------------------
/MJdeFM/Model/MJSong.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJSong.m
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/3.
6 | //
7 | //
8 |
9 | #import "MJSong.h"
10 |
11 | @implementation MJSong
12 |
13 | - (instancetype)initWithDictionary:(NSDictionary*)dictionary
14 | {
15 | if (self = [super init]) {
16 | self.artist = [dictionary objectForKey:@"artist"];
17 | self.title = [dictionary objectForKey:@"title"];
18 | self.url = [dictionary objectForKey:@"url"];
19 | self.picture = [dictionary objectForKey:@"picture"];
20 | self.length = [dictionary objectForKey:@"length"];
21 | self.like = [dictionary objectForKey:@"like"];
22 | self.sid = [dictionary objectForKey:@"sid"];
23 | }
24 | return self;
25 | }
26 |
27 | + (instancetype)songWithDictionary:(NSDictionary*)dictionary
28 | {
29 | return [[MJSong alloc] initWithDictionary:dictionary];
30 | }
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/MJdeFM/Model/MJUserInfo.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJUserInfo.h
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/4.
6 | //
7 | //
8 |
9 | #import
10 |
11 | @interface MJUserInfo : NSObject
12 |
13 | @property (nonatomic, strong) NSString* login; // 0 : 登录成功
14 | @property (nonatomic, strong) NSString* cookies;
15 | @property (nonatomic, strong) NSString* userID;
16 | @property (nonatomic, strong) NSString* name;
17 | @property (nonatomic, strong) NSString* banned;
18 | @property (nonatomic, strong) NSString* liked;
19 | @property (nonatomic, strong) NSString* played;
20 |
21 | - (instancetype)initWithDictionary:(NSDictionary*)dictionary;
22 | + (instancetype)userInfoWithDictionary:(NSDictionary*)dictionary;
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/MJdeFM/Model/MJUserInfo.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJUserInfo.m
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/4.
6 | //
7 | //
8 |
9 | #import "MJUserInfo.h"
10 |
11 | @implementation MJUserInfo
12 |
13 | - (instancetype)initWithDictionary:(NSDictionary*)dictionary
14 | {
15 | if (self = [super init]) {
16 | self.login = [NSString stringWithFormat:@"%@", [dictionary valueForKey:@"r"]];
17 | NSDictionary* tempUserInfoDic = [dictionary valueForKey:@"user_info"];
18 | self.cookies = [tempUserInfoDic valueForKey:@"ck"];
19 | self.userID = [tempUserInfoDic valueForKey:@"id"];
20 | self.name = [tempUserInfoDic valueForKey:@"name"];
21 | NSDictionary* tempPlayRecordDic = [tempUserInfoDic valueForKey:@"play_record"];
22 | self.banned = [NSString stringWithFormat:@"%@", [tempPlayRecordDic valueForKey:@"banned"]];
23 | self.liked = [NSString stringWithFormat:@"%@", [tempPlayRecordDic valueForKey:@"liked"]];
24 | self.played = [NSString stringWithFormat:@"%@", [tempPlayRecordDic valueForKey:@"played"]];
25 | }
26 | return self;
27 | }
28 |
29 | + (instancetype)userInfoWithDictionary:(NSDictionary*)dictionary
30 | {
31 | return [[MJUserInfo alloc] initWithDictionary:dictionary];
32 | }
33 |
34 | - (id)initWithCoder:(NSCoder*)aDecoder
35 | {
36 | if (self = [super init]) {
37 | self.login = [aDecoder decodeObjectForKey:@"login"];
38 | self.cookies = [aDecoder decodeObjectForKey:@"cookies"];
39 | self.userID = [aDecoder decodeObjectForKey:@"userID"];
40 | self.name = [aDecoder decodeObjectForKey:@"name"];
41 | self.banned = [aDecoder decodeObjectForKey:@"banned"];
42 | self.liked = [aDecoder decodeObjectForKey:@"liked"];
43 | self.played = [aDecoder decodeObjectForKey:@"played"];
44 | }
45 | return self;
46 | }
47 |
48 | - (void)encodeWithCoder:(NSCoder*)aCoder
49 | {
50 | [aCoder encodeObject:_login forKey:@"login"];
51 | [aCoder encodeObject:_cookies forKey:@"cookies"];
52 | [aCoder encodeObject:_userID forKey:@"userID"];
53 | [aCoder encodeObject:_name forKey:@"name"];
54 | [aCoder encodeObject:_banned forKey:@"banned"];
55 | [aCoder encodeObject:_liked forKey:@"liked"];
56 | [aCoder encodeObject:_played forKey:@"played"];
57 | }
58 |
59 | @end
60 |
--------------------------------------------------------------------------------
/MJdeFM/Model/MJUserInfoManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJUserInfoManager.h
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/4.
6 | //
7 | //
8 |
9 | #import
10 | #import "MJUserInfo.h"
11 |
12 | @interface MJUserInfoManager : NSObject
13 |
14 | @property (nonatomic, strong) MJUserInfo* userInfo;
15 |
16 | + (instancetype)sharedUserInfoManager;
17 |
18 | - (void)archiverUserInfo;
19 | - (MJUserInfo*)unarchiverUserInfo;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/MJdeFM/Model/MJUserInfoManager.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJUserInfoManager.m
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/4.
6 | //
7 | //
8 |
9 | #import "MJUserInfoManager.h"
10 |
11 | @implementation MJUserInfoManager
12 |
13 | + (instancetype)sharedUserInfoManager
14 | {
15 | static MJUserInfoManager* userInfoManager = nil;
16 | static dispatch_once_t onceToken;
17 | dispatch_once(&onceToken, ^{
18 | userInfoManager = [[self alloc] init];
19 | });
20 | return userInfoManager;
21 | }
22 |
23 | - (void)archiverUserInfo
24 | {
25 | NSString* file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"userInfo.data"];
26 | [NSKeyedArchiver archiveRootObject:self.userInfo toFile:file];
27 | }
28 |
29 | - (MJUserInfo*)unarchiverUserInfo
30 | {
31 | NSString* file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"userInfo.data"];
32 | MJUserInfo* userInfo = [NSKeyedUnarchiver unarchiveObjectWithFile:file];
33 | return userInfo;
34 | }
35 |
36 | - (void)setUserInfo:(MJUserInfo*)userInfo
37 | {
38 | _userInfo = userInfo;
39 | [self archiverUserInfo];
40 | }
41 |
42 | @end
43 |
--------------------------------------------------------------------------------
/MJdeFM/Utility/MJFetcher.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJFetcher.h
3 | //
4 | //
5 | // Created by WangMinjun on 15/8/3.
6 | //
7 | //
8 |
9 | #import
10 | #import "AFNetworking.h"
11 |
12 | @class MJSong;
13 | @class MJUserInfo;
14 | @class MJChannel;
15 | @class MJFetcher;
16 |
17 | typedef void (^MJFetcherErrorBlock)(MJFetcher* fetcher, NSError* error);
18 | typedef void (^MJFetcherSuccessBlock)(MJFetcher* fetcher, id data);
19 |
20 | @interface MJFetcher : NSObject
21 |
22 | @property (nonatomic, strong) NSOperation* requestOperation;
23 |
24 | + (MJFetcher*)sharedFetcher;
25 |
26 | - (void)fetchPlaylistwithType:(NSString*)type song:(MJSong*)song passedTime:(NSTimeInterval)passedTime channel:(MJChannel*)channel success:(MJFetcherSuccessBlock)successBlock failure:(MJFetcherErrorBlock)errorBlock;
27 |
28 | /**
29 | * 获取验证码图片
30 | */
31 | - (void)fetchCaptchaImageURLSuccess:(MJFetcherSuccessBlock)successBlock failure:(MJFetcherSuccessBlock)errorBlock;
32 |
33 | /**
34 | * 用户登录
35 | */
36 | - (void)loginwithUsername:(NSString*)username password:(NSString*)password captcha:(NSString*)captcha captchaID:(NSString*)captchaID rememberOnorOff:(NSString*)rememberOnorOff success:(MJFetcherSuccessBlock)successBlock failure:(MJFetcherErrorBlock)errorBlock;
37 |
38 | /**
39 | * 用户注销
40 | */
41 | - (void)logoutUser:(MJUserInfo*)userInfo success:(MJFetcherSuccessBlock)successBlock failure:(MJFetcherErrorBlock)errorBlock;
42 |
43 | /**
44 | * 更新 Channel
45 | */
46 | - (void)fetchChannelWithURL:(NSString*)url success:(MJFetcherSuccessBlock)successBlock failure:(MJFetcherErrorBlock)errorBlock;
47 |
48 | /**
49 | * 添加红心歌曲
50 | */
51 | - (void)user:(MJUserInfo*)user addHeartSong:(MJSong*)song action:(NSString*)action success:(MJFetcherSuccessBlock)successBlock failure:(MJFetcherErrorBlock)errorBlock;
52 |
53 | @end
54 |
--------------------------------------------------------------------------------
/MJdeFM/YALContextMenu/UIView+YALConstraints.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+FillWithView.h
3 | // ContextMenu
4 | //
5 | // Created by Maksym Lazebnyi on 1/15/15.
6 | // Copyright (c) 2015 Yalantis. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIView (YALConstraints)
12 |
13 | - (void)addSubViewiew:(UIView *)view withSidesConstrainsInsets:(UIEdgeInsets)insets;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/MJdeFM/YALContextMenu/UIView+YALConstraints.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+FillWithView.m
3 | // ContextMenu
4 | //
5 | // Created by Maksym Lazebnyi on 1/15/15.
6 | // Copyright (c) 2015 Yalantis. All rights reserved.
7 | //
8 |
9 | #import "UIView+YALConstraints.h"
10 |
11 | @implementation UIView (YALConstraints)
12 |
13 | - (void)addSubViewiew:(UIView *)view withSidesConstrainsInsets:(UIEdgeInsets)insets {
14 | NSParameterAssert(view);
15 |
16 | [view setTranslatesAutoresizingMaskIntoConstraints:NO];
17 |
18 | [self addSubview:view];
19 |
20 | [self addConstraint:[NSLayoutConstraint constraintWithItem:view
21 | attribute:NSLayoutAttributeTop
22 | relatedBy:NSLayoutRelationEqual
23 | toItem:self
24 | attribute:NSLayoutAttributeTop
25 | multiplier:1.0
26 | constant:insets.top]];
27 |
28 | [self addConstraint:[NSLayoutConstraint constraintWithItem:view
29 | attribute:NSLayoutAttributeLeading
30 | relatedBy:NSLayoutRelationEqual
31 | toItem:self
32 | attribute:NSLayoutAttributeLeading
33 | multiplier:1.0
34 | constant:insets.left]];
35 |
36 | [self addConstraint:[NSLayoutConstraint constraintWithItem:view
37 | attribute:NSLayoutAttributeBottom
38 | relatedBy:NSLayoutRelationEqual
39 | toItem:self
40 | attribute:NSLayoutAttributeBottom
41 | multiplier:1.0
42 | constant:insets.bottom]];
43 |
44 | [self addConstraint:[NSLayoutConstraint constraintWithItem:view
45 | attribute:NSLayoutAttributeTrailing
46 | relatedBy:NSLayoutRelationEqual
47 | toItem:self
48 | attribute:NSLayoutAttributeTrailing
49 | multiplier:1.0
50 | constant:insets.right]];
51 | }
52 |
53 | @end
54 |
--------------------------------------------------------------------------------
/MJdeFM/YALContextMenu/YALContextMenuCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // YALContextMenuCell.h
3 | // ContextMenu
4 | //
5 | // Created by Maksym Lazebnyi on 1/21/15.
6 | // Copyright (c) 2015 Yalantis. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @protocol YALContextMenuCell
12 |
13 | /*!
14 | @abstract
15 | Following methods called for cell when animation to be processed
16 | */
17 | - (UIView *)animatedIcon;
18 | - (UIView *)animatedContent;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/MJdeFM/YALContextMenu/YALContextMenuTableView.h:
--------------------------------------------------------------------------------
1 | //
2 | // YALTableView.h
3 | // YALMenuAnimation
4 | //
5 | // Created by Maksym Lazebnyi on 1/12/15.
6 | // Copyright (c) 2015 Yalantis. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class YALContextMenuTableView;
12 |
13 | @protocol YALContextMenuTableViewDelegate
14 |
15 | @optional
16 |
17 | /*!
18 | @abstract
19 | This method called when menu dismissed
20 |
21 | @param contextMenuTableView - object dismissed
22 |
23 | @param indexPath - indexPath of cell selected
24 | */
25 | - (void)contextMenuTableView:(YALContextMenuTableView *)contextMenuTableView didDismissWithIndexPath:(NSIndexPath *)indexPath;
26 |
27 | @end
28 |
29 |
30 | @interface YALContextMenuTableView : UITableView
31 |
32 | @property (nonatomic, weak) idyalDelegate;
33 |
34 | /*! @abstract animationDuration time for animation in seconds*/
35 | @property (nonatomic) CGFloat animationDuration;
36 |
37 |
38 | /*!
39 | @abstract
40 | Call this method for initilization of the table view with datasource and delegate assigned.
41 |
42 | @param delegateDataSource - Add our class for delegate and dataSource methods here
43 |
44 | @return YALTableView object or nil
45 | */
46 | - (instancetype)initWithTableViewDelegateDataSource:(id)delegateDataSource;
47 |
48 | /*!
49 | @abstract
50 | Use this method for correct presenration as [superview addSubview:MyYALTableView] will not present side menu properly.
51 |
52 | @param Superview to present your menu. If you are using a navigation controller it is better to use myViewController.navigationController.view as a suoerview.
53 |
54 | @param YES or NO weather you want appearance animated or not.
55 | */
56 | - (void)showInView:(UIView *)superview withEdgeInsets:(UIEdgeInsets)edgeInsets animated:(BOOL)animated;
57 |
58 | /*!
59 | @abstract
60 | Call this method to dismis your menuAnimated;
61 |
62 | @param indexPath of the cell selected (to be hidden the las one)
63 | */
64 | - (void)dismisWithIndexPath:(NSIndexPath *)indexPath;
65 |
66 | /*!
67 | @abstract
68 | Call this method before or during the device rotation animation
69 | */
70 | - (void)updateAlongsideRotation;
71 |
72 |
73 | @end
74 |
--------------------------------------------------------------------------------
/MJdeFM/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // MJdeFM
4 | //
5 | // Created by WangMinjun on 15/8/3.
6 | // Copyright (c) 2015年 WangMinjun. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "AppDelegate.h"
11 |
12 | int main(int argc, char * argv[]) {
13 | @autoreleasepool {
14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/MJdeFMTests/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 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/MJdeFMTests/MJdeFMTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJdeFMTests.m
3 | // MJdeFMTests
4 | //
5 | // Created by WangMinjun on 15/8/3.
6 | // Copyright (c) 2015年 WangMinjun. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface MJdeFMTests : XCTestCase
13 |
14 | @end
15 |
16 | @implementation MJdeFMTests
17 |
18 | - (void)setUp {
19 | [super setUp];
20 | // Put setup code here. This method is called before the invocation of each test method in the class.
21 | }
22 |
23 | - (void)tearDown {
24 | // Put teardown code here. This method is called after the invocation of each test method in the class.
25 | [super tearDown];
26 | }
27 |
28 | - (void)testExample {
29 | // This is an example of a functional test case.
30 | XCTAssert(YES, @"Pass");
31 | }
32 |
33 | - (void)testPerformanceExample {
34 | // This is an example of a performance test case.
35 | [self measureBlock:^{
36 | // Put the code you want to measure the time of here.
37 | }];
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/Podfile:
--------------------------------------------------------------------------------
1 | platform :ios, "7.0"
2 |
3 | pod "AFNetworking"
4 | pod "Masonry"
5 | pod "MBProgressHUD"
6 | pod "MJRefresh"
--------------------------------------------------------------------------------
/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - AFNetworking (2.6.1):
3 | - AFNetworking/NSURLConnection (= 2.6.1)
4 | - AFNetworking/NSURLSession (= 2.6.1)
5 | - AFNetworking/Reachability (= 2.6.1)
6 | - AFNetworking/Security (= 2.6.1)
7 | - AFNetworking/Serialization (= 2.6.1)
8 | - AFNetworking/UIKit (= 2.6.1)
9 | - AFNetworking/NSURLConnection (2.6.1):
10 | - AFNetworking/Reachability
11 | - AFNetworking/Security
12 | - AFNetworking/Serialization
13 | - AFNetworking/NSURLSession (2.6.1):
14 | - AFNetworking/Reachability
15 | - AFNetworking/Security
16 | - AFNetworking/Serialization
17 | - AFNetworking/Reachability (2.6.1)
18 | - AFNetworking/Security (2.6.1)
19 | - AFNetworking/Serialization (2.6.1)
20 | - AFNetworking/UIKit (2.6.1):
21 | - AFNetworking/NSURLConnection
22 | - AFNetworking/NSURLSession
23 | - Masonry (0.6.3)
24 | - MBProgressHUD (0.9.1)
25 | - MJRefresh (2.4.12)
26 |
27 | DEPENDENCIES:
28 | - AFNetworking
29 | - Masonry
30 | - MBProgressHUD
31 | - MJRefresh
32 |
33 | SPEC CHECKSUMS:
34 | AFNetworking: 8e4e60500beb8bec644cf575beee72990a76d399
35 | Masonry: ff105a956abcd19a618b2028b121cb638d7a8e2f
36 | MBProgressHUD: c47f2c166c126cf2ce36498d80f33e754d4e93ad
37 | MJRefresh: ca8e9589895977df32d379d46e6b8a5450b3ff44
38 |
39 | COCOAPODS: 0.39.0
40 |
--------------------------------------------------------------------------------
/Pods/AFNetworking/AFNetworking/AFNetworking.h:
--------------------------------------------------------------------------------
1 | // AFNetworking.h
2 | //
3 | // Copyright (c) 2013 AFNetworking (http://afnetworking.com/)
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
13 | // all 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
21 | // THE SOFTWARE.
22 |
23 | #import
24 | #import
25 |
26 | #ifndef _AFNETWORKING_
27 | #define _AFNETWORKING_
28 |
29 | #import "AFURLRequestSerialization.h"
30 | #import "AFURLResponseSerialization.h"
31 | #import "AFSecurityPolicy.h"
32 | #if !TARGET_OS_WATCH
33 | #import "AFNetworkReachabilityManager.h"
34 | #import "AFURLConnectionOperation.h"
35 | #import "AFHTTPRequestOperation.h"
36 | #import "AFHTTPRequestOperationManager.h"
37 | #endif
38 |
39 | #if ( ( defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1090) || \
40 | ( defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 ) || \
41 | TARGET_OS_WATCH )
42 | #import "AFURLSessionManager.h"
43 | #import "AFHTTPSessionManager.h"
44 | #endif
45 |
46 | #endif /* _AFNETWORKING_ */
47 |
--------------------------------------------------------------------------------
/Pods/AFNetworking/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/Pods/AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h:
--------------------------------------------------------------------------------
1 | // UIActivityIndicatorView+AFNetworking.h
2 | // Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 |
22 | #import
23 |
24 | #import
25 |
26 | #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
27 |
28 | #import
29 |
30 | @class AFURLConnectionOperation;
31 |
32 | /**
33 | This category adds methods to the UIKit framework's `UIActivityIndicatorView` class. The methods in this category provide support for automatically starting and stopping animation depending on the loading state of a request operation or session task.
34 | */
35 | @interface UIActivityIndicatorView (AFNetworking)
36 |
37 | ///----------------------------------
38 | /// @name Animating for Session Tasks
39 | ///----------------------------------
40 |
41 | /**
42 | Binds the animating state to the state of the specified task.
43 |
44 | @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled.
45 | */
46 | #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
47 | - (void)setAnimatingWithStateOfTask:(nullable NSURLSessionTask *)task;
48 | #endif
49 |
50 | ///---------------------------------------
51 | /// @name Animating for Request Operations
52 | ///---------------------------------------
53 |
54 | /**
55 | Binds the animating state to the execution state of the specified operation.
56 |
57 | @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled.
58 | */
59 | - (void)setAnimatingWithStateOfOperation:(nullable AFURLConnectionOperation *)operation;
60 |
61 | @end
62 |
63 | #endif
64 |
--------------------------------------------------------------------------------
/Pods/AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+AFNetworking.h
3 | //
4 | //
5 | // Created by Paulo Ferreira on 08/07/15.
6 | //
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy
8 | // of this software and associated documentation files (the "Software"), to deal
9 | // in the Software without restriction, including without limitation the rights
10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | // copies of the Software, and to permit persons to whom the Software is
12 | // furnished to do so, subject to the following conditions:
13 | //
14 | // The above copyright notice and this permission notice shall be included in
15 | // all copies or substantial portions of the Software.
16 | //
17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 | // THE SOFTWARE.
24 |
25 | #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
26 |
27 | #import
28 |
29 | @interface UIImage (AFNetworking)
30 |
31 | + (UIImage*) safeImageWithData:(NSData*)data;
32 |
33 | @end
34 |
35 | #endif
36 |
--------------------------------------------------------------------------------
/Pods/AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h:
--------------------------------------------------------------------------------
1 | // UIKit+AFNetworking.h
2 | //
3 | // Copyright (c) 2013 AFNetworking (http://afnetworking.com/)
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
13 | // all 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
21 | // THE SOFTWARE.
22 |
23 | #if TARGET_OS_IOS
24 | #import
25 |
26 | #ifndef _UIKIT_AFNETWORKING_
27 | #define _UIKIT_AFNETWORKING_
28 |
29 | #import "AFNetworkActivityIndicatorManager.h"
30 |
31 | #import "UIActivityIndicatorView+AFNetworking.h"
32 | #import "UIAlertView+AFNetworking.h"
33 | #import "UIButton+AFNetworking.h"
34 | #import "UIImageView+AFNetworking.h"
35 | #import "UIProgressView+AFNetworking.h"
36 | #import "UIRefreshControl+AFNetworking.h"
37 | #import "UIWebView+AFNetworking.h"
38 | #endif /* _UIKIT_AFNETWORKING_ */
39 | #endif
40 |
--------------------------------------------------------------------------------
/Pods/AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h:
--------------------------------------------------------------------------------
1 | // UIProgressView+AFNetworking.h
2 | // Copyright (c) 2011–2015 Alamofire Software Foundation (http://alamofire.org/)
3 | //
4 | // Permission is hereby granted, free of charge, to any person obtaining a copy
5 | // of this software and associated documentation files (the "Software"), to deal
6 | // in the Software without restriction, including without limitation the rights
7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | // copies of the Software, and to permit persons to whom the Software is
9 | // furnished to do so, subject to the following conditions:
10 | //
11 | // The above copyright notice and this permission notice shall be included in
12 | // all copies or substantial portions of the Software.
13 | //
14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 | // THE SOFTWARE.
21 |
22 | #import
23 |
24 | #import
25 |
26 | #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
27 |
28 | #import
29 |
30 | NS_ASSUME_NONNULL_BEGIN
31 |
32 | @class AFURLConnectionOperation;
33 |
34 | /**
35 | This category adds methods to the UIKit framework's `UIProgressView` class. The methods in this category provide support for binding the progress to the upload and download progress of a session task or request operation.
36 | */
37 | @interface UIProgressView (AFNetworking)
38 |
39 | ///------------------------------------
40 | /// @name Setting Session Task Progress
41 | ///------------------------------------
42 |
43 | /**
44 | Binds the progress to the upload progress of the specified session task.
45 |
46 | @param task The session task.
47 | @param animated `YES` if the change should be animated, `NO` if the change should happen immediately.
48 | */
49 | #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
50 | - (void)setProgressWithUploadProgressOfTask:(NSURLSessionUploadTask *)task
51 | animated:(BOOL)animated;
52 | #endif
53 |
54 | /**
55 | Binds the progress to the download progress of the specified session task.
56 |
57 | @param task The session task.
58 | @param animated `YES` if the change should be animated, `NO` if the change should happen immediately.
59 | */
60 | #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
61 | - (void)setProgressWithDownloadProgressOfTask:(NSURLSessionDownloadTask *)task
62 | animated:(BOOL)animated;
63 | #endif
64 |
65 | ///------------------------------------
66 | /// @name Setting Session Task Progress
67 | ///------------------------------------
68 |
69 | /**
70 | Binds the progress to the upload progress of the specified request operation.
71 |
72 | @param operation The request operation.
73 | @param animated `YES` if the change should be animated, `NO` if the change should happen immediately.
74 | */
75 | - (void)setProgressWithUploadProgressOfOperation:(AFURLConnectionOperation *)operation
76 | animated:(BOOL)animated;
77 |
78 | /**
79 | Binds the progress to the download progress of the specified request operation.
80 |
81 | @param operation The request operation.
82 | @param animated `YES` if the change should be animated, `NO` if the change should happen immediately.
83 | */
84 | - (void)setProgressWithDownloadProgressOfOperation:(AFURLConnectionOperation *)operation
85 | animated:(BOOL)animated;
86 |
87 | @end
88 |
89 | NS_ASSUME_NONNULL_END
90 |
91 | #endif
92 |
--------------------------------------------------------------------------------
/Pods/AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h:
--------------------------------------------------------------------------------
1 | // UIRefreshControl+AFNetworking.m
2 | //
3 | // Copyright (c) 2014 AFNetworking (http://afnetworking.com)
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
13 | // all 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
21 | // THE SOFTWARE.
22 |
23 | #import
24 |
25 | #import
26 |
27 | #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
28 |
29 | #import
30 |
31 | NS_ASSUME_NONNULL_BEGIN
32 |
33 | @class AFURLConnectionOperation;
34 |
35 | /**
36 | This category adds methods to the UIKit framework's `UIRefreshControl` class. The methods in this category provide support for automatically beginning and ending refreshing depending on the loading state of a request operation or session task.
37 | */
38 | @interface UIRefreshControl (AFNetworking)
39 |
40 | ///-----------------------------------
41 | /// @name Refreshing for Session Tasks
42 | ///-----------------------------------
43 |
44 | /**
45 | Binds the refreshing state to the state of the specified task.
46 |
47 | @param task The task. If `nil`, automatic updating from any previously specified operation will be disabled.
48 | */
49 | #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
50 | - (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task;
51 | #endif
52 |
53 | ///----------------------------------------
54 | /// @name Refreshing for Request Operations
55 | ///----------------------------------------
56 |
57 | /**
58 | Binds the refreshing state to the execution state of the specified operation.
59 |
60 | @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled.
61 | */
62 | - (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation;
63 |
64 | @end
65 |
66 | NS_ASSUME_NONNULL_END
67 |
68 | #endif
69 |
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperation.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFHTTPRequestOperation.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/AFHTTPRequestOperationManager.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/AFHTTPSessionManager.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFHTTPSessionManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/AFNetworkActivityIndicatorManager.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/AFNetworkReachabilityManager.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFNetworkReachabilityManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/AFSecurityPolicy.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFSecurityPolicy.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/AFURLConnectionOperation.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFURLConnectionOperation.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/AFURLRequestSerialization.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFURLRequestSerialization.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/AFURLResponseSerialization.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFURLResponseSerialization.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/AFURLSessionManager.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFURLSessionManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/UIActivityIndicatorView+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/UIAlertView+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/UIButton+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/UIImage+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/UIImageView+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/UIKit+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/UIProgressView+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/UIRefreshControl+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/AFNetworking/UIWebView+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MBProgressHUD/MBProgressHUD.h:
--------------------------------------------------------------------------------
1 | ../../../MBProgressHUD/MBProgressHUD.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefresh.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/MJRefresh.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshAutoFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshAutoGifFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshAutoNormalFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshAutoStateFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshBackFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshBackGifFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshBackNormalFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshBackStateFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshComponent.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshComponent.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshConst.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/MJRefreshConst.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshGifHeader.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshHeader.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshHeader.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshNormalHeader.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/MJRefreshStateHeader.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/UIScrollView+MJExtension.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/UIScrollView+MJExtension.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/UIScrollView+MJRefresh.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/UIScrollView+MJRefresh.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/MJRefresh/UIView+MJExtension.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/UIView+MJExtension.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASCompositeConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASCompositeConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASConstraint+Private.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASConstraint+Private.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASConstraintMaker.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASConstraintMaker.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASLayoutConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASLayoutConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASUtilities.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASUtilities.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASViewAttribute.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASViewAttribute.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/MASViewConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASViewConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/Masonry.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/Masonry.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/NSArray+MASAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/NSArray+MASAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/NSArray+MASShorthandAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/NSArray+MASShorthandAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/NSLayoutConstraint+MASDebugAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/View+MASAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/View+MASAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/View+MASShorthandAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/View+MASShorthandAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Private/Masonry/ViewController+MASAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/ViewController+MASAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperation.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFHTTPRequestOperation.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/AFHTTPRequestOperationManager.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/AFHTTPSessionManager.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFHTTPSessionManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/AFNetworkActivityIndicatorManager.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/AFNetworkReachabilityManager.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFNetworkReachabilityManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/AFSecurityPolicy.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFSecurityPolicy.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/AFURLConnectionOperation.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFURLConnectionOperation.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/AFURLRequestSerialization.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFURLRequestSerialization.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/AFURLResponseSerialization.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFURLResponseSerialization.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/AFURLSessionManager.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/AFNetworking/AFURLSessionManager.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/UIActivityIndicatorView+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/UIAlertView+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/UIButton+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIButton+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/UIImage+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIImage+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/UIImageView+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/UIKit+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIKit+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/UIProgressView+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIProgressView+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/UIRefreshControl+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/AFNetworking/UIWebView+AFNetworking.h:
--------------------------------------------------------------------------------
1 | ../../../AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MBProgressHUD/MBProgressHUD.h:
--------------------------------------------------------------------------------
1 | ../../../MBProgressHUD/MBProgressHUD.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefresh.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/MJRefresh.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshAutoFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshAutoGifFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshAutoNormalFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshAutoStateFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshBackFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshBackGifFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshBackNormalFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshBackStateFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshComponent.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshComponent.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshConst.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/MJRefreshConst.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshFooter.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshFooter.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshGifHeader.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshHeader.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshHeader.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshNormalHeader.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/MJRefreshStateHeader.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/UIScrollView+MJExtension.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/UIScrollView+MJExtension.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/UIScrollView+MJRefresh.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/UIScrollView+MJRefresh.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/MJRefresh/UIView+MJExtension.h:
--------------------------------------------------------------------------------
1 | ../../../MJRefresh/MJRefresh/UIView+MJExtension.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASCompositeConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASCompositeConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASConstraint+Private.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASConstraint+Private.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASConstraintMaker.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASConstraintMaker.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASLayoutConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASLayoutConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASUtilities.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASUtilities.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASViewAttribute.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASViewAttribute.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/MASViewConstraint.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/MASViewConstraint.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/Masonry.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/Masonry.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/NSArray+MASAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/NSArray+MASAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/NSArray+MASShorthandAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/NSArray+MASShorthandAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/NSLayoutConstraint+MASDebugAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/View+MASAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/View+MASAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/View+MASShorthandAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/View+MASShorthandAdditions.h
--------------------------------------------------------------------------------
/Pods/Headers/Public/Masonry/ViewController+MASAdditions.h:
--------------------------------------------------------------------------------
1 | ../../../Masonry/Masonry/ViewController+MASAdditions.h
--------------------------------------------------------------------------------
/Pods/MBProgressHUD/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2009-2015 Matej Bukovinski
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
--------------------------------------------------------------------------------
/Pods/MJRefresh/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh)
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshAutoFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshFooter.h"
10 |
11 | @interface MJRefreshAutoFooter : MJRefreshFooter
12 | /** 是否自动刷新(默认为YES) */
13 | @property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
14 |
15 | /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
16 | @property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用automaticallyChangeAlpha属性");
17 |
18 | /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
19 | @property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
20 | @end
21 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshBackFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshFooter.h"
10 |
11 | @interface MJRefreshBackFooter : MJRefreshFooter
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Base/MJRefreshComponent.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // MJRefreshComponent.h
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 15/3/4.
7 | // Copyright (c) 2015年 小码哥. All rights reserved.
8 | // 刷新控件的基类
9 |
10 | #import
11 | #import "MJRefreshConst.h"
12 | #import "UIView+MJExtension.h"
13 | #import "UIScrollView+MJExtension.h"
14 | #import "UIScrollView+MJRefresh.h"
15 |
16 | /** 刷新控件的状态 */
17 | typedef enum {
18 | /** 普通闲置状态 */
19 | MJRefreshStateIdle = 1,
20 | /** 松开就可以进行刷新的状态 */
21 | MJRefreshStatePulling,
22 | /** 正在刷新中的状态 */
23 | MJRefreshStateRefreshing,
24 | /** 即将刷新的状态 */
25 | MJRefreshStateWillRefresh,
26 | /** 所有数据加载完毕,没有更多的数据了 */
27 | MJRefreshStateNoMoreData
28 | } MJRefreshState;
29 |
30 | /** 进入刷新状态的回调 */
31 | typedef void (^MJRefreshComponentRefreshingBlock)();
32 |
33 | /** 刷新控件的基类 */
34 | @interface MJRefreshComponent : UIView
35 | {
36 | /** 记录scrollView刚开始的inset */
37 | UIEdgeInsets _scrollViewOriginalInset;
38 | /** 父控件 */
39 | __weak UIScrollView *_scrollView;
40 | }
41 | #pragma mark - 刷新回调
42 | /** 正在刷新的回调 */
43 | @property (copy, nonatomic) MJRefreshComponentRefreshingBlock refreshingBlock;
44 | /** 设置回调对象和回调方法 */
45 | - (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action;
46 | /** 回调对象 */
47 | @property (weak, nonatomic) id refreshingTarget;
48 | /** 回调方法 */
49 | @property (assign, nonatomic) SEL refreshingAction;
50 | /** 触发回调(交给子类去调用) */
51 | - (void)executeRefreshingCallback;
52 |
53 | #pragma mark - 刷新状态控制
54 | /** 进入刷新状态 */
55 | - (void)beginRefreshing;
56 | /** 结束刷新状态 */
57 | - (void)endRefreshing;
58 | /** 是否正在刷新 */
59 | - (BOOL)isRefreshing;
60 | /** 刷新状态 一般交给子类内部实现 */
61 | @property (assign, nonatomic) MJRefreshState state;
62 |
63 | #pragma mark - 交给子类去访问
64 | /** 记录scrollView刚开始的inset */
65 | @property (assign, nonatomic, readonly) UIEdgeInsets scrollViewOriginalInset;
66 | /** 父控件 */
67 | @property (weak, nonatomic, readonly) UIScrollView *scrollView;
68 |
69 | #pragma mark - 交给子类们去实现
70 | /** 初始化 */
71 | - (void)prepare;
72 | /** 摆放子控件frame */
73 | - (void)placeSubviews;
74 | /** 当scrollView的contentOffset发生改变的时候调用 */
75 | - (void)scrollViewContentOffsetDidChange:(NSDictionary *)change;
76 | /** 当scrollView的contentSize发生改变的时候调用 */
77 | - (void)scrollViewContentSizeDidChange:(NSDictionary *)change;
78 | /** 当scrollView的拖拽状态发生改变的时候调用 */
79 | - (void)scrollViewPanStateDidChange:(NSDictionary *)change;
80 |
81 |
82 | #pragma mark - 其他
83 | /** 拉拽的百分比(交给子类重写) */
84 | @property (assign, nonatomic) CGFloat pullingPercent;
85 | /** 根据拖拽比例自动切换透明度 */
86 | @property (assign, nonatomic, getter=isAutoChangeAlpha) BOOL autoChangeAlpha MJRefreshDeprecated("请使用automaticallyChangeAlpha属性");
87 | /** 根据拖拽比例自动切换透明度 */
88 | @property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha;
89 | @end
90 |
91 | @interface UILabel(MJRefresh)
92 | + (instancetype)label;
93 | @end
94 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // MJRefreshFooter.h
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 15/3/5.
7 | // Copyright (c) 2015年 小码哥. All rights reserved.
8 | // 上拉刷新控件
9 |
10 | #import "MJRefreshComponent.h"
11 |
12 | @interface MJRefreshFooter : MJRefreshComponent
13 | /** 创建footer */
14 | + (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
15 | /** 创建footer */
16 | + (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
17 |
18 | /** 提示没有更多的数据 */
19 | - (void)endRefreshingWithNoMoreData;
20 | - (void)noticeNoMoreData MJRefreshDeprecated("使用endRefreshingWithNoMoreData");
21 |
22 | /** 重置没有更多的数据(消除没有更多数据的状态) */
23 | - (void)resetNoMoreData;
24 |
25 | /** 忽略多少scrollView的contentInset的bottom */
26 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
27 |
28 | /** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏) */
29 | @property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden;
30 | @end
31 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.m:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // MJRefreshFooter.m
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 15/3/5.
7 | // Copyright (c) 2015年 小码哥. All rights reserved.
8 | //
9 |
10 | #import "MJRefreshFooter.h"
11 |
12 | @interface MJRefreshFooter()
13 |
14 | @end
15 |
16 | @implementation MJRefreshFooter
17 | #pragma mark - 构造方法
18 | + (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock
19 | {
20 | MJRefreshFooter *cmp = [[self alloc] init];
21 | cmp.refreshingBlock = refreshingBlock;
22 | return cmp;
23 | }
24 | + (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action
25 | {
26 | MJRefreshFooter *cmp = [[self alloc] init];
27 | [cmp setRefreshingTarget:target refreshingAction:action];
28 | return cmp;
29 | }
30 |
31 | #pragma mark - 重写父类的方法
32 | - (void)prepare
33 | {
34 | [super prepare];
35 |
36 | // 设置自己的高度
37 | self.mj_h = MJRefreshFooterHeight;
38 |
39 | // 默认是自动隐藏
40 | self.automaticallyHidden = YES;
41 | }
42 |
43 | - (void)willMoveToSuperview:(UIView *)newSuperview
44 | {
45 | [super willMoveToSuperview:newSuperview];
46 |
47 | if (newSuperview) {
48 | // 监听scrollView数据的变化
49 | [self.scrollView setReloadDataBlock:^(NSInteger totalDataCount) {
50 | if (self.isAutomaticallyHidden) {
51 | self.hidden = (totalDataCount == 0);
52 | }
53 | }];
54 | }
55 | }
56 |
57 | #pragma mark - 公共方法
58 | - (void)endRefreshingWithNoMoreData
59 | {
60 | self.state = MJRefreshStateNoMoreData;
61 | }
62 |
63 | - (void)noticeNoMoreData
64 | {
65 | [self endRefreshingWithNoMoreData];
66 | }
67 |
68 | - (void)resetNoMoreData
69 | {
70 | self.state = MJRefreshStateIdle;
71 | }
72 | @end
73 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // MJRefreshHeader.h
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 15/3/4.
7 | // Copyright (c) 2015年 小码哥. All rights reserved.
8 | // 下拉刷新控件:负责监控用户下拉的状态
9 |
10 | #import "MJRefreshComponent.h"
11 |
12 | @interface MJRefreshHeader : MJRefreshComponent
13 | /** 创建header */
14 | + (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
15 | /** 创建header */
16 | + (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
17 |
18 | /** 这个key用来存储上一次下拉刷新成功的时间 */
19 | @property (copy, nonatomic) NSString *lastUpdatedTimeKey;
20 | /** 上一次下拉刷新成功的时间 */
21 | @property (strong, nonatomic, readonly) NSDate *lastUpdatedTime;
22 |
23 | /** 忽略多少scrollView的contentInset的top */
24 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop;
25 | @end
26 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshAutoGifFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshAutoStateFooter.h"
10 |
11 | @interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter
12 | /** 设置state状态下的动画图片images 动画持续时间duration*/
13 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
14 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
15 | @end
16 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshAutoGifFooter.m
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshAutoGifFooter.h"
10 |
11 | @interface MJRefreshAutoGifFooter()
12 | @property (weak, nonatomic) UIImageView *gifView;
13 | /** 所有状态对应的动画图片 */
14 | @property (strong, nonatomic) NSMutableDictionary *stateImages;
15 | /** 所有状态对应的动画时间 */
16 | @property (strong, nonatomic) NSMutableDictionary *stateDurations;
17 | @end
18 |
19 | @implementation MJRefreshAutoGifFooter
20 | #pragma mark - 懒加载
21 | - (UIImageView *)gifView
22 | {
23 | if (!_gifView) {
24 | UIImageView *gifView = [[UIImageView alloc] init];
25 | [self addSubview:_gifView = gifView];
26 | }
27 | return _gifView;
28 | }
29 |
30 | - (NSMutableDictionary *)stateImages
31 | {
32 | if (!_stateImages) {
33 | self.stateImages = [NSMutableDictionary dictionary];
34 | }
35 | return _stateImages;
36 | }
37 |
38 | - (NSMutableDictionary *)stateDurations
39 | {
40 | if (!_stateDurations) {
41 | self.stateDurations = [NSMutableDictionary dictionary];
42 | }
43 | return _stateDurations;
44 | }
45 |
46 | #pragma mark - 公共方法
47 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state
48 | {
49 | if (images == nil) return;
50 |
51 | self.stateImages[@(state)] = images;
52 | self.stateDurations[@(state)] = @(duration);
53 |
54 | /* 根据图片设置控件的高度 */
55 | UIImage *image = [images firstObject];
56 | if (image.size.height > self.mj_h) {
57 | self.mj_h = image.size.height;
58 | }
59 | }
60 |
61 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state
62 | {
63 | [self setImages:images duration:images.count * 0.1 forState:state];
64 | }
65 |
66 | #pragma mark - 实现父类的方法
67 | - (void)placeSubviews
68 | {
69 | [super placeSubviews];
70 |
71 | self.gifView.frame = self.bounds;
72 | if (self.isRefreshingTitleHidden) {
73 | self.gifView.contentMode = UIViewContentModeCenter;
74 | } else {
75 | self.gifView.contentMode = UIViewContentModeRight;
76 | self.gifView.mj_w = self.mj_w * 0.5 - 90;
77 | }
78 | }
79 |
80 | - (void)setState:(MJRefreshState)state
81 | {
82 | MJRefreshCheckState
83 |
84 | // 根据状态做事情
85 | if (state == MJRefreshStateRefreshing) {
86 | NSArray *images = self.stateImages[@(state)];
87 | if (images.count == 0) return;
88 | [self.gifView stopAnimating];
89 |
90 | self.gifView.hidden = NO;
91 | if (images.count == 1) { // 单张图片
92 | self.gifView.image = [images lastObject];
93 | } else { // 多张图片
94 | self.gifView.animationImages = images;
95 | self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue];
96 | [self.gifView startAnimating];
97 | }
98 | } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
99 | [self.gifView stopAnimating];
100 | self.gifView.hidden = YES;
101 | }
102 | }
103 | @end
104 |
105 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshAutoNormalFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshAutoStateFooter.h"
10 |
11 | @interface MJRefreshAutoNormalFooter : MJRefreshAutoStateFooter
12 | /** 菊花的样式 */
13 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle;
14 | @end
15 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshAutoNormalFooter.m
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshAutoNormalFooter.h"
10 |
11 | @interface MJRefreshAutoNormalFooter()
12 | @property (weak, nonatomic) UIActivityIndicatorView *loadingView;
13 | @end
14 |
15 | @implementation MJRefreshAutoNormalFooter
16 | #pragma mark - 懒加载子控件
17 | - (UIActivityIndicatorView *)loadingView
18 | {
19 | if (!_loadingView) {
20 | UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle];
21 | loadingView.hidesWhenStopped = YES;
22 | [self addSubview:_loadingView = loadingView];
23 | }
24 | return _loadingView;
25 | }
26 |
27 | - (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle
28 | {
29 | _activityIndicatorViewStyle = activityIndicatorViewStyle;
30 |
31 | self.loadingView = nil;
32 | [self setNeedsLayout];
33 | }
34 | #pragma makr - 重写父类的方法
35 | - (void)prepare
36 | {
37 | [super prepare];
38 |
39 | self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
40 | }
41 |
42 | - (void)placeSubviews
43 | {
44 | [super placeSubviews];
45 |
46 | // 圈圈
47 | CGFloat arrowCenterX = self.mj_w * 0.5;
48 | if (!self.isRefreshingTitleHidden) {
49 | arrowCenterX -= 100;
50 | }
51 | CGFloat arrowCenterY = self.mj_h * 0.5;
52 | self.loadingView.center = CGPointMake(arrowCenterX, arrowCenterY);
53 | }
54 |
55 | - (void)setState:(MJRefreshState)state
56 | {
57 | MJRefreshCheckState
58 |
59 | // 根据状态做事情
60 | if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
61 | [self.loadingView stopAnimating];
62 | } else if (state == MJRefreshStateRefreshing) {
63 | [self.loadingView startAnimating];
64 | }
65 | }
66 |
67 | @end
68 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshAutoStateFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/6/13.
6 | // Copyright © 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshAutoFooter.h"
10 |
11 | @interface MJRefreshAutoStateFooter : MJRefreshAutoFooter
12 | /** 显示刷新状态的label */
13 | @property (weak, nonatomic, readonly) UILabel *stateLabel;
14 |
15 | /** 设置state状态下的文字 */
16 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
17 |
18 | /** 隐藏刷新状态的文字 */
19 | @property (assign, nonatomic, getter=isRefreshingTitleHidden) BOOL refreshingTitleHidden;
20 | @end
21 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshAutoStateFooter.m
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/6/13.
6 | // Copyright © 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshAutoStateFooter.h"
10 |
11 | @interface MJRefreshAutoStateFooter()
12 | {
13 | /** 显示刷新状态的label */
14 | __weak UILabel *_stateLabel;
15 | }
16 | /** 所有状态对应的文字 */
17 | @property (strong, nonatomic) NSMutableDictionary *stateTitles;
18 | @end
19 |
20 | @implementation MJRefreshAutoStateFooter
21 | #pragma mark - 懒加载
22 | - (NSMutableDictionary *)stateTitles
23 | {
24 | if (!_stateTitles) {
25 | self.stateTitles = [NSMutableDictionary dictionary];
26 | }
27 | return _stateTitles;
28 | }
29 |
30 | - (UILabel *)stateLabel
31 | {
32 | if (!_stateLabel) {
33 | [self addSubview:_stateLabel = [UILabel label]];
34 | }
35 | return _stateLabel;
36 | }
37 |
38 | #pragma mark - 公共方法
39 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state
40 | {
41 | if (title == nil) return;
42 | self.stateTitles[@(state)] = title;
43 | self.stateLabel.text = self.stateTitles[@(self.state)];
44 | }
45 |
46 | #pragma mark - 私有方法
47 | - (void)stateLabelClick
48 | {
49 | if (self.state == MJRefreshStateIdle) {
50 | [self beginRefreshing];
51 | }
52 | }
53 |
54 | #pragma mark - 重写父类的方法
55 | - (void)prepare
56 | {
57 | [super prepare];
58 |
59 | // 初始化文字
60 | [self setTitle:MJRefreshAutoFooterIdleText forState:MJRefreshStateIdle];
61 | [self setTitle:MJRefreshAutoFooterRefreshingText forState:MJRefreshStateRefreshing];
62 | [self setTitle:MJRefreshAutoFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
63 |
64 | // 监听label
65 | self.stateLabel.userInteractionEnabled = YES;
66 | [self.stateLabel addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(stateLabelClick)]];
67 | }
68 |
69 | - (void)placeSubviews
70 | {
71 | [super placeSubviews];
72 |
73 | // 状态标签
74 | self.stateLabel.frame = self.bounds;
75 | }
76 |
77 | - (void)setState:(MJRefreshState)state
78 | {
79 | MJRefreshCheckState
80 |
81 | if (self.isRefreshingTitleHidden && state == MJRefreshStateRefreshing) {
82 | self.stateLabel.text = nil;
83 | } else {
84 | self.stateLabel.text = self.stateTitles[@(state)];
85 | }
86 | }
87 | @end
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshBackGifFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshBackStateFooter.h"
10 |
11 | @interface MJRefreshBackGifFooter : MJRefreshBackStateFooter
12 | /** 设置state状态下的动画图片images 动画持续时间duration*/
13 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
14 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
15 | @end
16 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshBackGifFooter.m
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshBackGifFooter.h"
10 |
11 | @interface MJRefreshBackGifFooter()
12 | @property (weak, nonatomic) UIImageView *gifView;
13 | /** 所有状态对应的动画图片 */
14 | @property (strong, nonatomic) NSMutableDictionary *stateImages;
15 | /** 所有状态对应的动画时间 */
16 | @property (strong, nonatomic) NSMutableDictionary *stateDurations;
17 | @end
18 |
19 | @implementation MJRefreshBackGifFooter
20 | #pragma mark - 懒加载
21 | - (UIImageView *)gifView
22 | {
23 | if (!_gifView) {
24 | UIImageView *gifView = [[UIImageView alloc] init];
25 | [self addSubview:_gifView = gifView];
26 | }
27 | return _gifView;
28 | }
29 |
30 | - (NSMutableDictionary *)stateImages
31 | {
32 | if (!_stateImages) {
33 | self.stateImages = [NSMutableDictionary dictionary];
34 | }
35 | return _stateImages;
36 | }
37 |
38 | - (NSMutableDictionary *)stateDurations
39 | {
40 | if (!_stateDurations) {
41 | self.stateDurations = [NSMutableDictionary dictionary];
42 | }
43 | return _stateDurations;
44 | }
45 |
46 | #pragma mark - 公共方法
47 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state
48 | {
49 | if (images == nil) return;
50 |
51 | self.stateImages[@(state)] = images;
52 | self.stateDurations[@(state)] = @(duration);
53 |
54 | /* 根据图片设置控件的高度 */
55 | UIImage *image = [images firstObject];
56 | if (image.size.height > self.mj_h) {
57 | self.mj_h = image.size.height;
58 | }
59 | }
60 |
61 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state
62 | {
63 | [self setImages:images duration:images.count * 0.1 forState:state];
64 | }
65 |
66 | #pragma mark - 实现父类的方法
67 | - (void)setPullingPercent:(CGFloat)pullingPercent
68 | {
69 | [super setPullingPercent:pullingPercent];
70 | NSArray *images = self.stateImages[@(MJRefreshStateIdle)];
71 | if (self.state != MJRefreshStateIdle || images.count == 0) return;
72 | [self.gifView stopAnimating];
73 | NSUInteger index = images.count * pullingPercent;
74 | if (index >= images.count) index = images.count - 1;
75 | self.gifView.image = images[index];
76 | }
77 |
78 | - (void)placeSubviews
79 | {
80 | [super placeSubviews];
81 |
82 | self.gifView.frame = self.bounds;
83 | if (self.stateLabel.hidden) {
84 | self.gifView.contentMode = UIViewContentModeCenter;
85 | } else {
86 | self.gifView.contentMode = UIViewContentModeRight;
87 | self.gifView.mj_w = self.mj_w * 0.5 - 90;
88 | }
89 | }
90 |
91 | - (void)setState:(MJRefreshState)state
92 | {
93 | MJRefreshCheckState
94 |
95 | // 根据状态做事情
96 | if (state == MJRefreshStatePulling || state == MJRefreshStateRefreshing) {
97 | NSArray *images = self.stateImages[@(state)];
98 | if (images.count == 0) return;
99 |
100 | self.gifView.hidden = NO;
101 | [self.gifView stopAnimating];
102 | if (images.count == 1) { // 单张图片
103 | self.gifView.image = [images lastObject];
104 | } else { // 多张图片
105 | self.gifView.animationImages = images;
106 | self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue];
107 | [self.gifView startAnimating];
108 | }
109 | } else if (state == MJRefreshStateIdle) {
110 | self.gifView.hidden = NO;
111 | } else if (state == MJRefreshStateNoMoreData) {
112 | self.gifView.hidden = YES;
113 | }
114 | }
115 | @end
116 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshBackNormalFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshBackStateFooter.h"
10 |
11 | @interface MJRefreshBackNormalFooter : MJRefreshBackStateFooter
12 | @property (weak, nonatomic, readonly) UIImageView *arrowView;
13 | /** 菊花的样式 */
14 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle;
15 | @end
16 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshBackNormalFooter.m
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshBackNormalFooter.h"
10 |
11 | @interface MJRefreshBackNormalFooter()
12 | {
13 | __weak UIImageView *_arrowView;
14 | }
15 | @property (weak, nonatomic) UIActivityIndicatorView *loadingView;
16 | @end
17 |
18 | @implementation MJRefreshBackNormalFooter
19 | #pragma mark - 懒加载子控件
20 | - (UIImageView *)arrowView
21 | {
22 | if (!_arrowView) {
23 | UIImageView *arrowView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:MJRefreshSrcName(@"arrow.png")]];
24 | [self addSubview:_arrowView = arrowView];
25 | }
26 | return _arrowView;
27 | }
28 |
29 | - (UIActivityIndicatorView *)loadingView
30 | {
31 | if (!_loadingView) {
32 | UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle];
33 | loadingView.hidesWhenStopped = YES;
34 | [self addSubview:_loadingView = loadingView];
35 | }
36 | return _loadingView;
37 | }
38 |
39 | - (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle
40 | {
41 | _activityIndicatorViewStyle = activityIndicatorViewStyle;
42 |
43 | self.loadingView = nil;
44 | [self setNeedsLayout];
45 | }
46 | #pragma makr - 重写父类的方法
47 | - (void)prepare
48 | {
49 | [super prepare];
50 |
51 | self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
52 | }
53 |
54 | - (void)placeSubviews
55 | {
56 | [super placeSubviews];
57 |
58 | // 箭头
59 | self.arrowView.mj_size = self.arrowView.image.size;
60 | CGFloat arrowCenterX = self.mj_w * 0.5;
61 | if (!self.stateLabel.hidden) {
62 | arrowCenterX -= 100;
63 | }
64 | CGFloat arrowCenterY = self.mj_h * 0.5;
65 | self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
66 |
67 | // 圈圈
68 | self.loadingView.frame = self.arrowView.frame;
69 | }
70 |
71 | - (void)setState:(MJRefreshState)state
72 | {
73 | MJRefreshCheckState
74 |
75 | // 根据状态做事情
76 | if (state == MJRefreshStateIdle) {
77 | if (oldState == MJRefreshStateRefreshing) {
78 | self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI);
79 | [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
80 | self.loadingView.alpha = 0.0;
81 | } completion:^(BOOL finished) {
82 | self.loadingView.alpha = 1.0;
83 | [self.loadingView stopAnimating];
84 |
85 | self.arrowView.hidden = NO;
86 | }];
87 | } else {
88 | self.arrowView.hidden = NO;
89 | [self.loadingView stopAnimating];
90 | [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
91 | self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI);
92 | }];
93 | }
94 | } else if (state == MJRefreshStatePulling) {
95 | self.arrowView.hidden = NO;
96 | [self.loadingView stopAnimating];
97 | [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
98 | self.arrowView.transform = CGAffineTransformIdentity;
99 | }];
100 | } else if (state == MJRefreshStateRefreshing) {
101 | self.arrowView.hidden = YES;
102 | [self.loadingView startAnimating];
103 | } else if (state == MJRefreshStateNoMoreData) {
104 | self.arrowView.hidden = YES;
105 | [self.loadingView stopAnimating];
106 | }
107 | }
108 |
109 | @end
110 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshBackStateFooter.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/6/13.
6 | // Copyright © 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshBackFooter.h"
10 |
11 | @interface MJRefreshBackStateFooter : MJRefreshBackFooter
12 | /** 显示刷新状态的label */
13 | @property (weak, nonatomic, readonly) UILabel *stateLabel;
14 | /** 设置state状态下的文字 */
15 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
16 |
17 | /** 获取state状态下的title */
18 | - (NSString *)titleForState:(MJRefreshState)state;
19 | @end
20 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshBackStateFooter.m
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/6/13.
6 | // Copyright © 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshBackStateFooter.h"
10 |
11 | @interface MJRefreshBackStateFooter()
12 | {
13 | /** 显示刷新状态的label */
14 | __weak UILabel *_stateLabel;
15 | }
16 | /** 所有状态对应的文字 */
17 | @property (strong, nonatomic) NSMutableDictionary *stateTitles;
18 | @end
19 |
20 | @implementation MJRefreshBackStateFooter
21 | #pragma mark - 懒加载
22 | - (NSMutableDictionary *)stateTitles
23 | {
24 | if (!_stateTitles) {
25 | self.stateTitles = [NSMutableDictionary dictionary];
26 | }
27 | return _stateTitles;
28 | }
29 |
30 | - (UILabel *)stateLabel
31 | {
32 | if (!_stateLabel) {
33 | [self addSubview:_stateLabel = [UILabel label]];
34 | }
35 | return _stateLabel;
36 | }
37 |
38 | #pragma mark - 公共方法
39 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state
40 | {
41 | if (title == nil) return;
42 | self.stateTitles[@(state)] = title;
43 | self.stateLabel.text = self.stateTitles[@(self.state)];
44 | }
45 |
46 | - (NSString *)titleForState:(MJRefreshState)state {
47 | return self.stateTitles[@(state)];
48 | }
49 |
50 | #pragma mark - 重写父类的方法
51 | - (void)prepare
52 | {
53 | [super prepare];
54 |
55 | // 初始化文字
56 | [self setTitle:MJRefreshBackFooterIdleText forState:MJRefreshStateIdle];
57 | [self setTitle:MJRefreshBackFooterPullingText forState:MJRefreshStatePulling];
58 | [self setTitle:MJRefreshBackFooterRefreshingText forState:MJRefreshStateRefreshing];
59 | [self setTitle:MJRefreshBackFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
60 | }
61 |
62 | - (void)placeSubviews
63 | {
64 | [super placeSubviews];
65 |
66 | // 状态标签
67 | self.stateLabel.frame = self.bounds;
68 | }
69 |
70 | - (void)setState:(MJRefreshState)state
71 | {
72 | MJRefreshCheckState
73 |
74 | // 设置状态文字
75 | self.stateLabel.text = self.stateTitles[@(state)];
76 | }
77 | @end
78 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshGifHeader.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshStateHeader.h"
10 |
11 | @interface MJRefreshGifHeader : MJRefreshStateHeader
12 | /** 设置state状态下的动画图片images 动画持续时间duration*/
13 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
14 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
15 | @end
16 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshGifHeader.m
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshGifHeader.h"
10 |
11 | @interface MJRefreshGifHeader()
12 | @property (weak, nonatomic) UIImageView *gifView;
13 | /** 所有状态对应的动画图片 */
14 | @property (strong, nonatomic) NSMutableDictionary *stateImages;
15 | /** 所有状态对应的动画时间 */
16 | @property (strong, nonatomic) NSMutableDictionary *stateDurations;
17 | @end
18 |
19 | @implementation MJRefreshGifHeader
20 | #pragma mark - 懒加载
21 | - (UIImageView *)gifView
22 | {
23 | if (!_gifView) {
24 | UIImageView *gifView = [[UIImageView alloc] init];
25 | [self addSubview:_gifView = gifView];
26 | }
27 | return _gifView;
28 | }
29 |
30 | - (NSMutableDictionary *)stateImages
31 | {
32 | if (!_stateImages) {
33 | self.stateImages = [NSMutableDictionary dictionary];
34 | }
35 | return _stateImages;
36 | }
37 |
38 | - (NSMutableDictionary *)stateDurations
39 | {
40 | if (!_stateDurations) {
41 | self.stateDurations = [NSMutableDictionary dictionary];
42 | }
43 | return _stateDurations;
44 | }
45 |
46 | #pragma mark - 公共方法
47 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state
48 | {
49 | if (images == nil) return;
50 |
51 | self.stateImages[@(state)] = images;
52 | self.stateDurations[@(state)] = @(duration);
53 |
54 | /* 根据图片设置控件的高度 */
55 | UIImage *image = [images firstObject];
56 | if (image.size.height > self.mj_h) {
57 | self.mj_h = image.size.height;
58 | }
59 | }
60 |
61 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state
62 | {
63 | [self setImages:images duration:images.count * 0.1 forState:state];
64 | }
65 |
66 | #pragma mark - 实现父类的方法
67 | - (void)setPullingPercent:(CGFloat)pullingPercent
68 | {
69 | [super setPullingPercent:pullingPercent];
70 | NSArray *images = self.stateImages[@(MJRefreshStateIdle)];
71 | if (self.state != MJRefreshStateIdle || images.count == 0) return;
72 | // 停止动画
73 | [self.gifView stopAnimating];
74 | // 设置当前需要显示的图片
75 | NSUInteger index = images.count * pullingPercent;
76 | if (index >= images.count) index = images.count - 1;
77 | self.gifView.image = images[index];
78 | }
79 |
80 | - (void)placeSubviews
81 | {
82 | [super placeSubviews];
83 |
84 | self.gifView.frame = self.bounds;
85 | if (self.stateLabel.hidden && self.lastUpdatedTimeLabel.hidden) {
86 | self.gifView.contentMode = UIViewContentModeCenter;
87 | } else {
88 | self.gifView.contentMode = UIViewContentModeRight;
89 | self.gifView.mj_w = self.mj_w * 0.5 - 90;
90 | }
91 | }
92 |
93 | - (void)setState:(MJRefreshState)state
94 | {
95 | MJRefreshCheckState
96 |
97 | // 根据状态做事情
98 | if (state == MJRefreshStatePulling || state == MJRefreshStateRefreshing) {
99 | NSArray *images = self.stateImages[@(state)];
100 | if (images.count == 0) return;
101 |
102 | [self.gifView stopAnimating];
103 | if (images.count == 1) { // 单张图片
104 | self.gifView.image = [images lastObject];
105 | } else { // 多张图片
106 | self.gifView.animationImages = images;
107 | self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue];
108 | [self.gifView startAnimating];
109 | }
110 | }
111 | }
112 | @end
113 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshNormalHeader.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshStateHeader.h"
10 |
11 | @interface MJRefreshNormalHeader : MJRefreshStateHeader
12 | @property (weak, nonatomic, readonly) UIImageView *arrowView;
13 | /** 菊花的样式 */
14 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle;
15 | @end
16 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshNormalHeader.m
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshNormalHeader.h"
10 |
11 | @interface MJRefreshNormalHeader()
12 | {
13 | __weak UIImageView *_arrowView;
14 | }
15 | @property (weak, nonatomic) UIActivityIndicatorView *loadingView;
16 | @end
17 |
18 | @implementation MJRefreshNormalHeader
19 | #pragma mark - 懒加载子控件
20 | - (UIImageView *)arrowView
21 | {
22 | if (!_arrowView) {
23 | UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")];
24 | if (!image) {
25 | image = [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
26 | }
27 | UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
28 | [self addSubview:_arrowView = arrowView];
29 | }
30 | return _arrowView;
31 | }
32 |
33 | - (UIActivityIndicatorView *)loadingView
34 | {
35 | if (!_loadingView) {
36 | UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle];
37 | loadingView.hidesWhenStopped = YES;
38 | [self addSubview:_loadingView = loadingView];
39 | }
40 | return _loadingView;
41 | }
42 |
43 | #pragma mark - 公共方法
44 | - (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle
45 | {
46 | _activityIndicatorViewStyle = activityIndicatorViewStyle;
47 |
48 | self.loadingView = nil;
49 | [self setNeedsLayout];
50 | }
51 |
52 | #pragma makr - 重写父类的方法
53 | - (void)prepare
54 | {
55 | [super prepare];
56 |
57 | self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
58 | }
59 |
60 | - (void)placeSubviews
61 | {
62 | [super placeSubviews];
63 |
64 | // 箭头
65 | self.arrowView.mj_size = self.arrowView.image.size;
66 | CGFloat arrowCenterX = self.mj_w * 0.5;
67 | if (!self.stateLabel.hidden) {
68 | arrowCenterX -= 100;
69 | }
70 | CGFloat arrowCenterY = self.mj_h * 0.5;
71 | self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
72 |
73 | // 圈圈
74 | self.loadingView.frame = self.arrowView.frame;
75 | }
76 |
77 | - (void)setState:(MJRefreshState)state
78 | {
79 | MJRefreshCheckState
80 |
81 | // 根据状态做事情
82 | if (state == MJRefreshStateIdle) {
83 | if (oldState == MJRefreshStateRefreshing) {
84 | self.arrowView.transform = CGAffineTransformIdentity;
85 |
86 | [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
87 | self.loadingView.alpha = 0.0;
88 | } completion:^(BOOL finished) {
89 | // 如果执行完动画发现不是idle状态,就直接返回,进入其他状态
90 | if (self.state != MJRefreshStateIdle) return;
91 |
92 | self.loadingView.alpha = 1.0;
93 | [self.loadingView stopAnimating];
94 | self.arrowView.hidden = NO;
95 | }];
96 | } else {
97 | [self.loadingView stopAnimating];
98 | self.arrowView.hidden = NO;
99 | [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
100 | self.arrowView.transform = CGAffineTransformIdentity;
101 | }];
102 | }
103 | } else if (state == MJRefreshStatePulling) {
104 | [self.loadingView stopAnimating];
105 | self.arrowView.hidden = NO;
106 | [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
107 | self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI);
108 | }];
109 | } else if (state == MJRefreshStateRefreshing) {
110 | self.loadingView.alpha = 1.0; // 防止refreshing -> idle的动画完毕动作没有被执行
111 | [self.loadingView startAnimating];
112 | self.arrowView.hidden = YES;
113 | }
114 | }
115 | @end
116 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJRefreshStateHeader.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 15/4/24.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJRefreshHeader.h"
10 |
11 | @interface MJRefreshStateHeader : MJRefreshHeader
12 | #pragma mark - 刷新时间相关
13 | /** 利用这个block来决定显示的更新时间文字 */
14 | @property (copy, nonatomic) NSString *(^lastUpdatedTimeText)(NSDate *lastUpdatedTime);
15 | /** 显示上一次刷新时间的label */
16 | @property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel;
17 |
18 | #pragma mark - 状态相关
19 | /** 显示刷新状态的label */
20 | @property (weak, nonatomic, readonly) UILabel *stateLabel;
21 | /** 设置state状态下的文字 */
22 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
23 | @end
24 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/MJRefresh.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 |
4 | #import "UIScrollView+MJRefresh.h"
5 | #import "UIScrollView+MJExtension.h"
6 | #import "UIView+MJExtension.h"
7 |
8 | #import "MJRefreshNormalHeader.h"
9 | #import "MJRefreshGifHeader.h"
10 |
11 | #import "MJRefreshBackNormalFooter.h"
12 | #import "MJRefreshBackGifFooter.h"
13 | #import "MJRefreshAutoNormalFooter.h"
14 | #import "MJRefreshAutoGifFooter.h"
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/MJRefreshConst.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | #import
4 | #import
5 |
6 | // 日志输出
7 | #ifdef DEBUG
8 | #define MJRefreshLog(...) NSLog(__VA_ARGS__)
9 | #else
10 | #define MJRefreshLog(...)
11 | #endif
12 |
13 | // 过期提醒
14 | #define MJRefreshDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead)
15 |
16 | // 运行时objc_msgSend
17 | #define MJRefreshMsgSend(...) ((void (*)(void *, SEL, UIView *))objc_msgSend)(__VA_ARGS__)
18 | #define MJRefreshMsgTarget(target) (__bridge void *)(target)
19 |
20 | // RGB颜色
21 | #define MJRefreshColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
22 |
23 | // 文字颜色
24 | #define MJRefreshLabelTextColor MJRefreshColor(90, 90, 90)
25 |
26 | // 字体大小
27 | #define MJRefreshLabelFont [UIFont boldSystemFontOfSize:14]
28 |
29 | // 图片路径
30 | #define MJRefreshSrcName(file) [@"MJRefresh.bundle" stringByAppendingPathComponent:file]
31 | #define MJRefreshFrameworkSrcName(file) [@"Frameworks/MJRefresh.framework/MJRefresh.bundle" stringByAppendingPathComponent:file]
32 |
33 | // 常量
34 | UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight;
35 | UIKIT_EXTERN const CGFloat MJRefreshFooterHeight;
36 | UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration;
37 | UIKIT_EXTERN const CGFloat MJRefreshSlowAnimationDuration;
38 |
39 | UIKIT_EXTERN NSString *const MJRefreshKeyPathContentOffset;
40 | UIKIT_EXTERN NSString *const MJRefreshKeyPathContentSize;
41 | UIKIT_EXTERN NSString *const MJRefreshKeyPathContentInset;
42 | UIKIT_EXTERN NSString *const MJRefreshKeyPathPanState;
43 |
44 | UIKIT_EXTERN NSString *const MJRefreshHeaderLastUpdatedTimeKey;
45 |
46 | UIKIT_EXTERN NSString *const MJRefreshHeaderIdleText;
47 | UIKIT_EXTERN NSString *const MJRefreshHeaderPullingText;
48 | UIKIT_EXTERN NSString *const MJRefreshHeaderRefreshingText;
49 |
50 | UIKIT_EXTERN NSString *const MJRefreshAutoFooterIdleText;
51 | UIKIT_EXTERN NSString *const MJRefreshAutoFooterRefreshingText;
52 | UIKIT_EXTERN NSString *const MJRefreshAutoFooterNoMoreDataText;
53 |
54 | UIKIT_EXTERN NSString *const MJRefreshBackFooterIdleText;
55 | UIKIT_EXTERN NSString *const MJRefreshBackFooterPullingText;
56 | UIKIT_EXTERN NSString *const MJRefreshBackFooterRefreshingText;
57 | UIKIT_EXTERN NSString *const MJRefreshBackFooterNoMoreDataText;
58 |
59 | // 状态检查
60 | #define MJRefreshCheckState \
61 | MJRefreshState oldState = self.state; \
62 | if (state == oldState) return; \
63 | [super setState:state];
64 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/MJRefreshConst.m:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | #import
4 |
5 | const CGFloat MJRefreshHeaderHeight = 54.0;
6 | const CGFloat MJRefreshFooterHeight = 44.0;
7 | const CGFloat MJRefreshFastAnimationDuration = 0.25;
8 | const CGFloat MJRefreshSlowAnimationDuration = 0.4;
9 |
10 | NSString *const MJRefreshKeyPathContentOffset = @"contentOffset";
11 | NSString *const MJRefreshKeyPathContentInset = @"contentInset";
12 | NSString *const MJRefreshKeyPathContentSize = @"contentSize";
13 | NSString *const MJRefreshKeyPathPanState = @"state";
14 |
15 | NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey";
16 |
17 | NSString *const MJRefreshHeaderIdleText = @"下拉可以刷新";
18 | NSString *const MJRefreshHeaderPullingText = @"松开立即刷新";
19 | NSString *const MJRefreshHeaderRefreshingText = @"正在刷新数据中...";
20 |
21 | NSString *const MJRefreshAutoFooterIdleText = @"点击或上拉加载更多";
22 | NSString *const MJRefreshAutoFooterRefreshingText = @"正在加载更多的数据...";
23 | NSString *const MJRefreshAutoFooterNoMoreDataText = @"已经全部加载完毕";
24 |
25 | NSString *const MJRefreshBackFooterIdleText = @"上拉可以加载更多";
26 | NSString *const MJRefreshBackFooterPullingText = @"松开立即加载更多";
27 | NSString *const MJRefreshBackFooterRefreshingText = @"正在加载更多的数据...";
28 | NSString *const MJRefreshBackFooterNoMoreDataText = @"已经全部加载完毕";
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // UIScrollView+Extension.h
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 14-5-28.
7 | // Copyright (c) 2014年 小码哥. All rights reserved.
8 | //
9 |
10 | #import
11 |
12 | @interface UIScrollView (MJExtension)
13 | @property (assign, nonatomic) CGFloat mj_insetT;
14 | @property (assign, nonatomic) CGFloat mj_insetB;
15 | @property (assign, nonatomic) CGFloat mj_insetL;
16 | @property (assign, nonatomic) CGFloat mj_insetR;
17 |
18 | @property (assign, nonatomic) CGFloat mj_offsetX;
19 | @property (assign, nonatomic) CGFloat mj_offsetY;
20 |
21 | @property (assign, nonatomic) CGFloat mj_contentW;
22 | @property (assign, nonatomic) CGFloat mj_contentH;
23 | @end
24 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.m:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // UIScrollView+Extension.m
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 14-5-28.
7 | // Copyright (c) 2014年 小码哥. All rights reserved.
8 | //
9 |
10 | #import "UIScrollView+MJExtension.h"
11 | #import
12 |
13 | @implementation UIScrollView (MJExtension)
14 |
15 | - (void)setMj_insetT:(CGFloat)mj_insetT
16 | {
17 | UIEdgeInsets inset = self.contentInset;
18 | inset.top = mj_insetT;
19 | self.contentInset = inset;
20 | }
21 |
22 | - (CGFloat)mj_insetT
23 | {
24 | return self.contentInset.top;
25 | }
26 |
27 | - (void)setMj_insetB:(CGFloat)mj_insetB
28 | {
29 | UIEdgeInsets inset = self.contentInset;
30 | inset.bottom = mj_insetB;
31 | self.contentInset = inset;
32 | }
33 |
34 | - (CGFloat)mj_insetB
35 | {
36 | return self.contentInset.bottom;
37 | }
38 |
39 | - (void)setMj_insetL:(CGFloat)mj_insetL
40 | {
41 | UIEdgeInsets inset = self.contentInset;
42 | inset.left = mj_insetL;
43 | self.contentInset = inset;
44 | }
45 |
46 | - (CGFloat)mj_insetL
47 | {
48 | return self.contentInset.left;
49 | }
50 |
51 | - (void)setMj_insetR:(CGFloat)mj_insetR
52 | {
53 | UIEdgeInsets inset = self.contentInset;
54 | inset.right = mj_insetR;
55 | self.contentInset = inset;
56 | }
57 |
58 | - (CGFloat)mj_insetR
59 | {
60 | return self.contentInset.right;
61 | }
62 |
63 | - (void)setMj_offsetX:(CGFloat)mj_offsetX
64 | {
65 | CGPoint offset = self.contentOffset;
66 | offset.x = mj_offsetX;
67 | self.contentOffset = offset;
68 | }
69 |
70 | - (CGFloat)mj_offsetX
71 | {
72 | return self.contentOffset.x;
73 | }
74 |
75 | - (void)setMj_offsetY:(CGFloat)mj_offsetY
76 | {
77 | CGPoint offset = self.contentOffset;
78 | offset.y = mj_offsetY;
79 | self.contentOffset = offset;
80 | }
81 |
82 | - (CGFloat)mj_offsetY
83 | {
84 | return self.contentOffset.y;
85 | }
86 |
87 | - (void)setMj_contentW:(CGFloat)mj_contentW
88 | {
89 | CGSize size = self.contentSize;
90 | size.width = mj_contentW;
91 | self.contentSize = size;
92 | }
93 |
94 | - (CGFloat)mj_contentW
95 | {
96 | return self.contentSize.width;
97 | }
98 |
99 | - (void)setMj_contentH:(CGFloat)mj_contentH
100 | {
101 | CGSize size = self.contentSize;
102 | size.height = mj_contentH;
103 | self.contentSize = size;
104 | }
105 |
106 | - (CGFloat)mj_contentH
107 | {
108 | return self.contentSize.height;
109 | }
110 | @end
111 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // UIScrollView+MJRefresh.h
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 15/3/4.
7 | // Copyright (c) 2015年 小码哥. All rights reserved.
8 | // 给ScrollView增加下拉刷新、上拉刷新的功能
9 |
10 | #import
11 |
12 | @class MJRefreshHeader, MJRefreshFooter;
13 |
14 | @interface UIScrollView (MJRefresh)
15 | /** 下拉刷新控件 */
16 | @property (strong, nonatomic) MJRefreshHeader *header;
17 | /** 上拉刷新控件 */
18 | @property (strong, nonatomic) MJRefreshFooter *footer;
19 |
20 | #pragma mark - other
21 | - (NSInteger)totalDataCount;
22 | @property (copy, nonatomic) void (^reloadDataBlock)(NSInteger totalDataCount);
23 | @end
24 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/UIView+MJExtension.h:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // UIView+Extension.h
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 14-5-28.
7 | // Copyright (c) 2014年 小码哥. All rights reserved.
8 | //
9 |
10 | #import
11 |
12 | @interface UIView (MJExtension)
13 | @property (assign, nonatomic) CGFloat mj_x;
14 | @property (assign, nonatomic) CGFloat mj_y;
15 | @property (assign, nonatomic) CGFloat mj_w;
16 | @property (assign, nonatomic) CGFloat mj_h;
17 | @property (assign, nonatomic) CGSize mj_size;
18 | @property (assign, nonatomic) CGPoint mj_origin;
19 | @end
20 |
--------------------------------------------------------------------------------
/Pods/MJRefresh/MJRefresh/UIView+MJExtension.m:
--------------------------------------------------------------------------------
1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh
2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
3 | // UIView+Extension.m
4 | // MJRefreshExample
5 | //
6 | // Created by MJ Lee on 14-5-28.
7 | // Copyright (c) 2014年 小码哥. All rights reserved.
8 | //
9 |
10 | #import "UIView+MJExtension.h"
11 |
12 | @implementation UIView (MJExtension)
13 | - (void)setMj_x:(CGFloat)mj_x
14 | {
15 | CGRect frame = self.frame;
16 | frame.origin.x = mj_x;
17 | self.frame = frame;
18 | }
19 |
20 | - (CGFloat)mj_x
21 | {
22 | return self.frame.origin.x;
23 | }
24 |
25 | - (void)setMj_y:(CGFloat)mj_y
26 | {
27 | CGRect frame = self.frame;
28 | frame.origin.y = mj_y;
29 | self.frame = frame;
30 | }
31 |
32 | - (CGFloat)mj_y
33 | {
34 | return self.frame.origin.y;
35 | }
36 |
37 | - (void)setMj_w:(CGFloat)mj_w
38 | {
39 | CGRect frame = self.frame;
40 | frame.size.width = mj_w;
41 | self.frame = frame;
42 | }
43 |
44 | - (CGFloat)mj_w
45 | {
46 | return self.frame.size.width;
47 | }
48 |
49 | - (void)setMj_h:(CGFloat)mj_h
50 | {
51 | CGRect frame = self.frame;
52 | frame.size.height = mj_h;
53 | self.frame = frame;
54 | }
55 |
56 | - (CGFloat)mj_h
57 | {
58 | return self.frame.size.height;
59 | }
60 |
61 | - (void)setMj_size:(CGSize)mj_size
62 | {
63 | CGRect frame = self.frame;
64 | frame.size = mj_size;
65 | self.frame = frame;
66 | }
67 |
68 | - (CGSize)mj_size
69 | {
70 | return self.frame.size;
71 | }
72 |
73 | - (void)setMj_origin:(CGPoint)mj_origin
74 | {
75 | CGRect frame = self.frame;
76 | frame.origin = mj_origin;
77 | self.frame = frame;
78 | }
79 |
80 | - (CGPoint)mj_origin
81 | {
82 | return self.frame.origin;
83 | }
84 | @end
85 |
--------------------------------------------------------------------------------
/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - AFNetworking (2.6.1):
3 | - AFNetworking/NSURLConnection (= 2.6.1)
4 | - AFNetworking/NSURLSession (= 2.6.1)
5 | - AFNetworking/Reachability (= 2.6.1)
6 | - AFNetworking/Security (= 2.6.1)
7 | - AFNetworking/Serialization (= 2.6.1)
8 | - AFNetworking/UIKit (= 2.6.1)
9 | - AFNetworking/NSURLConnection (2.6.1):
10 | - AFNetworking/Reachability
11 | - AFNetworking/Security
12 | - AFNetworking/Serialization
13 | - AFNetworking/NSURLSession (2.6.1):
14 | - AFNetworking/Reachability
15 | - AFNetworking/Security
16 | - AFNetworking/Serialization
17 | - AFNetworking/Reachability (2.6.1)
18 | - AFNetworking/Security (2.6.1)
19 | - AFNetworking/Serialization (2.6.1)
20 | - AFNetworking/UIKit (2.6.1):
21 | - AFNetworking/NSURLConnection
22 | - AFNetworking/NSURLSession
23 | - Masonry (0.6.3)
24 | - MBProgressHUD (0.9.1)
25 | - MJRefresh (2.4.12)
26 |
27 | DEPENDENCIES:
28 | - AFNetworking
29 | - Masonry
30 | - MBProgressHUD
31 | - MJRefresh
32 |
33 | SPEC CHECKSUMS:
34 | AFNetworking: 8e4e60500beb8bec644cf575beee72990a76d399
35 | Masonry: ff105a956abcd19a618b2028b121cb638d7a8e2f
36 | MBProgressHUD: c47f2c166c126cf2ce36498d80f33e754d4e93ad
37 | MJRefresh: ca8e9589895977df32d379d46e6b8a5450b3ff44
38 |
39 | COCOAPODS: 0.39.0
40 |
--------------------------------------------------------------------------------
/Pods/Masonry/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2011-2012 Masonry Team - https://github.com/Masonry
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/MASCompositeConstraint.h:
--------------------------------------------------------------------------------
1 | //
2 | // MASCompositeConstraint.h
3 | // Masonry
4 | //
5 | // Created by Jonas Budelmann on 21/07/13.
6 | // Copyright (c) 2013 cloudling. All rights reserved.
7 | //
8 |
9 | #import "MASConstraint.h"
10 | #import "MASUtilities.h"
11 |
12 | /**
13 | * A group of MASConstraint objects
14 | */
15 | @interface MASCompositeConstraint : MASConstraint
16 |
17 | /**
18 | * Creates a composite with a predefined array of children
19 | *
20 | * @param children child MASConstraints
21 | *
22 | * @return a composite constraint
23 | */
24 | - (id)initWithChildren:(NSArray *)children;
25 |
26 | @end
27 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/MASConstraint+Private.h:
--------------------------------------------------------------------------------
1 | //
2 | // MASConstraint+Private.h
3 | // Masonry
4 | //
5 | // Created by Nick Tymchenko on 29/04/14.
6 | // Copyright (c) 2014 cloudling. All rights reserved.
7 | //
8 |
9 | #import "MASConstraint.h"
10 |
11 | @protocol MASConstraintDelegate;
12 |
13 |
14 | @interface MASConstraint ()
15 |
16 | /**
17 | * Whether or not to check for an existing constraint instead of adding constraint
18 | */
19 | @property (nonatomic, assign) BOOL updateExisting;
20 |
21 | /**
22 | * Usually MASConstraintMaker but could be a parent MASConstraint
23 | */
24 | @property (nonatomic, weak) id delegate;
25 |
26 | /**
27 | * Based on a provided value type, is equal to calling:
28 | * NSNumber - setOffset:
29 | * NSValue with CGPoint - setPointOffset:
30 | * NSValue with CGSize - setSizeOffset:
31 | * NSValue with MASEdgeInsets - setInsets:
32 | */
33 | - (void)setLayoutConstantWithValue:(NSValue *)value;
34 |
35 | @end
36 |
37 |
38 | @interface MASConstraint (Abstract)
39 |
40 | /**
41 | * Sets the constraint relation to given NSLayoutRelation
42 | * returns a block which accepts one of the following:
43 | * MASViewAttribute, UIView, NSValue, NSArray
44 | * see readme for more details.
45 | */
46 | - (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation;
47 |
48 | /**
49 | * Override to set a custom chaining behaviour
50 | */
51 | - (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute;
52 |
53 | @end
54 |
55 |
56 | @protocol MASConstraintDelegate
57 |
58 | /**
59 | * Notifies the delegate when the constraint needs to be replaced with another constraint. For example
60 | * A MASViewConstraint may turn into a MASCompositeConstraint when an array is passed to one of the equality blocks
61 | */
62 | - (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint;
63 |
64 | - (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute;
65 |
66 | @end
67 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/MASLayoutConstraint.h:
--------------------------------------------------------------------------------
1 | //
2 | // MASLayoutConstraint.h
3 | // Masonry
4 | //
5 | // Created by Jonas Budelmann on 3/08/13.
6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved.
7 | //
8 |
9 | #import "MASUtilities.h"
10 |
11 | /**
12 | * When you are debugging or printing the constraints attached to a view this subclass
13 | * makes it easier to identify which constraints have been created via Masonry
14 | */
15 | @interface MASLayoutConstraint : NSLayoutConstraint
16 |
17 | /**
18 | * a key to associate with this constraint
19 | */
20 | @property (nonatomic, strong) id mas_key;
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/MASLayoutConstraint.m:
--------------------------------------------------------------------------------
1 | //
2 | // MASLayoutConstraint.m
3 | // Masonry
4 | //
5 | // Created by Jonas Budelmann on 3/08/13.
6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved.
7 | //
8 |
9 | #import "MASLayoutConstraint.h"
10 |
11 | @implementation MASLayoutConstraint
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/MASViewAttribute.h:
--------------------------------------------------------------------------------
1 | //
2 | // MASAttribute.h
3 | // Masonry
4 | //
5 | // Created by Jonas Budelmann on 21/07/13.
6 | // Copyright (c) 2013 cloudling. All rights reserved.
7 | //
8 |
9 | #import "MASUtilities.h"
10 |
11 | /**
12 | * An immutable tuple which stores the view and the related NSLayoutAttribute.
13 | * Describes part of either the left or right hand side of a constraint equation
14 | */
15 | @interface MASViewAttribute : NSObject
16 |
17 | /**
18 | * The view which the reciever relates to. Can be nil if item is not a view.
19 | */
20 | @property (nonatomic, weak, readonly) MAS_VIEW *view;
21 |
22 | /**
23 | * The item which the reciever relates to.
24 | */
25 | @property (nonatomic, weak, readonly) id item;
26 |
27 | /**
28 | * The attribute which the reciever relates to
29 | */
30 | @property (nonatomic, assign, readonly) NSLayoutAttribute layoutAttribute;
31 |
32 | /**
33 | * Convenience initializer.
34 | */
35 | - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute;
36 |
37 | /**
38 | * The designated initializer.
39 | */
40 | - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute;
41 |
42 | /**
43 | * Determine whether the layoutAttribute is a size attribute
44 | *
45 | * @return YES if layoutAttribute is equal to NSLayoutAttributeWidth or NSLayoutAttributeHeight
46 | */
47 | - (BOOL)isSizeAttribute;
48 |
49 | @end
50 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/MASViewAttribute.m:
--------------------------------------------------------------------------------
1 | //
2 | // MASAttribute.m
3 | // Masonry
4 | //
5 | // Created by Jonas Budelmann on 21/07/13.
6 | // Copyright (c) 2013 cloudling. All rights reserved.
7 | //
8 |
9 | #import "MASViewAttribute.h"
10 |
11 | @implementation MASViewAttribute
12 |
13 | - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute {
14 | self = [self initWithView:view item:view layoutAttribute:layoutAttribute];
15 | return self;
16 | }
17 |
18 | - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute {
19 | self = [super init];
20 | if (!self) return nil;
21 |
22 | _view = view;
23 | _item = item;
24 | _layoutAttribute = layoutAttribute;
25 |
26 | return self;
27 | }
28 |
29 | - (BOOL)isSizeAttribute {
30 | return self.layoutAttribute == NSLayoutAttributeWidth
31 | || self.layoutAttribute == NSLayoutAttributeHeight;
32 | }
33 |
34 | - (BOOL)isEqual:(MASViewAttribute *)viewAttribute {
35 | if ([viewAttribute isKindOfClass:self.class]) {
36 | return self.view == viewAttribute.view
37 | && self.layoutAttribute == viewAttribute.layoutAttribute;
38 | }
39 | return [super isEqual:viewAttribute];
40 | }
41 |
42 | - (NSUInteger)hash {
43 | return MAS_NSUINTROTATE([self.view hash], MAS_NSUINT_BIT / 2) ^ self.layoutAttribute;
44 | }
45 |
46 | @end
47 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/MASViewConstraint.h:
--------------------------------------------------------------------------------
1 | //
2 | // MASConstraint.h
3 | // Masonry
4 | //
5 | // Created by Jonas Budelmann on 20/07/13.
6 | // Copyright (c) 2013 cloudling. All rights reserved.
7 | //
8 |
9 | #import "MASViewAttribute.h"
10 | #import "MASConstraint.h"
11 | #import "MASLayoutConstraint.h"
12 | #import "MASUtilities.h"
13 |
14 | /**
15 | * A single constraint.
16 | * Contains the attributes neccessary for creating a NSLayoutConstraint and adding it to the appropriate view
17 | */
18 | @interface MASViewConstraint : MASConstraint
19 |
20 | /**
21 | * First item/view and first attribute of the NSLayoutConstraint
22 | */
23 | @property (nonatomic, strong, readonly) MASViewAttribute *firstViewAttribute;
24 |
25 | /**
26 | * Second item/view and second attribute of the NSLayoutConstraint
27 | */
28 | @property (nonatomic, strong, readonly) MASViewAttribute *secondViewAttribute;
29 |
30 | /**
31 | * initialises the MASViewConstraint with the first part of the equation
32 | *
33 | * @param firstViewAttribute view.mas_left, view.mas_width etc.
34 | *
35 | * @return a new view constraint
36 | */
37 | - (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute;
38 |
39 | /**
40 | * Returns all MASViewConstraints installed with this view as a first item.
41 | *
42 | * @param view A view to retrieve constraints for.
43 | *
44 | * @return An array of MASViewConstraints.
45 | */
46 | + (NSArray *)installedConstraintsForView:(MAS_VIEW *)view;
47 |
48 | @end
49 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/Masonry.h:
--------------------------------------------------------------------------------
1 | //
2 | // Masonry.h
3 | // Masonry
4 | //
5 | // Created by Jonas Budelmann on 20/07/13.
6 | // Copyright (c) 2013 cloudling. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for Masonry.
12 | FOUNDATION_EXPORT double MasonryVersionNumber;
13 |
14 | //! Project version string for Masonry.
15 | FOUNDATION_EXPORT const unsigned char MasonryVersionString[];
16 |
17 | #import "MASUtilities.h"
18 | #import "View+MASAdditions.h"
19 | #import "View+MASShorthandAdditions.h"
20 | #import "ViewController+MASAdditions.h"
21 | #import "NSArray+MASAdditions.h"
22 | #import "NSArray+MASShorthandAdditions.h"
23 | #import "MASConstraint.h"
24 | #import "MASCompositeConstraint.h"
25 | #import "MASViewAttribute.h"
26 | #import "MASViewConstraint.h"
27 | #import "MASConstraintMaker.h"
28 | #import "MASLayoutConstraint.h"
29 | #import "NSLayoutConstraint+MASDebugAdditions.h"
30 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/NSArray+MASAdditions.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSArray+MASAdditions.h
3 | //
4 | //
5 | // Created by Daniel Hammond on 11/26/13.
6 | //
7 | //
8 |
9 | #import "MASUtilities.h"
10 | #import "MASConstraintMaker.h"
11 | #import "MASViewAttribute.h"
12 |
13 | typedef NS_ENUM(NSUInteger, MASAxisType) {
14 | MASAxisTypeHorizontal,
15 | MASAxisTypeVertical
16 | };
17 |
18 | @interface NSArray (MASAdditions)
19 |
20 | /**
21 | * Creates a MASConstraintMaker with each view in the callee.
22 | * Any constraints defined are added to the view or the appropriate superview once the block has finished executing on each view
23 | *
24 | * @param block scope within which you can build up the constraints which you wish to apply to each view.
25 | *
26 | * @return Array of created MASConstraints
27 | */
28 | - (NSArray *)mas_makeConstraints:(void (^)(MASConstraintMaker *make))block;
29 |
30 | /**
31 | * Creates a MASConstraintMaker with each view in the callee.
32 | * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view.
33 | * If an existing constraint exists then it will be updated instead.
34 | *
35 | * @param block scope within which you can build up the constraints which you wish to apply to each view.
36 | *
37 | * @return Array of created/updated MASConstraints
38 | */
39 | - (NSArray *)mas_updateConstraints:(void (^)(MASConstraintMaker *make))block;
40 |
41 | /**
42 | * Creates a MASConstraintMaker with each view in the callee.
43 | * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view.
44 | * All constraints previously installed for the views will be removed.
45 | *
46 | * @param block scope within which you can build up the constraints which you wish to apply to each view.
47 | *
48 | * @return Array of created/updated MASConstraints
49 | */
50 | - (NSArray *)mas_remakeConstraints:(void (^)(MASConstraintMaker *make))block;
51 |
52 | /**
53 | * distribute with fixed spacing
54 | *
55 | * @param axisType which axis to distribute items along
56 | * @param fixedSpacing the spacing between each item
57 | * @param leadSpacing the spacing before the first item and the container
58 | * @param tailSpacing the spacing after the last item and the container
59 | */
60 | - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;
61 |
62 | /**
63 | * distribute with fixed item size
64 | *
65 | * @param axisType which axis to distribute items along
66 | * @param fixedItemLength the fixed length of each item
67 | * @param leadSpacing the spacing before the first item and the container
68 | * @param tailSpacing the spacing after the last item and the container
69 | */
70 | - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;
71 |
72 | @end
73 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/NSArray+MASShorthandAdditions.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSArray+MASShorthandAdditions.h
3 | // Masonry
4 | //
5 | // Created by Jonas Budelmann on 22/07/13.
6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved.
7 | //
8 |
9 | #import "NSArray+MASAdditions.h"
10 |
11 | #ifdef MAS_SHORTHAND
12 |
13 | /**
14 | * Shorthand array additions without the 'mas_' prefixes,
15 | * only enabled if MAS_SHORTHAND is defined
16 | */
17 | @interface NSArray (MASShorthandAdditions)
18 |
19 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block;
20 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block;
21 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block;
22 |
23 | @end
24 |
25 | @implementation NSArray (MASShorthandAdditions)
26 |
27 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block {
28 | return [self mas_makeConstraints:block];
29 | }
30 |
31 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block {
32 | return [self mas_updateConstraints:block];
33 | }
34 |
35 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block {
36 | return [self mas_remakeConstraints:block];
37 | }
38 |
39 | @end
40 |
41 | #endif
42 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSLayoutConstraint+MASDebugAdditions.h
3 | // Masonry
4 | //
5 | // Created by Jonas Budelmann on 3/08/13.
6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved.
7 | //
8 |
9 | #import "MASUtilities.h"
10 |
11 | /**
12 | * makes debug and log output of NSLayoutConstraints more readable
13 | */
14 | @interface NSLayoutConstraint (MASDebugAdditions)
15 |
16 | @end
17 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/View+MASShorthandAdditions.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+MASShorthandAdditions.h
3 | // Masonry
4 | //
5 | // Created by Jonas Budelmann on 22/07/13.
6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved.
7 | //
8 |
9 | #import "View+MASAdditions.h"
10 |
11 | #ifdef MAS_SHORTHAND
12 |
13 | /**
14 | * Shorthand view additions without the 'mas_' prefixes,
15 | * only enabled if MAS_SHORTHAND is defined
16 | */
17 | @interface MAS_VIEW (MASShorthandAdditions)
18 |
19 | @property (nonatomic, strong, readonly) MASViewAttribute *left;
20 | @property (nonatomic, strong, readonly) MASViewAttribute *top;
21 | @property (nonatomic, strong, readonly) MASViewAttribute *right;
22 | @property (nonatomic, strong, readonly) MASViewAttribute *bottom;
23 | @property (nonatomic, strong, readonly) MASViewAttribute *leading;
24 | @property (nonatomic, strong, readonly) MASViewAttribute *trailing;
25 | @property (nonatomic, strong, readonly) MASViewAttribute *width;
26 | @property (nonatomic, strong, readonly) MASViewAttribute *height;
27 | @property (nonatomic, strong, readonly) MASViewAttribute *centerX;
28 | @property (nonatomic, strong, readonly) MASViewAttribute *centerY;
29 | @property (nonatomic, strong, readonly) MASViewAttribute *baseline;
30 | @property (nonatomic, strong, readonly) MASViewAttribute *(^attribute)(NSLayoutAttribute attr);
31 |
32 | #if TARGET_OS_IPHONE
33 |
34 | @property (nonatomic, strong, readonly) MASViewAttribute *leftMargin;
35 | @property (nonatomic, strong, readonly) MASViewAttribute *rightMargin;
36 | @property (nonatomic, strong, readonly) MASViewAttribute *topMargin;
37 | @property (nonatomic, strong, readonly) MASViewAttribute *bottomMargin;
38 | @property (nonatomic, strong, readonly) MASViewAttribute *leadingMargin;
39 | @property (nonatomic, strong, readonly) MASViewAttribute *trailingMargin;
40 | @property (nonatomic, strong, readonly) MASViewAttribute *centerXWithinMargins;
41 | @property (nonatomic, strong, readonly) MASViewAttribute *centerYWithinMargins;
42 |
43 | #endif
44 |
45 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block;
46 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block;
47 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block;
48 |
49 | @end
50 |
51 | #define MAS_ATTR_FORWARD(attr) \
52 | - (MASViewAttribute *)attr { \
53 | return [self mas_##attr]; \
54 | }
55 |
56 | @implementation MAS_VIEW (MASShorthandAdditions)
57 |
58 | MAS_ATTR_FORWARD(top);
59 | MAS_ATTR_FORWARD(left);
60 | MAS_ATTR_FORWARD(bottom);
61 | MAS_ATTR_FORWARD(right);
62 | MAS_ATTR_FORWARD(leading);
63 | MAS_ATTR_FORWARD(trailing);
64 | MAS_ATTR_FORWARD(width);
65 | MAS_ATTR_FORWARD(height);
66 | MAS_ATTR_FORWARD(centerX);
67 | MAS_ATTR_FORWARD(centerY);
68 | MAS_ATTR_FORWARD(baseline);
69 |
70 | #if TARGET_OS_IPHONE
71 |
72 | MAS_ATTR_FORWARD(leftMargin);
73 | MAS_ATTR_FORWARD(rightMargin);
74 | MAS_ATTR_FORWARD(topMargin);
75 | MAS_ATTR_FORWARD(bottomMargin);
76 | MAS_ATTR_FORWARD(leadingMargin);
77 | MAS_ATTR_FORWARD(trailingMargin);
78 | MAS_ATTR_FORWARD(centerXWithinMargins);
79 | MAS_ATTR_FORWARD(centerYWithinMargins);
80 |
81 | #endif
82 |
83 | - (MASViewAttribute *(^)(NSLayoutAttribute))attribute {
84 | return [self mas_attribute];
85 | }
86 |
87 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block {
88 | return [self mas_makeConstraints:block];
89 | }
90 |
91 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block {
92 | return [self mas_updateConstraints:block];
93 | }
94 |
95 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block {
96 | return [self mas_remakeConstraints:block];
97 | }
98 |
99 | @end
100 |
101 | #endif
102 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/ViewController+MASAdditions.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIViewController+MASAdditions.h
3 | // Masonry
4 | //
5 | // Created by Craig Siemens on 2015-06-23.
6 | //
7 | //
8 |
9 | #import "MASUtilities.h"
10 | #import "MASConstraintMaker.h"
11 | #import "MASViewAttribute.h"
12 |
13 | #ifdef MAS_VIEW_CONTROLLER
14 |
15 | @interface MAS_VIEW_CONTROLLER (MASAdditions)
16 |
17 | /**
18 | * following properties return a new MASViewAttribute with appropriate UILayoutGuide and NSLayoutAttribute
19 | */
20 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuide;
21 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuide;
22 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideTop;
23 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideBottom;
24 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideTop;
25 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideBottom;
26 |
27 |
28 | @end
29 |
30 | #endif
31 |
--------------------------------------------------------------------------------
/Pods/Masonry/Masonry/ViewController+MASAdditions.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIViewController+MASAdditions.m
3 | // Masonry
4 | //
5 | // Created by Craig Siemens on 2015-06-23.
6 | //
7 | //
8 |
9 | #import "ViewController+MASAdditions.h"
10 |
11 | #ifdef MAS_VIEW_CONTROLLER
12 |
13 | @implementation MAS_VIEW_CONTROLLER (MASAdditions)
14 |
15 | - (MASViewAttribute *)mas_topLayoutGuide {
16 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
17 | }
18 | - (MASViewAttribute *)mas_topLayoutGuideTop {
19 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeTop];
20 | }
21 | - (MASViewAttribute *)mas_topLayoutGuideBottom {
22 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
23 | }
24 |
25 | - (MASViewAttribute *)mas_bottomLayoutGuide {
26 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop];
27 | }
28 | - (MASViewAttribute *)mas_bottomLayoutGuideTop {
29 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop];
30 | }
31 | - (MASViewAttribute *)mas_bottomLayoutGuideBottom {
32 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
33 | }
34 |
35 |
36 |
37 | @end
38 |
39 | #endif
40 |
--------------------------------------------------------------------------------
/Pods/Pods.xcodeproj/xcuserdata/Arthur.xcuserdatad/xcschemes/AFNetworking.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
45 |
46 |
52 |
53 |
55 |
56 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/Pods/Pods.xcodeproj/xcuserdata/Arthur.xcuserdatad/xcschemes/MBProgressHUD.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
45 |
46 |
52 |
53 |
55 |
56 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/Pods/Pods.xcodeproj/xcuserdata/Arthur.xcuserdatad/xcschemes/MJRefresh.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
45 |
46 |
52 |
53 |
55 |
56 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/Pods/Pods.xcodeproj/xcuserdata/Arthur.xcuserdatad/xcschemes/Masonry.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
45 |
46 |
52 |
53 |
55 |
56 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/Pods/Pods.xcodeproj/xcuserdata/Arthur.xcuserdatad/xcschemes/Pods.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
45 |
46 |
52 |
53 |
55 |
56 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/Pods/Pods.xcodeproj/xcuserdata/Arthur.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | AFNetworking.xcscheme
8 |
9 | isShown
10 |
11 |
12 | MBProgressHUD.xcscheme
13 |
14 | isShown
15 |
16 |
17 | MJRefresh.xcscheme
18 |
19 | isShown
20 |
21 |
22 | Masonry.xcscheme
23 |
24 | isShown
25 |
26 |
27 | Pods.xcscheme
28 |
29 | isShown
30 |
31 |
32 |
33 | SuppressBuildableAutocreation
34 |
35 | 410B25DF16EA5C5B3E2698F74F9625FB
36 |
37 | primary
38 |
39 |
40 | 53480ED0BE09FF49E34B1702D485CAAB
41 |
42 | primary
43 |
44 |
45 | 79FE5B618D6325B002B06C851CBDF89E
46 |
47 | primary
48 |
49 |
50 | 8F74D9EA91F4C43190670066BAC37D44
51 |
52 | primary
53 |
54 |
55 | FE2F1D7B9D9FCEA148517E4657B243F4
56 |
57 | primary
58 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_AFNetworking : NSObject
3 | @end
4 | @implementation PodsDummy_AFNetworking
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 | #ifndef TARGET_OS_IOS
6 | #define TARGET_OS_IOS TARGET_OS_IPHONE
7 | #endif
8 |
9 | #ifndef TARGET_OS_WATCH
10 | #define TARGET_OS_WATCH 0
11 | #endif
12 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry"
3 | OTHER_LDFLAGS = -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration"
4 | PODS_ROOT = ${SRCROOT}
5 | SKIP_INSTALL = YES
--------------------------------------------------------------------------------
/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_MBProgressHUD : NSObject
3 | @end
4 | @implementation PodsDummy_MBProgressHUD
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MBProgressHUD" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry"
3 | OTHER_LDFLAGS = -framework "CoreGraphics"
4 | PODS_ROOT = ${SRCROOT}
5 | SKIP_INSTALL = YES
--------------------------------------------------------------------------------
/Pods/Target Support Files/MJRefresh/MJRefresh-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_MJRefresh : NSObject
3 | @end
4 | @implementation PodsDummy_MJRefresh
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/MJRefresh/MJRefresh-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/MJRefresh/MJRefresh.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MJRefresh" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry"
3 | PODS_ROOT = ${SRCROOT}
4 | SKIP_INSTALL = YES
--------------------------------------------------------------------------------
/Pods/Target Support Files/Masonry/Masonry-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Masonry : NSObject
3 | @end
4 | @implementation PodsDummy_Masonry
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Masonry/Masonry-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Masonry/Masonry.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Masonry" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry"
3 | OTHER_LDFLAGS = -framework "Foundation" -framework "UIKit"
4 | PODS_ROOT = ${SRCROOT}
5 | SKIP_INSTALL = YES
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods/Pods-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods : NSObject
3 | @end
4 | @implementation PodsDummy_Pods
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods/Pods-frameworks.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 |
4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
6 |
7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
8 |
9 | install_framework()
10 | {
11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
12 | local source="${BUILT_PRODUCTS_DIR}/$1"
13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
15 | elif [ -r "$1" ]; then
16 | local source="$1"
17 | fi
18 |
19 | local destination="${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
20 |
21 | if [ -L "${source}" ]; then
22 | echo "Symlinked..."
23 | source="$(readlink "${source}")"
24 | fi
25 |
26 | # use filter instead of exclude so missing patterns dont' throw errors
27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
29 |
30 | local basename
31 | basename="$(basename -s .framework "$1")"
32 | binary="${destination}/${basename}.framework/${basename}"
33 | if ! [ -r "$binary" ]; then
34 | binary="${destination}/${basename}"
35 | fi
36 |
37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device
38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
39 | strip_invalid_archs "$binary"
40 | fi
41 |
42 | # Resign the code if required by the build settings to avoid unstable apps
43 | code_sign_if_enabled "${destination}/$(basename "$1")"
44 |
45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
47 | local swift_runtime_libs
48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]})
49 | for lib in $swift_runtime_libs; do
50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
52 | code_sign_if_enabled "${destination}/${lib}"
53 | done
54 | fi
55 | }
56 |
57 | # Signs a framework with the provided identity
58 | code_sign_if_enabled() {
59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
60 | # Use the current code_sign_identitiy
61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\""
63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1"
64 | fi
65 | }
66 |
67 | # Strip invalid architectures
68 | strip_invalid_archs() {
69 | binary="$1"
70 | # Get architectures for current file
71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)"
72 | stripped=""
73 | for arch in $archs; do
74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then
75 | # Strip non-valid architectures in-place
76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1
77 | stripped="$stripped $arch"
78 | fi
79 | done
80 | if [[ "$stripped" ]]; then
81 | echo "Stripped $binary of architectures:$stripped"
82 | fi
83 | }
84 |
85 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods/Pods.debug.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry"
3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry"
4 | OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"MBProgressHUD" -l"MJRefresh" -l"Masonry" -framework "CoreGraphics" -framework "Foundation" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit"
5 | PODS_ROOT = ${SRCROOT}/Pods
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods/Pods.release.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Masonry"
3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/MBProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Masonry"
4 | OTHER_LDFLAGS = $(inherited) -ObjC -l"AFNetworking" -l"MBProgressHUD" -l"MJRefresh" -l"Masonry" -framework "CoreGraphics" -framework "Foundation" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit"
5 | PODS_ROOT = ${SRCROOT}/Pods
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 |
4 |
5 | MJdeFM是一个关于豆瓣FM的iOS客户端,参考开源项目[DoubanFM](https://github.com/XVXVXXX/DoubanFM),但在其基础上做了一些调整,主要包括以下几个方面:
6 |
7 | - 对其代码进行重构,减少了模块之间的耦合度。
8 |
9 | - 使用[Context-Menu.iOS](https://github.com/Yalantis/Context-Menu.iOS)替换原有的[CDSideBarController](https://github.com/christophedellac/CDSideBarController)。
10 |
11 | - 修改了原有项目中的bug,并增添添加/取消红心歌曲的功能。
12 |
13 |
14 |
15 | 从该项目中学到的知识点:
16 |
17 | - 使用`MPMoviePlayerController`来进行歌曲的播放。
18 |
19 | - 使用`AVFoundation`中的`AVAudioSession`实现后台音乐播放。
20 |
21 | ``` objective-c
22 | AVAudioSession* session = [AVAudioSession sharedInstance];
23 | [session setCategory:AVAudioSessionCategoryPlayback error:nil];
24 | [session setActive:YES error:nil];
25 | ```
26 |
27 | - 添加播放控制器(Remote Control Events)
28 |
29 | ``` objective-c
30 | //告诉系统,接受远程控制事件
31 | [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
32 | [self becomeFirstResponder];
33 |
34 | //响应远程音乐播放控制消息
35 | - (void)remoteControlReceivedWithEvent:(UIEvent*)event
36 | {
37 | if (event.type == UIEventTypeRemoteControl) {
38 | switch (event.subtype) {
39 | case UIEventSubtypeRemoteControlPause:
40 | case UIEventSubtypeRemoteControlPlay:
41 | [self pauseButton:nil]; // 切换播放、暂停按钮
42 | break;
43 | case UIEventSubtypeRemoteControlNextTrack:
44 | [self skipButton:nil]; // 播放下一曲按钮
45 | break;
46 | default:
47 | break;
48 | }
49 | }
50 | }
51 | ```
52 |
53 | - 在锁屏界面显示播放歌曲信息
54 |
55 | ``` objective-c
56 | //其实就是设置一个全局变量的值,当系统处于音乐播放状态时,锁屏界面就会将NowPlayingInfo中的信息展示出来。
57 | - (void)configPlayingInfo
58 | {
59 | if (NSClassFromString(@"MPNowPlayingInfoCenter")) {
60 | if (self.playingSong.title != nil) {
61 | NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
62 | [dict setObject:self.playingSong.title
63 | forKey:MPMediaItemPropertyTitle];
64 | [dict setObject:self.playingSong.artist
65 | forKey:MPMediaItemPropertyArtist];
66 | [dict
67 | setObject:[NSNumber numberWithFloat:[self.playingSong.length floatValue]]
68 | forKey:MPMediaItemPropertyPlaybackDuration];
69 |
70 | NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.playingSong.picture]];
71 | UIImage* posterImage = [UIImage imageWithData:data];
72 | if (posterImage) {
73 | [dict setObject:[[MPMediaItemArtwork alloc] initWithImage:posterImage] forKey:MPMediaItemPropertyArtwork];
74 | }
75 |
76 | [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:dict];
77 | }
78 | }
79 | }
80 | ```
81 |
--------------------------------------------------------------------------------
/show.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/show.gif
--------------------------------------------------------------------------------
/王敏君-位置隐私保护在移动定位社交服务中的研究与应用.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingstal/MJdeFM/6fbda34b3f1d71ca3cedff7dbac72cf7389b5c70/王敏君-位置隐私保护在移动定位社交服务中的研究与应用.docx
--------------------------------------------------------------------------------