├── 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 | ![show](show.gif) 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 --------------------------------------------------------------------------------