├── .DS_Store
├── EasyLife.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcuserdata
│ │ └── Sekorm.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
└── xcuserdata
│ └── Sekorm.xcuserdatad
│ ├── xcdebugger
│ └── Breakpoints_v2.xcbkptlist
│ └── xcschemes
│ ├── EasyLife.xcscheme
│ └── xcschememanagement.plist
├── EasyLife
├── .DS_Store
├── AppDelegate.h
├── AppDelegate.m
├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ ├── Loading
│ │ ├── Contents.json
│ │ ├── refreshjoke_loading_0.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading@2x.png
│ │ │ └── refreshjoke_loading@3x.png
│ │ ├── refreshjoke_loading_1.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_1@2x.png
│ │ │ └── refreshjoke_loading_1@3x.png
│ │ ├── refreshjoke_loading_10.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_10@2x.png
│ │ │ └── refreshjoke_loading_10@3x.png
│ │ ├── refreshjoke_loading_11.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_11@2x.png
│ │ │ └── refreshjoke_loading_11@3x.png
│ │ ├── refreshjoke_loading_12.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_12@2x.png
│ │ │ └── refreshjoke_loading_12@3x.png
│ │ ├── refreshjoke_loading_13.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_13@2x.png
│ │ │ └── refreshjoke_loading_13@3x.png
│ │ ├── refreshjoke_loading_14.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_14@2x.png
│ │ │ └── refreshjoke_loading_14@3x.png
│ │ ├── refreshjoke_loading_15.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_15@2x.png
│ │ │ └── refreshjoke_loading_15@3x.png
│ │ ├── refreshjoke_loading_16.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_16@2x.png
│ │ │ └── refreshjoke_loading_16@3x.png
│ │ ├── refreshjoke_loading_2.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_2@2x.png
│ │ │ └── refreshjoke_loading_2@3x.png
│ │ ├── refreshjoke_loading_3.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_3@2x.png
│ │ │ └── refreshjoke_loading_3@3x.png
│ │ ├── refreshjoke_loading_4.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_4@2x.png
│ │ │ └── refreshjoke_loading_4@3x.png
│ │ ├── refreshjoke_loading_5.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_5@2x.png
│ │ │ └── refreshjoke_loading_5@3x.png
│ │ ├── refreshjoke_loading_6.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_6@2x.png
│ │ │ └── refreshjoke_loading_6@3x.png
│ │ ├── refreshjoke_loading_7.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_7@2x.png
│ │ │ └── refreshjoke_loading_7@3x.png
│ │ ├── refreshjoke_loading_8-1.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_8@2x.png
│ │ │ └── refreshjoke_loading_8@3x.png
│ │ ├── refreshjoke_loading_8.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_8@2x.png
│ │ │ └── refreshjoke_loading_8@3x.png
│ │ ├── refreshjoke_loading_9-1.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_9@2x.png
│ │ │ └── refreshjoke_loading_9@3x.png
│ │ └── refreshjoke_loading_9.imageset
│ │ │ ├── Contents.json
│ │ │ ├── refreshjoke_loading_9@2x.png
│ │ │ └── refreshjoke_loading_9@3x.png
│ ├── Me
│ │ ├── LOL.imageset
│ │ │ ├── Contents.json
│ │ │ └── LOL.png
│ │ ├── Setting.imageset
│ │ │ ├── Contents.json
│ │ │ ├── Setting@2x.png
│ │ │ └── Setting@3x.png
│ │ ├── avatar_placeholder.imageset
│ │ │ ├── Contents.json
│ │ │ ├── avatar_placeholder@2x.png
│ │ │ └── avatar_placeholder@3x.png
│ │ ├── backgroundImage.imageset
│ │ │ ├── Contents.json
│ │ │ └── backgroundImage.png
│ │ ├── lion.imageset
│ │ │ ├── Contents.json
│ │ │ └── lion.png
│ │ ├── myActivity_icon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── activity_icon@2x.png
│ │ │ └── activity_icon@3x.png
│ │ ├── myAnswer_icon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── answer_icon@2x.png
│ │ │ └── answer_icon@3x.png
│ │ ├── myQuestion_icon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── question_icon@2x.png
│ │ │ └── question_icon@3x.png
│ │ ├── myVip_icon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── vip_icon@2x.png
│ │ │ └── vip_icon@3x.png
│ │ ├── myWallets_icon.imageset
│ │ │ ├── Contents.json
│ │ │ ├── inquiry_icon@2x.png
│ │ │ └── inquiry_icon@3x.png
│ │ └── user_vip_crown.imageset
│ │ │ ├── Contents.json
│ │ │ ├── user_vip_crown@2x.png
│ │ │ └── user_vip_crown@3x.png
│ ├── Tab
│ │ ├── Contents.json
│ │ ├── Found.imageset
│ │ │ ├── Contents.json
│ │ │ ├── Found@2x.png
│ │ │ └── Found@3x.png
│ │ ├── Found_press.imageset
│ │ │ ├── Contents.json
│ │ │ ├── Found_press@2x.png
│ │ │ └── Found_press@3x.png
│ │ ├── audit.imageset
│ │ │ ├── Contents.json
│ │ │ ├── audit@2x.png
│ │ │ └── audit@3x.png
│ │ ├── audit_press.imageset
│ │ │ ├── Contents.json
│ │ │ ├── audit_press@2x.png
│ │ │ └── audit_press@3x.png
│ │ ├── home.imageset
│ │ │ ├── Contents.json
│ │ │ ├── home@2x.png
│ │ │ └── home@3x.png
│ │ ├── home_press.imageset
│ │ │ ├── Contents.json
│ │ │ ├── home_press@2x.png
│ │ │ └── home_press@3x.png
│ │ ├── newstab.imageset
│ │ │ ├── Contents.json
│ │ │ ├── newstab@2x.png
│ │ │ └── newstab@3x.png
│ │ └── newstab_press.imageset
│ │ │ ├── Contents.json
│ │ │ ├── newstab_press@2x.png
│ │ │ └── newstab_press@3x.png
│ └── back_neihan.imageset
│ │ ├── Contents.json
│ │ ├── back_neihan@2x.png
│ │ └── back_neihan@3x.png
├── Base.lproj
│ └── LaunchScreen.storyboard
├── Classes
│ ├── .DS_Store
│ ├── Application
│ │ └── .DS_Store
│ ├── Base
│ │ ├── Controller
│ │ │ ├── .DS_Store
│ │ │ ├── ELBaseNavigationViewController.h
│ │ │ ├── ELBaseNavigationViewController.m
│ │ │ ├── ELBaseViewController.h
│ │ │ └── ELBaseViewController.m
│ │ ├── Model
│ │ │ ├── .DS_Store
│ │ │ ├── ELBaseModel.h
│ │ │ ├── ELBaseModel.m
│ │ │ ├── ELUserInfoModel.h
│ │ │ └── ELUserInfoModel.m
│ │ ├── Request
│ │ │ ├── .DS_Store
│ │ │ ├── ELBaseRequest.h
│ │ │ └── ELBaseRequest.m
│ │ └── View
│ │ │ └── .DS_Store
│ ├── Home
│ │ ├── .DS_Store
│ │ ├── Controller
│ │ │ ├── ELHomeViewController.h
│ │ │ ├── ELHomeViewController.m
│ │ │ ├── ELJokerController.h
│ │ │ └── ELJokerController.m
│ │ ├── Model
│ │ │ ├── ELJokerModel.h
│ │ │ └── ELJokerModel.m
│ │ └── View
│ │ │ ├── ELJokerCell.h
│ │ │ └── ELJokerCell.m
│ ├── Life
│ │ ├── .DS_Store
│ │ ├── Controller
│ │ │ ├── .DS_Store
│ │ │ ├── ELDriverLicenseViewController.h
│ │ │ ├── ELDriverLicenseViewController.m
│ │ │ ├── ELLifeViewController.h
│ │ │ └── ELLifeViewController.m
│ │ ├── Model
│ │ │ ├── .DS_Store
│ │ │ ├── ELHoroscopeModel.h
│ │ │ └── ELHoroscopeModel.m
│ │ └── View
│ │ │ ├── ELHoroscopeView.h
│ │ │ └── ELHoroscopeView.m
│ ├── Main
│ │ ├── .DS_Store
│ │ └── Controller
│ │ │ ├── ELTabBarController.h
│ │ │ └── ELTabBarController.m
│ ├── Me
│ │ ├── .DS_Store
│ │ ├── Me
│ │ │ ├── Controller
│ │ │ │ ├── ELMeViewController.h
│ │ │ │ └── ELMeViewController.m
│ │ │ └── View
│ │ │ │ ├── ELUserInfoHeaderView.h
│ │ │ │ └── ELUserInfoHeaderView.m
│ │ └── Setting
│ │ │ └── Controller
│ │ │ ├── ELSettingViewController.h
│ │ │ └── ELSettingViewController.m
│ ├── News
│ │ ├── .DS_Store
│ │ ├── Controller
│ │ │ ├── ELNewsViewController.h
│ │ │ ├── ELNewsViewController.m
│ │ │ ├── ELTodayHotNewsChildController.h
│ │ │ ├── ELTodayHotNewsChildController.m
│ │ │ ├── ELTodayHotNewsController.h
│ │ │ ├── ELTodayHotNewsController.m
│ │ │ ├── ELWeiXinNewsDetailController.h
│ │ │ ├── ELWeiXinNewsDetailController.m
│ │ │ ├── ELWeiXinNewsListController.h
│ │ │ └── ELWeiXinNewsListController.m
│ │ ├── Model
│ │ │ ├── ELTodayHotNewsChildModel.h
│ │ │ ├── ELTodayHotNewsChildModel.m
│ │ │ ├── ELWeiXinNewsModel.h
│ │ │ └── ELWeiXinNewsModel.m
│ │ └── View
│ │ │ ├── ELTodayHotNewsChildCell.h
│ │ │ ├── ELTodayHotNewsChildCell.m
│ │ │ ├── ELWeiXinNewsListCell.h
│ │ │ ├── ELWeiXinNewsListCell.m
│ │ │ ├── HYTabbarCollectionCell.h
│ │ │ ├── HYTabbarCollectionCell.m
│ │ │ ├── HYTabbarView.h
│ │ │ └── HYTabbarView.m
│ └── Other
│ │ ├── .DS_Store
│ │ ├── Category
│ │ ├── Foundation
│ │ │ ├── .DS_Store
│ │ │ ├── NSDictionary
│ │ │ │ ├── NSDictionary+Addition.h
│ │ │ │ └── NSDictionary+Addition.m
│ │ │ ├── NSString
│ │ │ │ ├── NSAttributedString+Size.h
│ │ │ │ ├── NSAttributedString+Size.m
│ │ │ │ ├── NSString+Addition.h
│ │ │ │ ├── NSString+Addition.m
│ │ │ │ ├── NSString+Encrypt.h
│ │ │ │ ├── NSString+Encrypt.m
│ │ │ │ ├── NSString+Extension.h
│ │ │ │ ├── NSString+Extension.m
│ │ │ │ ├── NSString+Size.h
│ │ │ │ ├── NSString+Size.m
│ │ │ │ ├── NSString+URL.h
│ │ │ │ └── NSString+URL.m
│ │ │ └── Notification
│ │ │ │ ├── NSNotificationCenter+Addition.h
│ │ │ │ └── NSNotificationCenter+Addition.m
│ │ └── UIKit
│ │ │ ├── UIImage
│ │ │ ├── UIImage+Addition.h
│ │ │ ├── UIImage+Addition.m
│ │ │ ├── UIImage+Cut.h
│ │ │ ├── UIImage+Cut.m
│ │ │ ├── UIImage+ImageEffects.h
│ │ │ ├── UIImage+ImageEffects.m
│ │ │ ├── UIImageView+Addition.h
│ │ │ ├── UIImageView+Addition.m
│ │ │ ├── UIImageView+LBBlurredImage.h
│ │ │ └── UIImageView+LBBlurredImage.m
│ │ │ ├── UIView
│ │ │ ├── MBProgressHUD+NHAddition.h
│ │ │ ├── MBProgressHUD+NHAddition.m
│ │ │ ├── UILabel+Addition.h
│ │ │ ├── UILabel+Addition.m
│ │ │ ├── UIView+Frame.h
│ │ │ ├── UIView+Frame.m
│ │ │ ├── UIView+Layer.h
│ │ │ ├── UIView+Layer.m
│ │ │ ├── UIView+Tap.h
│ │ │ └── UIView+Tap.m
│ │ │ └── UIViewController
│ │ │ ├── UIViewController+HUD.h
│ │ │ └── UIViewController+HUD.m
│ │ ├── Custom
│ │ ├── Controller
│ │ │ └── .DS_Store
│ │ └── View
│ │ │ ├── .DS_Store
│ │ │ ├── ELCustomLoadingAnimationView.h
│ │ │ ├── ELCustomLoadingAnimationView.m
│ │ │ ├── ELCustomNoNetworkEmptyView.h
│ │ │ ├── ELCustomNoNetworkEmptyView.m
│ │ │ ├── ELRefreshFooter.h
│ │ │ └── ELRefreshFooter.m
│ │ ├── Resource
│ │ └── .DS_Store
│ │ ├── Tool
│ │ ├── .DS_Store
│ │ ├── ELCommonAPIConstant.h
│ │ ├── ELCommonAPIConstant.m
│ │ ├── ELCommonConstant.h
│ │ ├── ELCommonConstant.m
│ │ ├── ELDefaultHeader.h
│ │ ├── ELFileCacheManager.h
│ │ ├── ELFileCacheManager.m
│ │ ├── ELRequestManager.h
│ │ ├── ELRequestManager.m
│ │ ├── ELUserInfoManager.h
│ │ ├── ELUserInfoManager.m
│ │ ├── ELUtils.h
│ │ ├── ELUtils.m
│ │ ├── NSFileManager+Paths.h
│ │ └── NSFileManager+Paths.m
│ │ └── Vendor
│ │ ├── .DS_Store
│ │ ├── AFNetworking
│ │ ├── AFHTTPSessionManager.h
│ │ ├── AFHTTPSessionManager.m
│ │ ├── AFNetworkReachabilityManager.h
│ │ ├── AFNetworkReachabilityManager.m
│ │ ├── AFNetworking.h
│ │ ├── AFSecurityPolicy.h
│ │ ├── AFSecurityPolicy.m
│ │ ├── AFURLRequestSerialization.h
│ │ ├── AFURLRequestSerialization.m
│ │ ├── AFURLResponseSerialization.h
│ │ ├── AFURLResponseSerialization.m
│ │ ├── AFURLSessionManager.h
│ │ └── AFURLSessionManager.m
│ │ ├── MBProgressHUD
│ │ ├── .DS_Store
│ │ ├── MBProgressHUD.h
│ │ └── MBProgressHUD.m
│ │ ├── MJExtension
│ │ ├── Info.plist
│ │ ├── MJExtension.h
│ │ ├── MJExtensionConst.h
│ │ ├── MJExtensionConst.m
│ │ ├── MJFoundation.h
│ │ ├── MJFoundation.m
│ │ ├── MJProperty.h
│ │ ├── MJProperty.m
│ │ ├── MJPropertyKey.h
│ │ ├── MJPropertyKey.m
│ │ ├── MJPropertyType.h
│ │ ├── MJPropertyType.m
│ │ ├── NSObject+MJClass.h
│ │ ├── NSObject+MJClass.m
│ │ ├── NSObject+MJCoding.h
│ │ ├── NSObject+MJCoding.m
│ │ ├── NSObject+MJKeyValue.h
│ │ ├── NSObject+MJKeyValue.m
│ │ ├── NSObject+MJProperty.h
│ │ ├── NSObject+MJProperty.m
│ │ ├── NSString+MJExtension.h
│ │ └── NSString+MJExtension.m
│ │ ├── 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
│ │ │ │ ├── en.lproj
│ │ │ │ │ └── Localizable.strings
│ │ │ │ ├── zh-Hans.lproj
│ │ │ │ │ └── Localizable.strings
│ │ │ │ └── zh-Hant.lproj
│ │ │ │ │ └── Localizable.strings
│ │ │ ├── MJRefresh.h
│ │ │ ├── MJRefreshConst.h
│ │ │ ├── MJRefreshConst.m
│ │ │ ├── NSBundle+MJRefresh.h
│ │ │ ├── NSBundle+MJRefresh.m
│ │ │ ├── UIScrollView+MJExtension.h
│ │ │ ├── UIScrollView+MJExtension.m
│ │ │ ├── UIScrollView+MJRefresh.h
│ │ │ ├── UIScrollView+MJRefresh.m
│ │ │ ├── UIView+MJExtension.h
│ │ │ └── UIView+MJExtension.m
│ │ └── README.md
│ │ ├── 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
│ │ ├── SDWebImage
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── SDWebImage
│ │ │ ├── NSData+ImageContentType.h
│ │ │ ├── NSData+ImageContentType.m
│ │ │ ├── SDImageCache.h
│ │ │ ├── SDImageCache.m
│ │ │ ├── SDWebImageCompat.h
│ │ │ ├── SDWebImageCompat.m
│ │ │ ├── SDWebImageDecoder.h
│ │ │ ├── SDWebImageDecoder.m
│ │ │ ├── SDWebImageDownloader.h
│ │ │ ├── SDWebImageDownloader.m
│ │ │ ├── SDWebImageDownloaderOperation.h
│ │ │ ├── SDWebImageDownloaderOperation.m
│ │ │ ├── SDWebImageManager.h
│ │ │ ├── SDWebImageManager.m
│ │ │ ├── SDWebImageOperation.h
│ │ │ ├── SDWebImagePrefetcher.h
│ │ │ ├── SDWebImagePrefetcher.m
│ │ │ ├── UIButton+WebCache.h
│ │ │ ├── UIButton+WebCache.m
│ │ │ ├── UIImage+GIF.h
│ │ │ ├── UIImage+GIF.m
│ │ │ ├── UIImage+MultiFormat.h
│ │ │ ├── UIImage+MultiFormat.m
│ │ │ ├── UIImageView+HighlightedWebCache.h
│ │ │ ├── UIImageView+HighlightedWebCache.m
│ │ │ ├── UIImageView+WebCache.h
│ │ │ ├── UIImageView+WebCache.m
│ │ │ ├── UIView+WebCacheOperation.h
│ │ │ └── UIView+WebCacheOperation.m
│ │ ├── YYCache
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── YYCache
│ │ │ ├── YYCache.h
│ │ │ ├── YYCache.m
│ │ │ ├── YYDiskCache.h
│ │ │ ├── YYDiskCache.m
│ │ │ ├── YYKVStorage.h
│ │ │ ├── YYKVStorage.m
│ │ │ ├── YYMemoryCache.h
│ │ │ └── YYMemoryCache.m
│ │ ├── YYImage
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── YYImage
│ │ │ ├── YYAnimatedImageView.h
│ │ │ ├── YYAnimatedImageView.m
│ │ │ ├── YYFrameImage.h
│ │ │ ├── YYFrameImage.m
│ │ │ ├── YYImage.h
│ │ │ ├── YYImage.m
│ │ │ ├── YYImageCoder.h
│ │ │ ├── YYImageCoder.m
│ │ │ ├── YYSpriteSheetImage.h
│ │ │ └── YYSpriteSheetImage.m
│ │ ├── YYText
│ │ ├── LICENSE
│ │ └── README.md
│ │ └── YYWebImage
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── YYWebImage
│ │ ├── Categories
│ │ ├── CALayer+YYWebImage.h
│ │ ├── CALayer+YYWebImage.m
│ │ ├── MKAnnotationView+YYWebImage.h
│ │ ├── MKAnnotationView+YYWebImage.m
│ │ ├── UIButton+YYWebImage.h
│ │ ├── UIButton+YYWebImage.m
│ │ ├── UIImage+YYWebImage.h
│ │ ├── UIImage+YYWebImage.m
│ │ ├── UIImageView+YYWebImage.h
│ │ ├── UIImageView+YYWebImage.m
│ │ ├── _YYWebImageSetter.h
│ │ └── _YYWebImageSetter.m
│ │ ├── YYImageCache.h
│ │ ├── YYImageCache.m
│ │ ├── YYWebImage.h
│ │ ├── YYWebImageManager.h
│ │ ├── YYWebImageManager.m
│ │ ├── YYWebImageOperation.h
│ │ └── YYWebImageOperation.m
├── ELPrefixHeader.pch
├── Info.plist
└── main.m
├── EasyLifeTests
├── EasyLifeTests.m
└── Info.plist
├── EasyLifeUITests
├── EasyLifeUITests.m
└── Info.plist
├── README.md
└── autobuild.py
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/.DS_Store
--------------------------------------------------------------------------------
/EasyLife.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/EasyLife.xcodeproj/project.xcworkspace/xcuserdata/Sekorm.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife.xcodeproj/project.xcworkspace/xcuserdata/Sekorm.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/EasyLife.xcodeproj/xcuserdata/Sekorm.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
14 |
15 |
16 |
18 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/EasyLife.xcodeproj/xcuserdata/Sekorm.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | EasyLife.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | B493E1971D9CA7BF0046C81A
16 |
17 | primary
18 |
19 |
20 | B493E1B01D9CA7BF0046C81A
21 |
22 | primary
23 |
24 |
25 | B493E1BB1D9CA7BF0046C81A
26 |
27 | primary
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/EasyLife/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/9/29.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow *window;
14 |
15 |
16 | @end
17 |
18 |
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | }
43 | ],
44 | "info" : {
45 | "version" : 1,
46 | "author" : "xcode"
47 | }
48 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_0.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_0.imageset/refreshjoke_loading@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_0.imageset/refreshjoke_loading@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_0.imageset/refreshjoke_loading@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_0.imageset/refreshjoke_loading@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_1@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_1@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_1.imageset/refreshjoke_loading_1@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_1.imageset/refreshjoke_loading_1@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_1.imageset/refreshjoke_loading_1@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_1.imageset/refreshjoke_loading_1@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_10.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_10@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_10@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_10.imageset/refreshjoke_loading_10@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_10.imageset/refreshjoke_loading_10@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_10.imageset/refreshjoke_loading_10@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_10.imageset/refreshjoke_loading_10@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_11.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_11@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_11@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_11.imageset/refreshjoke_loading_11@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_11.imageset/refreshjoke_loading_11@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_11.imageset/refreshjoke_loading_11@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_11.imageset/refreshjoke_loading_11@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_12.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_12@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_12@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_12.imageset/refreshjoke_loading_12@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_12.imageset/refreshjoke_loading_12@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_12.imageset/refreshjoke_loading_12@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_12.imageset/refreshjoke_loading_12@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_13.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_13@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_13@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_13.imageset/refreshjoke_loading_13@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_13.imageset/refreshjoke_loading_13@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_13.imageset/refreshjoke_loading_13@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_13.imageset/refreshjoke_loading_13@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_14.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_14@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_14@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_14.imageset/refreshjoke_loading_14@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_14.imageset/refreshjoke_loading_14@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_14.imageset/refreshjoke_loading_14@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_14.imageset/refreshjoke_loading_14@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_15.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_15@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_15@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_15.imageset/refreshjoke_loading_15@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_15.imageset/refreshjoke_loading_15@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_15.imageset/refreshjoke_loading_15@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_15.imageset/refreshjoke_loading_15@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_16.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_16@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_16@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_16.imageset/refreshjoke_loading_16@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_16.imageset/refreshjoke_loading_16@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_16.imageset/refreshjoke_loading_16@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_16.imageset/refreshjoke_loading_16@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_2@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_2@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_2.imageset/refreshjoke_loading_2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_2.imageset/refreshjoke_loading_2@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_2.imageset/refreshjoke_loading_2@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_2.imageset/refreshjoke_loading_2@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_3@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_3@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_3.imageset/refreshjoke_loading_3@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_3.imageset/refreshjoke_loading_3@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_3.imageset/refreshjoke_loading_3@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_3.imageset/refreshjoke_loading_3@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_4@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_4@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_4.imageset/refreshjoke_loading_4@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_4.imageset/refreshjoke_loading_4@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_4.imageset/refreshjoke_loading_4@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_4.imageset/refreshjoke_loading_4@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_5@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_5@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_5.imageset/refreshjoke_loading_5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_5.imageset/refreshjoke_loading_5@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_5.imageset/refreshjoke_loading_5@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_5.imageset/refreshjoke_loading_5@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_6@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_6@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_6.imageset/refreshjoke_loading_6@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_6.imageset/refreshjoke_loading_6@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_6.imageset/refreshjoke_loading_6@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_6.imageset/refreshjoke_loading_6@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_7.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_7@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_7@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_7.imageset/refreshjoke_loading_7@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_7.imageset/refreshjoke_loading_7@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_7.imageset/refreshjoke_loading_7@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_7.imageset/refreshjoke_loading_7@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_8-1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_8@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_8@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_8-1.imageset/refreshjoke_loading_8@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_8-1.imageset/refreshjoke_loading_8@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_8-1.imageset/refreshjoke_loading_8@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_8-1.imageset/refreshjoke_loading_8@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_8.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_8@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_8@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_8.imageset/refreshjoke_loading_8@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_8.imageset/refreshjoke_loading_8@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_8.imageset/refreshjoke_loading_8@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_8.imageset/refreshjoke_loading_8@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_9-1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_9@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_9@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_9-1.imageset/refreshjoke_loading_9@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_9-1.imageset/refreshjoke_loading_9@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_9-1.imageset/refreshjoke_loading_9@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_9-1.imageset/refreshjoke_loading_9@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_9.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "refreshjoke_loading_9@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "refreshjoke_loading_9@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_9.imageset/refreshjoke_loading_9@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_9.imageset/refreshjoke_loading_9@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_9.imageset/refreshjoke_loading_9@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Loading/refreshjoke_loading_9.imageset/refreshjoke_loading_9@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/LOL.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LOL.png",
6 | "scale" : "1x"
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 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/LOL.imageset/LOL.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/LOL.imageset/LOL.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/Setting.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Setting@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "Setting@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/Setting.imageset/Setting@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/Setting.imageset/Setting@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/Setting.imageset/Setting@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/Setting.imageset/Setting@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/avatar_placeholder.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "avatar_placeholder@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "avatar_placeholder@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/avatar_placeholder.imageset/avatar_placeholder@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/avatar_placeholder.imageset/avatar_placeholder@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/avatar_placeholder.imageset/avatar_placeholder@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/avatar_placeholder.imageset/avatar_placeholder@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/backgroundImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "backgroundImage.png",
6 | "scale" : "1x"
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 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/backgroundImage.imageset/backgroundImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/backgroundImage.imageset/backgroundImage.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/lion.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "lion.png",
6 | "scale" : "1x"
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 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/lion.imageset/lion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/lion.imageset/lion.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myActivity_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "activity_icon@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "activity_icon@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myActivity_icon.imageset/activity_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/myActivity_icon.imageset/activity_icon@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myActivity_icon.imageset/activity_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/myActivity_icon.imageset/activity_icon@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myAnswer_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "answer_icon@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "answer_icon@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myAnswer_icon.imageset/answer_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/myAnswer_icon.imageset/answer_icon@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myAnswer_icon.imageset/answer_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/myAnswer_icon.imageset/answer_icon@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myQuestion_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "question_icon@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "question_icon@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myQuestion_icon.imageset/question_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/myQuestion_icon.imageset/question_icon@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myQuestion_icon.imageset/question_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/myQuestion_icon.imageset/question_icon@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myVip_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "vip_icon@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "vip_icon@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myVip_icon.imageset/vip_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/myVip_icon.imageset/vip_icon@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myVip_icon.imageset/vip_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/myVip_icon.imageset/vip_icon@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myWallets_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "inquiry_icon@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "inquiry_icon@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myWallets_icon.imageset/inquiry_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/myWallets_icon.imageset/inquiry_icon@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/myWallets_icon.imageset/inquiry_icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/myWallets_icon.imageset/inquiry_icon@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/user_vip_crown.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "user_vip_crown@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "user_vip_crown@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/user_vip_crown.imageset/user_vip_crown@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/user_vip_crown.imageset/user_vip_crown@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Me/user_vip_crown.imageset/user_vip_crown@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Me/user_vip_crown.imageset/user_vip_crown@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/Found.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Found@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "Found@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/Found.imageset/Found@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/Found.imageset/Found@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/Found.imageset/Found@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/Found.imageset/Found@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/Found_press.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Found_press@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "Found_press@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/Found_press.imageset/Found_press@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/Found_press.imageset/Found_press@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/Found_press.imageset/Found_press@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/Found_press.imageset/Found_press@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/audit.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "audit@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "audit@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/audit.imageset/audit@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/audit.imageset/audit@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/audit.imageset/audit@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/audit.imageset/audit@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/audit_press.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "audit_press@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "audit_press@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/audit_press.imageset/audit_press@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/audit_press.imageset/audit_press@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/audit_press.imageset/audit_press@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/audit_press.imageset/audit_press@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/home.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "home@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "home@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/home.imageset/home@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/home.imageset/home@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/home.imageset/home@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/home.imageset/home@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/home_press.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "home_press@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "home_press@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/home_press.imageset/home_press@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/home_press.imageset/home_press@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/home_press.imageset/home_press@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/home_press.imageset/home_press@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/newstab.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "newstab@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "newstab@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/newstab.imageset/newstab@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/newstab.imageset/newstab@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/newstab.imageset/newstab@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/newstab.imageset/newstab@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/newstab_press.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "newstab_press@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "newstab_press@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/newstab_press.imageset/newstab_press@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/newstab_press.imageset/newstab_press@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/Tab/newstab_press.imageset/newstab_press@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/Tab/newstab_press.imageset/newstab_press@3x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/back_neihan.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "back_neihan@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "back_neihan@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/back_neihan.imageset/back_neihan@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/back_neihan.imageset/back_neihan@2x.png
--------------------------------------------------------------------------------
/EasyLife/Assets.xcassets/back_neihan.imageset/back_neihan@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Assets.xcassets/back_neihan.imageset/back_neihan@3x.png
--------------------------------------------------------------------------------
/EasyLife/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/EasyLife/Classes/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Application/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Application/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Base/Controller/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Base/Controller/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Base/Controller/ELBaseNavigationViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELBaseNavigationViewController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ELBaseNavigationViewController : UINavigationController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Base/Controller/ELBaseViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELBaseViewController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 | typedef void(^ELBaseViewControllerHandle)();
11 | @interface ELBaseViewController : UIViewController
12 | - (void)pop;
13 |
14 | - (void)popToRootVc;
15 |
16 | - (void)popToVc:(UIViewController *)vc;
17 |
18 | - (void)dismiss;
19 |
20 | - (void)dismissWithCompletion:(void(^)())completion;
21 |
22 | - (void)presentVc:(UIViewController *)vc;
23 |
24 | - (void)presentVc:(UIViewController *)vc completion:(void (^)(void))completion;
25 |
26 | - (void)pushVc:(UIViewController *)vc;
27 |
28 | - (void)removeChildVc:(UIViewController *)childVc;
29 |
30 | - (void)addChildVc:(UIViewController *)childVc;
31 |
32 | /** 加载中*/
33 | - (void)showLoadingAnimation;
34 |
35 | /** 停止加载*/
36 | - (void)hideLoadingAnimation;
37 |
38 | /** 请求数据,交给子类去实现*/
39 | - (void)loadData;
40 |
41 | @property (nonatomic, assign) BOOL isNetworkReachable;
42 | @end
43 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Base/Model/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Base/Model/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Base/Model/ELBaseModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELBaseModel.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ELBaseModel : NSObject
12 | //#pragma mark - 缓存
13 | /**
14 | * 归档 - 存入模型
15 | */
16 | - (void)archive;
17 |
18 | /**
19 | * 解档 - 取出模型
20 | */
21 | - (id)unarchiver;
22 |
23 | /**
24 | * 移除缓存中的模型
25 | */
26 | - (void)remove;
27 |
28 | /**
29 | * 字典数组转模型数组
30 | */
31 | + (NSMutableArray *)modelArrayWithDictArray:(NSArray *)response;
32 |
33 | /**
34 | * 字典转模型
35 | */
36 | + (instancetype)modelWithDictionary:(NSDictionary *)dictionary;
37 |
38 | /**
39 | * 模型包含模型数组
40 | */
41 | + (void)setUpModelClassInArrayWithContainDict:(NSDictionary *)dict;
42 |
43 | /**
44 | * 字典数组转模型数组
45 | * @param dict 模型包含模型数组 格式为 key-字段名字 value-[被包含的类名]
46 | */
47 | + (NSMutableArray *)modelArrayWithDictArray:(NSArray *)response containDict:(NSDictionary *)dict;
48 |
49 |
50 | @end
51 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Base/Model/ELUserInfoModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELEasyLifeUserInfoModel.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/2.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import "ELBaseModel.h"
10 |
11 | @interface ELUserInfoModel : ELBaseModel
12 | @property (nonatomic, assign) NSInteger user_id;
13 | @property (nonatomic, assign) NSInteger create_time;
14 | @property (nonatomic, assign) NSInteger repin_count;
15 | @property (nonatomic, assign) NSInteger new_followers;
16 | @property (nonatomic, assign) BOOL user_verified;
17 | @property (nonatomic, assign) NSInteger notification_count;
18 | @property (nonatomic, copy) NSString *name;
19 | @property (nonatomic, assign) NSInteger point;
20 | @property (nonatomic, assign) NSInteger ugc_count;
21 | @property (nonatomic, copy) NSString *avatar_url;
22 | @property (nonatomic, copy) NSString *large_avatar_url;
23 | @property (nonatomic, assign) NSInteger subscribe_count;
24 | @property (nonatomic, assign) NSInteger followers;
25 | @property (nonatomic, assign) NSInteger gender;
26 | @property (nonatomic, assign) NSInteger id;
27 | @property (nonatomic, copy) NSString *screen_name;
28 | @property (nonatomic, assign) NSInteger followings;
29 | @property (nonatomic, assign) BOOL is_following;
30 | @property (nonatomic, assign) NSInteger comment_count;
31 | @property (nonatomic, copy) NSString *desc;
32 | @end
33 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Base/Model/ELUserInfoModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // NHEasyLifeUserInfoModel.m
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/2.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import "ELUserInfoModel.h"
10 |
11 | @implementation ELUserInfoModel
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Base/Request/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Base/Request/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Base/Request/ELBaseRequest.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELBaseRequest.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/8/30.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @protocol ELBaseRequestReponseDelegate
12 | @required
13 | /** 如果不用block返回数据的话,这个方法必须实现*/
14 | - (void)requestSuccessReponse:(BOOL)success response:(id)response message:(NSString *)message;
15 | @end
16 |
17 | typedef void(^ELAPIDicCompletion)(id response, BOOL success, NSString *message);
18 | @interface ELBaseRequest : NSObject
19 |
20 | @property (nonatomic, weak) id el_delegate;
21 | /** 链接*/
22 | @property (nonatomic, copy) NSString *el_url;
23 | /** 默认GET*/
24 | @property (nonatomic, assign) BOOL el_isPost;
25 | /** 图片数组*/
26 | @property (nonatomic, strong) NSArray *el_imageArray;
27 |
28 | /** 构造方法*/
29 | + (instancetype)el_request;
30 | + (instancetype)el_requestWithUrl:(NSString *)el_url;
31 | + (instancetype)el_requestWithUrl:(NSString *)el_url isPost:(BOOL)el_isPost;
32 | + (instancetype)el_requestWithUrl:(NSString *)el_url isPost:(BOOL)el_isPost delegate:(id )el_delegate;
33 |
34 | /** 开始请求,如果设置了代理,不需要block回调*/
35 | - (void)el_sendRequest;
36 | /** 开始请求,没有设置代理,或者设置了代理,需要block回调,block回调优先级高于代理*/
37 | - (void)el_sendRequestWithCompletion:(ELAPIDicCompletion)completion;
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Base/View/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Base/View/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Home/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Home/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Home/Controller/ELHomeViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELHomeViewController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseViewController.h"
10 |
11 | @interface ELHomeViewController : ELBaseViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Home/Controller/ELHomeViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ELHomeViewController.m
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELHomeViewController.h"
10 | #import "ELJokerController.h"
11 |
12 | @interface ELHomeViewController ()
13 |
14 | @end
15 |
16 | @implementation ELHomeViewController
17 |
18 | - (void)viewDidLoad {
19 | [super viewDidLoad];
20 | self.view.backgroundColor = [UIColor whiteColor];
21 | self.navigationItem.title = @"首页";
22 |
23 | UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
24 | [btn setTitle:@"开心一笑" forState:UIControlStateNormal];
25 | [btn setTitleColor:kCommonGrayTextColor forState:UIControlStateNormal];
26 | [btn sizeToFit];
27 | [self.view addSubview:btn];
28 | btn.center = self.view.center;
29 | [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
30 | }
31 |
32 | - (void)btnClick{
33 |
34 | ELJokerController * jokerVC = [[ELJokerController alloc]init];
35 | jokerVC.hidesBottomBarWhenPushed = YES;
36 | [self.navigationController pushViewController:jokerVC animated:YES];
37 | }
38 |
39 |
40 |
41 | @end
42 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Home/Controller/ELJokerController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELJokerController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/9.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseViewController.h"
10 |
11 | @interface ELJokerController : ELBaseViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Home/Model/ELJokerModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELJokerModel.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/9.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseModel.h"
10 |
11 | #define kContentBgLeftAndRightSpace kLeftMargin * kScreenWidthRatio
12 | #define kContentBgTopAndBottomSpace kLeftMargin * kScreenWidthRatio * 0.6
13 | #define kInsetMargin 10 * kScreenWidthRatio
14 | #define kImageViewHeight 250 * kScreenWidthRatio
15 | #define kLineSpace 6 * kScreenWidthRatio
16 | @interface ELJokerModel : ELBaseModel
17 | @property (nonatomic,copy) NSString * content;
18 | @property (nonatomic,copy) NSString * hashId;
19 | @property (nonatomic,copy) NSString * unixtime;
20 | @property (nonatomic,copy) NSString * updatetime;
21 | @property (nonatomic,copy) NSString * url;
22 | @property (nonatomic,assign) CGFloat rowHeight;
23 | @end
24 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Home/Model/ELJokerModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // ELJokerModel.m
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/9.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELJokerModel.h"
10 |
11 | @implementation ELJokerModel
12 |
13 | - (void)setContent:(NSString *)content{
14 |
15 | _content = content;
16 |
17 | CGFloat maxWidth = kScreenWidth - 2 * kContentBgLeftAndRightSpace - 2 * kInsetMargin;
18 |
19 | NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
20 | [paragraphStyle setLineSpacing:kLineSpace];
21 | [paragraphStyle setLineBreakMode:NSLineBreakByCharWrapping];
22 | CGRect titleRect = [_content boundingRectWithSize:CGSizeMake(maxWidth, CGFLOAT_MAX)
23 | options:NSStringDrawingUsesLineFragmentOrigin
24 | attributes:@{NSFontAttributeName:kFont(18),
25 | NSParagraphStyleAttributeName:paragraphStyle}
26 | context:nil];
27 | _rowHeight += titleRect.size.height + kInsetMargin + 2 * kContentBgTopAndBottomSpace;
28 | }
29 |
30 | - (void)setUpdatetime:(NSString *)updatetime{
31 |
32 | _updatetime = updatetime;
33 |
34 | CGRect timeRect = [_content boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)
35 | options:NSStringDrawingUsesLineFragmentOrigin
36 | attributes:@{NSFontAttributeName:kFont(15)}
37 | context:nil];
38 | _rowHeight += timeRect.size.height + kInsetMargin ;
39 | }
40 |
41 |
42 | - (void)setUrl:(NSString *)url{
43 | _url = url;
44 | if (url.length > 0) {
45 | _rowHeight += kImageViewHeight + kInsetMargin;
46 | }
47 | }
48 | @end
49 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Home/View/ELJokerCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELJokerCell.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/9.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class ELJokerModel;
12 | @interface ELJokerCell : UITableViewCell
13 | @property (nonatomic,strong) ELJokerModel * jokerModel;
14 | @end
15 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Life/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Life/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Life/Controller/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Life/Controller/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Life/Controller/ELDriverLicenseViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELDriverLicenseViewController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 2017/2/27.
6 | // Copyright © 2017年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseViewController.h"
10 |
11 | @interface ELDriverLicenseViewController : ELBaseViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Life/Controller/ELLifeViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELLifeViewController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseViewController.h"
10 |
11 | @interface ELLifeViewController : ELBaseViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Life/Controller/ELLifeViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ELLifeViewController.m
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 | // http://live.ximalaya.com/live-web/v4/homepage?device=iPhone FM接口
9 |
10 | #import "ELLifeViewController.h"
11 | #import "ELJokerController.h"
12 | #import "ELHoroscopeView.h"
13 | #import "ELHoroscopeModel.h"
14 | #import "ELBaseRequest.h"
15 | #import "NSString+URL.h"
16 |
17 | static const NSString * kJHoroscopeAppKey = @"f0b6f98f5224c5d4f31adc7a07dec884";
18 | @interface ELLifeViewController ()
19 | @property (nonatomic,strong) ELHoroscopeView * horoscopeView;
20 | @property (nonatomic,strong) ELBaseRequest * request;
21 | @property (nonatomic,strong) UITableView *tableView;
22 | @end
23 |
24 | @implementation ELLifeViewController
25 |
26 | - (void)viewDidLoad {
27 | [super viewDidLoad];
28 | self.view.backgroundColor = [UIColor whiteColor];
29 | self.navigationItem.title = @"生活";
30 |
31 | UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
32 | [btn setTitle:@"星座运势" forState:UIControlStateNormal];
33 | [btn setTitleColor:kCommonGrayTextColor forState:UIControlStateNormal];
34 | [btn sizeToFit];
35 | [self.view addSubview:btn];
36 | btn.center = self.view.center;
37 | [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
38 |
39 | self.request = [ELBaseRequest el_request];
40 | NSString * urlStr = [NSString stringWithFormat:@"%@?consName=%@&type=%@&key=%@",kELHoroscopeAPI,[@"天秤座" urlEncodedString],@"today",kJHoroscopeAppKey];
41 |
42 | self.request.el_url = urlStr;
43 | NSLog(@"%@",self.request.el_url);
44 | [self.request el_sendRequestWithCompletion:^(id response, BOOL success, NSString *message) {
45 | NSLog(@"%@",response);
46 | }];
47 | }
48 |
49 | - (void)btnClick{
50 |
51 | ELJokerController * jokerVC = [[ELJokerController alloc]init];
52 | jokerVC.hidesBottomBarWhenPushed = YES;
53 | [self.navigationController pushViewController:jokerVC animated:YES];
54 | }
55 |
56 | @end
57 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Life/Model/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Life/Model/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Life/Model/ELHoroscopeModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELHoroscopeModel.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/11.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseModel.h"
10 |
11 | typedef enum : NSUInteger {
12 | ELHoroscopeDayLeavel,
13 | ELHoroscopeWeekLeavel,
14 | ELHoroscopeMonthLeavel,
15 | ELHoroscopeYearLeavel
16 | } ELHoroscopeLeavel;
17 |
18 | @interface ELHoroscopeModel : ELBaseModel
19 |
20 | @property (nonatomic,assign) ELHoroscopeLeavel horoscopeLeavel;
21 |
22 |
23 | #pragma mark - day leavel
24 | @property (nonatomic,copy) NSString * date;
25 | @property (nonatomic,copy) NSString * name;
26 | @property (nonatomic,copy) NSString * datetime;
27 | @property (nonatomic,copy) NSString * all;
28 | @property (nonatomic,copy) NSString * color;
29 | @property (nonatomic,copy) NSString * health;
30 | @property (nonatomic,copy) NSString * love;
31 | @property (nonatomic,copy) NSString * money;
32 | @property (nonatomic,copy) NSString * number;
33 | @property (nonatomic,copy) NSString * QFriend;
34 | @property (nonatomic,copy) NSString * summary;
35 | @property (nonatomic,copy) NSString * work;
36 |
37 | #pragma mark - week leavel
38 | @property (nonatomic,copy) NSString * job;
39 | @property (nonatomic,copy) NSString * weekth;
40 | #pragma mark - month leavel
41 | @property (nonatomic,copy) NSString * month;
42 | #pragma mark - year leavel
43 | @property (nonatomic,strong) NSDictionary * mima;
44 | @property (nonatomic,copy) NSString * career;
45 | @property (nonatomic,copy) NSString * finance;
46 | @property (nonatomic,copy) NSString * luckyStone;
47 | @property (nonatomic,copy) NSString * year;
48 | @end
49 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Life/Model/ELHoroscopeModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // ELHoroscopeModel.m
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/11.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELHoroscopeModel.h"
10 | @implementation ELHoroscopeModel
11 |
12 | - (void)setWeekth:(NSString *)weekth{
13 | _weekth = weekth;
14 | self.horoscopeLeavel = ELHoroscopeWeekLeavel;
15 | }
16 |
17 | - (void)setMonth:(NSString *)month{
18 | _month = month;
19 | self.horoscopeLeavel = ELHoroscopeMonthLeavel;
20 | }
21 |
22 | - (void)setYear:(NSString *)year{
23 | _year = year;
24 | self.horoscopeLeavel = ELHoroscopeYearLeavel;
25 | }
26 |
27 | @end
28 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Life/View/ELHoroscopeView.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELHoroscopeView.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/11.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class ELHoroscopeModel;
12 | @interface ELHoroscopeView : UIView
13 |
14 | @property (nonatomic,strong) ELHoroscopeModel * horoscopeModel;
15 | @end
16 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Main/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Main/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Main/Controller/ELTabBarController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELTabBarController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ELTabBarController : UITabBarController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Me/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Me/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Me/Me/Controller/ELMeViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELMeViewController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ELMeViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Me/Me/View/ELUserInfoHeaderView.h:
--------------------------------------------------------------------------------
1 | //
2 | // SKUserInfoHeaderView.h
3 | // Sinfo
4 | //
5 | // Created by Sekorm on 16/4/8.
6 | // Copyright © 2016年 yeliang. All rights reserved.
7 | //
8 |
9 |
10 | #import
11 |
12 | #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
13 | #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
14 | #define SCREEN_WIDTH_RATIO (SCREEN_WIDTH / 320)
15 | #define kHeaderViewHeight 210 * SCREEN_WIDTH_RATIO
16 | @interface ELUserInfoHeaderView : UIView
17 |
18 | @property (nonatomic,assign) BOOL updateUserInfo;
19 |
20 | @property (nonatomic,copy) void(^checkUserInfomationBlock)();
21 |
22 | - (void)alphaWithHeight:(CGFloat)height orignHeight:(CGFloat)orignHeight;
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Me/Setting/Controller/ELSettingViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // HYHomeViewController.h
3 | // HYLive
4 | //
5 | // Created by Sekorm on 2017/3/23.
6 | // Copyright © 2017年 YL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ELSettingViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/News/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/News/Controller/ELNewsViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELNewsViewController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseViewController.h"
10 |
11 | @interface ELNewsViewController : ELBaseViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/Controller/ELTodayHotNewsChildController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELTodayHotNewsChildController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/9.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseViewController.h"
10 |
11 | //类型,,top(头条,默认),shehui(社会),guonei(国内),guoji(国际),yule(娱乐),tiyu(体育)junshi(军事),keji(科技),caijing(财经),shishang(时尚)
12 | @interface ELTodayHotNewsChildController : ELBaseViewController
13 | @property (nonatomic,copy) NSString * newsType;
14 | @end
15 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/Controller/ELTodayHotNewsController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELTodayHotNewsController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/9.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseViewController.h"
10 |
11 | @interface ELTodayHotNewsController : ELBaseViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/Controller/ELWeiXinNewsDetailController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELWeiXinNewsDetailController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseViewController.h"
10 |
11 | @interface ELWeiXinNewsDetailController : ELBaseViewController
12 | @property (nonatomic,copy) NSString * linkUrl;
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/Controller/ELWeiXinNewsDetailController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ELWeiXinNewsDetailController.m
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELWeiXinNewsDetailController.h"
10 | #import
11 |
12 | @interface ELWeiXinNewsDetailController ()
13 | @property (nonatomic,strong) WKWebView * webView;
14 | @end
15 |
16 | @implementation ELWeiXinNewsDetailController
17 |
18 | - (void)viewDidLoad{
19 |
20 | [super viewDidLoad];
21 | [self showLoadingAnimation];
22 | self.webView = [[WKWebView alloc]initWithFrame:CGRectMake(0,
23 | 0,
24 | kScreenWidth,
25 | kScreenHeight - kNavigationBarHeight - kStatusBarHeight)];
26 | self.webView.navigationDelegate = self;
27 | [self.view addSubview:self.webView];
28 | [self loadUrl];
29 |
30 | }
31 | //请求加载网页
32 | - (void)loadUrl{
33 |
34 | NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:self.linkUrl]
35 | cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
36 | timeoutInterval:10];
37 |
38 | [self.webView loadRequest:request];
39 | }
40 |
41 | - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{
42 | [self hideLoadingAnimation];
43 | }
44 |
45 | - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error{
46 | [MBProgressHUD showMessage:error.domain];
47 | }
48 | @end
49 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/Controller/ELWeiXinNewsListController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELWeiXinNewsListController.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/9.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseViewController.h"
10 |
11 | @interface ELWeiXinNewsListController : ELBaseViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/Model/ELTodayHotNewsChildModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELTodayHotNewsChildModel.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/9.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseModel.h"
10 | //"title":"为你写好了“草莓鼻”攻略大全 忍心不看吗",
11 | //"date":"2016-10-09 10:47",
12 | //"category":"时尚",
13 | //"author_name":"北方网",
14 | //"thumbnail_pic_s":"http:\/\/03.imgmini.eastday.com\/mobile\/20161009\/20161009104712_f61510609082120d51641dc79abe7d16_1_mwpm_03200403.jpeg",
15 | //"url":"http:\/\/mini.eastday.com\/mobile\/161009104712902.html?qid=juheshuju",
16 | //"thumbnail_pic_s03":"http:\/\/03.imgmini.eastday.com\/mobile\/20161009\/20161009104712_f61510609082120d51641dc79abe7d16_1_mwpl_05500201.jpeg"
17 | @interface ELTodayHotNewsChildModel : ELBaseModel
18 | @property (nonatomic,copy) NSString * title;
19 | @property (nonatomic,copy) NSString * date;
20 | @property (nonatomic,copy) NSString * category;
21 | @property (nonatomic,copy) NSString * author_name;
22 | @property (nonatomic,copy) NSString * thumbnail_pic_s;
23 | @property (nonatomic,copy) NSString * url;
24 | @property (nonatomic,copy) NSString * thumbnail_pic_s03;
25 | @end
26 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/Model/ELTodayHotNewsChildModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // ELTodayHotNewsChildModel.m
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/9.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELTodayHotNewsChildModel.h"
10 |
11 | @implementation ELTodayHotNewsChildModel
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/Model/ELWeiXinNewsModel.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELWeiXinNewsModel.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELBaseModel.h"
10 |
11 | @interface ELWeiXinNewsModel :ELBaseModel
12 | @property (nonatomic,copy) NSString * firstImg;
13 | @property (nonatomic,copy) NSString * ID;
14 | @property (nonatomic,copy) NSString * source;
15 | @property (nonatomic,copy) NSString * title;
16 | @property (nonatomic,copy) NSString * url;
17 | @property (nonatomic,copy) NSString * mark;
18 | @end
19 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/Model/ELWeiXinNewsModel.m:
--------------------------------------------------------------------------------
1 | //
2 | // ELWeiXinNewsModel.m
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELWeiXinNewsModel.h"
10 |
11 | @implementation ELWeiXinNewsModel
12 |
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/View/ELTodayHotNewsChildCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELTodayHotNewsChildCell.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/9.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class ELTodayHotNewsChildModel;
12 | @interface ELTodayHotNewsChildCell : UITableViewCell
13 | @property (nonatomic,strong) ELTodayHotNewsChildModel * newsModel;
14 | @end
15 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/View/ELWeiXinNewsListCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELWeiXinNewsListCell.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class ELWeiXinNewsModel;
12 |
13 | @interface ELWeiXinNewsListCell : UITableViewCell
14 |
15 | @property (nonatomic,strong) ELWeiXinNewsModel * newsModel;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/View/HYTabbarCollectionCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // HYTabbarCollectionCell.h
3 | // 标签栏视图
4 | //
5 | // Created by Sekorm on 16/9/6.
6 | // Copyright © 2016年 HY. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface HYTabbarCollectionCell : UICollectionViewCell
12 | @property (nonatomic,strong) UIViewController * subVc;
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/View/HYTabbarCollectionCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // HYTabbarCollectionCell.m
3 | // 标签栏视图
4 | //
5 | // Created by Sekorm on 16/9/6.
6 | // Copyright © 2016年 HY. All rights reserved.
7 | //
8 |
9 | #import "HYTabbarCollectionCell.h"
10 |
11 | @interface HYTabbarCollectionCell()
12 |
13 | @property (nonatomic,weak) UIView * subView;
14 |
15 | @end
16 |
17 | @implementation HYTabbarCollectionCell
18 |
19 | //- (instancetype)init{
20 | // if ([super init]) {
21 | // UIView * view = [[UIView alloc]initWithFrame:self.bounds];
22 | // [self addSubview:view];
23 | // view.backgroundColor = [UIColor orangeColor];
24 | // self.subView = view;
25 | // }
26 | //
27 | // return self;
28 | //}
29 |
30 | - (void)setSubVc:(UIViewController *)subVc{
31 |
32 | _subVc = subVc;
33 | [self.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
34 | [self.contentView addSubview:subVc.view];
35 | }
36 |
37 | @end
38 |
--------------------------------------------------------------------------------
/EasyLife/Classes/News/View/HYTabbarView.h:
--------------------------------------------------------------------------------
1 | //
2 | // HYTabbarView.h
3 | // 标签栏视图-多视图滑动点击切换
4 | //
5 | // Created by Sekorm on 16/3/31.
6 | // Copyright © 2016年 HY. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface HYTabbarView : UIView
12 |
13 | /**
14 | * 添加一个子控制器
15 | */
16 | - (void)addSubItemWithViewController:(UIViewController *)viewController;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Other/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Other/Category/Foundation/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/NSDictionary/NSDictionary+Addition.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSDictionary+Addition.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/1.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface NSDictionary (Addition)
12 |
13 | - (void)propertyCode;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/NSDictionary/NSDictionary+Addition.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSDictionary+Addition.m
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/1.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import "NSDictionary+Addition.h"
10 |
11 | @implementation NSDictionary (Addition)
12 | - (void)propertyCode {
13 |
14 | // 属性跟字典的key一一对应
15 | NSMutableString *codes = [NSMutableString string];
16 | // 遍历字典中所有key取出来
17 | [self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
18 | // key:属性名
19 | NSString *code;
20 | if ([obj isKindOfClass:[NSString class]]) {
21 | code = [NSString stringWithFormat:@"@property (nonatomic, copy) NSString *%@;",key];
22 | }else if ([obj isKindOfClass:NSClassFromString(@"__NSCFBoolean")]){
23 | code = [NSString stringWithFormat:@"@property (nonatomic, assign) BOOL %@;",key];
24 | }else if ([obj isKindOfClass:[NSNumber class]]){
25 | code = [NSString stringWithFormat:@"@property (nonatomic, assign) NSInteger %@;",key];
26 | }else if ([obj isKindOfClass:[NSArray class]]){
27 | code = [NSString stringWithFormat:@"@property (nonatomic, strong) NSArray *%@;",key];
28 | NSLog(@"----%@列表", key);
29 | for (NSDictionary *dict in obj) {
30 | if ([dict isKindOfClass:[NSDictionary class]]) {
31 | [dict propertyCode];
32 | }
33 | }NSLog(@"----%@列表", key);
34 | }else if ([obj isKindOfClass:[NSDictionary class]]){
35 | code = [NSString stringWithFormat:@"@property (nonatomic, strong) NSDictionary *%@;",key];
36 | [(NSDictionary *)obj propertyCode];
37 | }
38 | [codes appendFormat:@"%@\n",code];
39 |
40 | }];
41 | NSLog(@"%@", codes);
42 | }
43 | @end
44 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/NSString/NSAttributedString+Size.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSAttributedString+Size.h
3 | //
4 | //
5 | // Created by LiangYe on 16/8/30.
6 | // Copyright © 2016年 Com.LiangYe. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface NSAttributedString (Size)
13 |
14 | /**
15 | * 根据约束的宽度来求NSAttributedString的高度
16 | */
17 | - (CGFloat)heightWithConstrainedWidth:(CGFloat)width ;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/NSString/NSAttributedString+Size.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSAttributedString+Size.m
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/8/30.
6 | // Copyright © 2016年 Com.LiangYe. All rights reserved.
7 | //
8 |
9 | #import "NSAttributedString+Size.h"
10 | #import
11 | //#import "NSAttributedString+YYText.h"
12 |
13 | @implementation NSAttributedString (Size)
14 |
15 |
16 | - (CGFloat)boundingHeightForWidth:(CGFloat)inWidth {
17 | // CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFMutableAttributedStringRef) self);
18 | // CGSize suggestedSize= CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, 0),NULL, CGSizeMake(inWidth, CGFLOAT_MAX), NULL);
19 | // CFRelease(framesetter);
20 | // return suggestedSize.height;
21 |
22 |
23 | if (self == nil || ![self isKindOfClass:[NSAttributedString class]]) {
24 | return 0;
25 | }
26 |
27 | return [self boundingRectWithSize:CGSizeMake(inWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin context:nil].size.height + 3;
28 | }
29 |
30 |
31 | - (CGFloat)boundingWidthForHeight:(CGFloat)inHeight {
32 | CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFMutableAttributedStringRef) self);
33 | CGSize suggestedSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0, 0),NULL, CGSizeMake(CGFLOAT_MAX, inHeight), NULL);
34 | CFRelease(framesetter);
35 | return suggestedSize.width;
36 | }
37 |
38 |
39 | - (CGFloat)heightWithConstrainedWidth:(CGFloat)width {
40 |
41 | if (self == nil || ![self isKindOfClass:[NSAttributedString class]]) {
42 | return 0;
43 | }
44 |
45 | return [self boundingHeightForWidth:width];
46 | }
47 |
48 | @end
49 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/NSString/NSString+Addition.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+Addition.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/1.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 |
13 | @interface NSString (Addition)
14 |
15 | - (NSString *)convertTimesTampWithDateFormat:(NSString *)dateFormat;
16 |
17 | - (NSString *)contractionsImageViewUrl;
18 |
19 | /**
20 | * 无空格和换行的字符串
21 | */
22 | - (NSString *)noWhiteSpaceString;
23 |
24 | /** 计算字体大小和换行需要最大换行距离*/
25 | - (CGSize)sizeWithText:(UIFont *)font maxW:(CGFloat)maxW;
26 |
27 | /** 计算字体大小和换行*/
28 | - (CGSize)sizeWithText:(UIFont *)font;
29 |
30 | /**
31 | * 计算当前文件\文件夹的内容大小
32 | */
33 | - (NSInteger)fileSize;
34 | /**
35 | * 判断手机号
36 | */
37 | - (BOOL)isPhoneNumber;
38 | /**
39 | * 判断手机号
40 | */
41 | - (BOOL)isValidateMobile:(NSString *)mobileNum;
42 | /**
43 | * 判断邮箱
44 | */
45 | -(BOOL)isEmailWithString:(NSString *)str;
46 |
47 | -(BOOL)isGloabelNumberWithString:(NSString *)str;
48 |
49 | /**
50 | 返回处理过的字符串,只保留小数点后两位,结尾0省略
51 | */
52 | - (instancetype)dealedPriceString;
53 | /**
54 | * 判断中文和英文字符串的长度
55 | */
56 | - (int)convertToInt:(NSString*)strtemp;
57 |
58 | //- (NSString *)convertTimesTampWithDateFormat:(NSString *)dateFormat;
59 | @end
60 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/NSString/NSString+Encrypt.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+Encrypt.h
3 | //
4 | //
5 | // Created by LiangYe on 14/9/22.
6 | // Copyright © 2015年 Com.LiangYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface NSString (Encrypt)
12 |
13 | /**
14 | * 字符串md5加密
15 | */
16 | - (NSString *) stringWithMD5;
17 |
18 | /**
19 | * 字符串sha1加密
20 | */
21 | - (NSString *) stringWithSha1;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/NSString/NSString+Encrypt.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+Encrypt.m
3 | //
4 | //
5 | // Created by LiangYe on 14/9/22.
6 | // Copyright © 2015年 Com.LiangYe. All rights reserved.
7 | //
8 |
9 | #import "NSString+Encrypt.h"
10 | #import
11 |
12 | @implementation NSString (Encrypt)
13 |
14 | - (NSString *)stringWithMD5 {
15 | if(self == nil || [self length] == 0)
16 | return nil;
17 | const char *value = [self UTF8String];
18 | unsigned char outputBuffer[CC_MD5_DIGEST_LENGTH];
19 | //CC_MD5(value, strlen(value), outputBuffer);
20 | CC_MD5(value, (CC_LONG)strlen(value), outputBuffer);
21 |
22 | NSMutableString *outputString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
23 | for(NSInteger count = 0; count < CC_MD5_DIGEST_LENGTH; count++){
24 | [outputString appendFormat:@"%02x",outputBuffer[count]];
25 | }
26 |
27 | return outputString;
28 | }
29 |
30 | - (NSString *)stringWithSha1 {
31 |
32 | if (self == nil || [self length] == 0) {
33 | return nil;
34 | }
35 | const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
36 | NSData *data = [NSData dataWithBytes:cstr length:self.length];
37 |
38 | uint8_t digest[CC_SHA1_DIGEST_LENGTH];
39 |
40 | CC_SHA1(data.bytes, (CC_LONG)data.length, digest);
41 |
42 | NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
43 |
44 | for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
45 | [output appendFormat:@"%02x", digest[i]];
46 |
47 | return output;
48 | }
49 | @end
50 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/NSString/NSString+Extension.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+Additions.h
3 | // Additions
4 | //
5 | // Created by Johnil on 13-6-15.
6 | // Copyright (c) 2013年 Johnil. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 | @interface NSString (Extension)
12 |
13 | #pragma mark - java api
14 | - (NSUInteger)compareTo: (NSString*) comp;
15 | - (NSUInteger)compareToIgnoreCase: (NSString*) comp;
16 | - (bool)contains: (NSString*) substring;
17 | - (bool)endsWith: (NSString*) substring;
18 | - (bool)startsWith: (NSString*) substring;
19 | - (NSUInteger)indexOf: (NSString*) substring;
20 | - (NSUInteger)indexOf:(NSString *)substring startingFrom: (NSUInteger) index;
21 | - (NSUInteger)lastIndexOf: (NSString*) substring;
22 | - (NSUInteger)lastIndexOf:(NSString *)substring startingFrom: (NSUInteger) index;
23 | - (NSString*)substringFromIndex:(NSUInteger)from toIndex: (NSUInteger) to;
24 | - (NSString*) trim;
25 | - (NSArray*) split: (NSString*) token;
26 | - (NSString*) replace: (NSString*) target withString: (NSString*) replacement;
27 | - (NSArray*) split: (NSString*) token limit: (NSUInteger) maxResults;
28 |
29 | - (CGSize)sizeWithConstrainedToWidth:(float)width fromFont:(UIFont *)font1 lineSpace:(float)lineSpace;
30 | - (CGSize)sizeWithConstrainedToSize:(CGSize)size fromFont:(UIFont *)font1 lineSpace:(float)lineSpace;
31 | - (void)drawInContext:(CGContextRef)context withPosition:(CGPoint)p andFont:(UIFont *)font andTextColor:(UIColor *)color andHeight:(float)height andWidth:(float)width;
32 | - (void)drawInContext:(CGContextRef)context withPosition:(CGPoint)p andFont:(UIFont *)font andTextColor:(UIColor *)color andHeight:(float)height;
33 |
34 | @end
35 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/NSString/NSString+Size.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+Size.h
3 | // iOS-Categories (https://github.com/shaojiankui/iOS-Categories)
4 | //
5 | // Created by Jakey on 15/5/22.
6 | // Copyright (c) 2015年 www.skyfox.org. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 | @interface NSString (Size)
12 | /**
13 | * @brief 计算文字的高度
14 | *
15 | * @param font 字体(默认为系统字体)
16 | * @param width 约束宽度
17 | */
18 | - (CGFloat)heightWithFont:(UIFont *)font constrainedToWidth:(CGFloat)width;
19 | /**
20 | * @brief 计算文字的宽度
21 | *
22 | * @param font 字体(默认为系统字体)
23 | * @param height 约束高度
24 | */
25 | - (CGFloat)widthWithFont:(UIFont *)font constrainedToHeight:(CGFloat)height;
26 |
27 | /**
28 | * @brief 计算文字的大小
29 | *
30 | * @param font 字体(默认为系统字体)
31 | * @param width 约束宽度
32 | */
33 | - (CGSize)sizeWithFont:(UIFont *)font constrainedToWidth:(CGFloat)width;
34 | /**
35 | * @brief 计算文字的大小
36 | *
37 | * @param font 字体(默认为系统字体)
38 | * @param height 约束高度
39 | */
40 | - (CGSize)sizeWithFont:(UIFont *)font constrainedToHeight:(CGFloat)height;
41 |
42 | /**
43 | * @brief 反转字符串
44 | *
45 | * @param strSrc 被反转字符串
46 | *
47 | * @return 反转后字符串
48 | */
49 | + (NSString *)reverseString:(NSString *)strSrc;
50 | @end
51 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/NSString/NSString+URL.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+URL.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/1.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface NSString (URL)
12 |
13 | - (NSString *)urlEncodedString ;
14 |
15 | - (NSString *)urlDecodedString ;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/NSString/NSString+URL.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+URL.m
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/1.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import "NSString+URL.h"
10 |
11 | @implementation NSString (URL)
12 |
13 | - (NSString *)urlEncodedString {
14 | NSMutableString *output = [NSMutableString string];
15 | const unsigned char *source = (const unsigned char *)[self UTF8String];
16 | size_t sourceLen = strlen((const char *)source);
17 | for (int i = 0; i < sourceLen; ++i) {
18 | const unsigned char thisChar = source[i];
19 | if (thisChar == ' '){
20 | [output appendString:@"+"];
21 | } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' ||
22 | (thisChar >= 'a' && thisChar <= 'z') ||
23 | (thisChar >= 'A' && thisChar <= 'Z') ||
24 | (thisChar >= '0' && thisChar <= '9')) {
25 | [output appendFormat:@"%c", thisChar];
26 | } else {
27 | [output appendFormat:@"%%%02X", thisChar];
28 | }
29 | }
30 |
31 | return output;
32 | }
33 |
34 | - (NSString *)urlDecodedString {
35 | NSString * result = [self stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
36 | return result;
37 | }
38 | @end
39 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/Notification/NSNotificationCenter+Addition.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSNotificationCenter+Addition.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/3/16.
6 | // Copyright © 2016年 Com.LiangYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface NSNotificationCenter (Addition)
12 |
13 | /**
14 | * 只发送一个通知
15 | */
16 | + (void)postNotification:(NSString *)notiname;
17 |
18 | /**
19 | * 发送一个通知
20 | *
21 | * @param notiname 通知名字
22 | * @param object 通知内容
23 | */
24 | + (void)postNotification:(NSString *)notiname object:(id)object;
25 |
26 | /**
27 | * 移除所有通知的注册者
28 | */
29 | + (void)removeAllObserverForObj:(id)obj;
30 |
31 | /**
32 | * 注册一个通知
33 | */
34 | + (void)addObserver:(id)observer action:(SEL)action name:(NSString *)name;
35 |
36 | @end
37 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/Foundation/Notification/NSNotificationCenter+Addition.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSNotificationCenter+Addition.m
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/3/16.
6 | // Copyright © 2016年 Com.LiangYe. All rights reserved.
7 | //
8 |
9 | #import "NSNotificationCenter+Addition.h"
10 |
11 | @implementation NSNotificationCenter (Addition)
12 |
13 | + (void)postNotification:(NSString *)notiname {
14 | [[NSNotificationCenter defaultCenter] postNotificationName:notiname object:nil];
15 | }
16 |
17 | + (void)postNotification:(NSString *)notiname object:(id)object {
18 | if (object == nil) {
19 | [self postNotification:notiname];
20 | } else {
21 | [[NSNotificationCenter defaultCenter] postNotificationName:notiname object:object userInfo:nil];
22 | }
23 | }
24 |
25 | + (void)removeAllObserverForObj:(id)obj {
26 | [[NSNotificationCenter defaultCenter] removeObserver:obj];
27 | }
28 |
29 | + (void)addObserver:(id)observer action:(SEL)action name:(NSString *)name {
30 | [[NSNotificationCenter defaultCenter] addObserver:observer selector:action name:name object:nil];
31 | }
32 |
33 | @end
34 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIImage/UIImage+Addition.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+Addition.h
3 | // NeiHan
4 | //
5 | // Created by Charles on 16/9/1.
6 | // Copyright © 2016年 Charles. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIImage (Addition)
12 |
13 | + (UIImage *)circleImageWithname:(NSString *)name
14 | borderWidth:(CGFloat)borderWidth
15 | borderColor:(UIColor *)borderColor;
16 |
17 | /**
18 | * 保持宽高比设置图片在多大区域显示
19 | */
20 | - (UIImage *)sourceImage:(UIImage *)sourceImage
21 | targetSize:(CGSize)targetSize;
22 |
23 | /**
24 | * 指定宽度按比例缩放
25 | */
26 | - (UIImage *)sourceImage:(UIImage *)sourceImage
27 | targetWidth:(CGFloat)targetWidth;
28 |
29 | /**
30 | * 等比例缩放
31 | */
32 | - (UIImage *)sourceImage:(UIImage *)sourceImage
33 | scale:(CGFloat)scale;
34 |
35 |
36 | + (UIImage *)resizableImageWithImageName:(NSString *)imageName;
37 |
38 |
39 |
40 |
41 |
42 | /** 压缩图片到指定的物理大小*/
43 | - (NSData *)compressImageDataWithMaxLimit:(CGFloat)maxLimit;
44 |
45 | - (UIImage *)compressImageWithMaxLimit:(CGFloat)maxLimit;
46 |
47 | @end
48 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIImage/UIImage+Cut.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+Cut.h
3 | // MeiJiaLove
4 | //
5 | // Created by Wu.weibin on 13-5-17.
6 | // Copyright (c) 2013年 Wu.weibin. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 | @interface UIImage (Cut)
12 |
13 | - (UIImage *)clipImageWithScaleWithsize:(CGSize)asize;
14 |
15 | - (UIImage *)compressImage;
16 |
17 | - (NSData *)compressImageData;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIImage/UIImageView+Addition.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImageView+Addition.h
3 | // NeiHan
4 | //
5 | // Created by Charles on 16/9/7.
6 | // Copyright © 2016年 Com.Charles. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIImageView (Addition)
12 |
13 | - (instancetype)initWithTarget:(id)target action:( SEL)action;
14 |
15 | - (void)addTarget:( id)target action:( SEL)action;
16 |
17 | + (UIImageView *)imageViewWithGIFData:(NSData *)data;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIImage/UIImageView+LBBlurredImage.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImageView+LBBlurredImage.h
3 | // LBBlurredImage
4 | //
5 | // Created by Luca Bernardi on 11/11/12.
6 | // Copyright (c) 2012 Luca Bernardi. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | typedef void(^LBBlurredImageCompletionBlock)(void);
12 |
13 | extern CGFloat const kLBBlurredImageDefaultBlurRadius;
14 |
15 | @interface UIImageView (LBBlurredImage)
16 |
17 | /**
18 | Set the blurred version of the provided image to the UIImageView
19 |
20 | @param UIImage the image to blur and set as UIImageView's image
21 | @param CGFLoat the radius of the blur used by the Gaussian filter
22 | @param LBBlurredImageCompletionBlock a completion block called after the image
23 | was blurred and set to the UIImageView (the block is dispatched on main thread)
24 | */
25 | - (void)setImageToBlur:(UIImage *)image
26 | blurRadius:(CGFloat)blurRadius
27 | completionBlock:(LBBlurredImageCompletionBlock)completion;
28 |
29 | /**
30 | Set the blurred version of the provided image to the UIImageView
31 | with the default blur radius
32 |
33 | @param UIImage the image to blur and set as UIImageView's image
34 | @param LBBlurredImageCompletionBlock a completion block called after the image
35 | was blurred and set to the UIImageView (the block is dispatched on main thread)
36 | */
37 | - (void)setImageToBlur:(UIImage *)image
38 | completionBlock:(LBBlurredImageCompletionBlock)completion;
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIImage/UIImageView+LBBlurredImage.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIImageView+LBBlurredImage.m
3 | // LBBlurredImage
4 | //
5 | // Created by Luca Bernardi on 11/11/12.
6 | // Copyright (c) 2012 Luca Bernardi. All rights reserved.
7 | //
8 |
9 | #import "UIImageView+LBBlurredImage.h"
10 | #import "UIImage+ImageEffects.h"
11 |
12 | CGFloat const kLBBlurredImageDefaultBlurRadius = 20.0;
13 | CGFloat const kLBBlurredImageDefaultSaturationDeltaFactor = 1.8;
14 |
15 | @implementation UIImageView (LBBlurredImage)
16 |
17 | #pragma mark - LBBlurredImage Additions
18 |
19 | - (void)setImageToBlur:(UIImage *)image
20 | completionBlock:(LBBlurredImageCompletionBlock)completion
21 | {
22 | [self setImageToBlur:image
23 | blurRadius:kLBBlurredImageDefaultBlurRadius
24 | completionBlock:completion];
25 | }
26 |
27 | - (void)setImageToBlur:(UIImage *)image
28 | blurRadius:(CGFloat)blurRadius
29 | completionBlock:(LBBlurredImageCompletionBlock) completion
30 | {
31 | NSParameterAssert(image);
32 | blurRadius = (blurRadius <= 0) ? kLBBlurredImageDefaultBlurRadius : blurRadius;
33 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
34 |
35 | UIImage *blurredImage = [image applyBlurWithRadius:blurRadius
36 | tintColor:nil
37 | saturationDeltaFactor:kLBBlurredImageDefaultSaturationDeltaFactor
38 | maskImage:nil];
39 |
40 | dispatch_async(dispatch_get_main_queue(), ^{
41 | self.image = blurredImage;
42 | if (completion) {
43 | completion();
44 | }
45 | });
46 | });
47 | }
48 |
49 | @end
50 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIView/MBProgressHUD+NHAddition.h:
--------------------------------------------------------------------------------
1 | //
2 | // MBProgressHUD+NHAddition.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/11.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import "MBProgressHUD.h"
10 |
11 | @interface MBProgressHUD (NHAddition)
12 |
13 | + (void)showError:(NSString *)error
14 | toView:(UIView *)view;
15 |
16 | + (void)showSuccess:(NSString *)success
17 | toView:(UIView *)view;
18 | /**
19 | * 尽量都使用这个
20 | */
21 | + (void)showLoading:(UIView *)view;
22 | + (void)showLoading:(NSString *)text
23 | toView:(UIView *)view;
24 |
25 | /**
26 | * 尽量都使用这个
27 | */
28 | + (void)showMessage:(NSString *)message;
29 | + (void)showMessage:(NSString *)message
30 | toView:(UIView *)view;
31 |
32 | + (void)showMessage:(NSString *)message
33 | detailMessage:(NSString*)detailMessage
34 | toView:(UIView *)view;
35 |
36 | + (void)hideAllHUDsInView:(UIView *)view;
37 | @end
38 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIView/UILabel+Addition.h:
--------------------------------------------------------------------------------
1 | //
2 | // UILabel+Addition.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/4/26.
6 | // Copyright © 2016年 Com.LiangYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UILabel (Addition)
12 |
13 | - (instancetype)initWithFont:(UIFont *)font
14 | textColor:(UIColor *)textColor
15 | textAlignment:(NSTextAlignment)textAlignment;
16 |
17 | + (instancetype)labelWithFont:(UIFont *)font
18 | textColor:(UIColor *)textColor
19 | textAlignment:(NSTextAlignment)textAlignment;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIView/UILabel+Addition.m:
--------------------------------------------------------------------------------
1 | //
2 | // UILabel+Addition.m
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/4/26.
6 | // Copyright © 2016年 Com.LiangYe. All rights reserved.
7 | //
8 |
9 | #import "UILabel+Addition.h"
10 |
11 | @implementation UILabel (Addition)
12 |
13 | - (instancetype)initWithFont:(UIFont *)font
14 | textColor:(UIColor *)textColor
15 | textAlignment:(NSTextAlignment)textAlignment {
16 | if (self = [super init]) {
17 | self.font = font;
18 | self.textAlignment = textAlignment ? textAlignment : NSTextAlignmentLeft;
19 | self.textColor = textColor;
20 | }
21 | return self;
22 | }
23 |
24 | + (instancetype)labelWithFont:(UIFont *)font
25 | textColor:(UIColor *)textColor
26 | textAlignment:(NSTextAlignment)textAlignment {
27 | return [[UILabel alloc] initWithFont:font textColor:textColor textAlignment:textAlignment];
28 | }
29 | @end
30 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIView/UIView+Frame.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Frame.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/1.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIView (Frame)
12 |
13 | /**
14 | * 起点x坐标
15 | */
16 | @property (nonatomic, assign) CGFloat x;
17 | /**
18 | * 起点y坐标
19 | */
20 | @property (nonatomic, assign) CGFloat y;
21 | /**
22 | * 中心点x坐标
23 | */
24 | @property (nonatomic, assign) CGFloat centerX;
25 | /**
26 | * 中心点y坐标
27 | */
28 | @property (nonatomic, assign) CGFloat centerY;
29 | /**
30 | * 宽度
31 | */
32 | @property (nonatomic, assign) CGFloat width;
33 | /**
34 | * 高度
35 | */
36 | @property (nonatomic, assign) CGFloat height;
37 | /**
38 | * 顶部
39 | */
40 | @property (nonatomic, assign) CGFloat top;
41 | /**
42 | * 底部
43 | */
44 | @property (nonatomic, assign) CGFloat bottom;
45 | /**
46 | * 左边
47 | */
48 | @property (nonatomic, assign) CGFloat left;
49 | /**
50 | * 右边
51 | */
52 | @property (nonatomic, assign) CGFloat right;
53 | /**
54 | * size
55 | */
56 | @property (nonatomic, assign) CGSize size;
57 | /**
58 | * 起点坐标
59 | */
60 | @property (nonatomic, assign) CGPoint origin;
61 |
62 | @end
63 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIView/UIView+Layer.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Layer.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/4/19.
6 | // Copyright © 2016年 Com.LiangYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIView (Layer)
12 |
13 | - (void)setLayerCornerRadius:(CGFloat)cornerRadius
14 | borderWidth:(CGFloat)borderWidth
15 | borderColor:(UIColor *)borderColor;
16 |
17 |
18 | /**
19 | * 边角半径
20 | */
21 | @property (nonatomic, assign) CGFloat layerCornerRadius;
22 | /**
23 | * 边线宽度
24 | */
25 | @property (nonatomic, assign) CGFloat layerBorderWidth;
26 | /**
27 | * 边线颜色
28 | */
29 | @property (nonatomic, strong) UIColor *layerBorderColor;
30 | @end
31 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIView/UIView+Layer.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Layer.m
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/4/19.
6 | // Copyright © 2016年 Com.LiangYe. All rights reserved.
7 | //
8 |
9 | #import "UIView+Layer.h"
10 |
11 | @implementation UIView (Layer)
12 |
13 | - (void)setLayerCornerRadius:(CGFloat)cornerRadius
14 | borderWidth:(CGFloat)borderWidth
15 | borderColor:(UIColor *)borderColor {
16 | self.layer.cornerRadius = cornerRadius;
17 | self.layer.borderColor = borderColor.CGColor;
18 | self.layer.borderWidth = borderWidth;
19 | self.layer.masksToBounds = YES;
20 | }
21 |
22 | - (void)setLayerBorderColor:(UIColor *)layerBorderColor {
23 | self.layer.borderColor = layerBorderColor.CGColor;
24 | [self _config];
25 | }
26 |
27 | - (UIColor *)layerBorderColor {
28 | return [UIColor colorWithCGColor:self.layer.borderColor];
29 | }
30 |
31 | - (void)setLayerBorderWidth:(CGFloat)layerBorderWidth {
32 | self.layer.borderWidth = layerBorderWidth;
33 | [self _config];
34 | }
35 |
36 | - (CGFloat)layerBorderWidth {
37 | return self.layer.borderWidth;
38 | }
39 |
40 | - (void)setLayerCornerRadius:(CGFloat)layerCornerRadius {
41 | self.layer.cornerRadius = layerCornerRadius;
42 | [self _config];
43 | }
44 |
45 | - (CGFloat)layerCornerRadius {
46 | return self.layer.cornerRadius;
47 | }
48 |
49 | - (void)_config {
50 |
51 | self.layer.masksToBounds = YES;
52 | // 栅格化 - 提高性能
53 | // 设置栅格化后,图层会被渲染成图片,并且缓存,再次使用时,不会重新渲染
54 | self.layer.rasterizationScale = [UIScreen mainScreen].scale;
55 | self.layer.shouldRasterize = YES;
56 | }
57 |
58 | @end
59 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIView/UIView+Tap.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Tap.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/4/2.
6 | // Copyright © 2016年 Com.LiangYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIView (Tap)
12 | /**
13 | * 动态添加手势
14 | */
15 | - (void)setTapActionWithBlock:(void (^)(void))block ;
16 | @end
17 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIView/UIView+Tap.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIView+Tap.m
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/4/2.
6 | // Copyright © 2016年 Com.LiangYe. All rights reserved.
7 | //
8 |
9 | #import "UIView+Tap.h"
10 | #import
11 | /**
12 | * 动态添加手势
13 | */
14 | static const char *ActionHandlerTapGestureKey;
15 |
16 | @implementation UIView (Tap)
17 |
18 | - (void)setTapActionWithBlock:(void (^)(void))block {
19 |
20 | self.userInteractionEnabled = YES;
21 |
22 | UITapGestureRecognizer *gesture = objc_getAssociatedObject(self, &ActionHandlerTapGestureKey);
23 |
24 | if (!gesture) {
25 | gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleActionForTapGesture:)];
26 | [self addGestureRecognizer:gesture];
27 | objc_setAssociatedObject(self, &ActionHandlerTapGestureKey, gesture, OBJC_ASSOCIATION_RETAIN);
28 | }
29 |
30 | objc_setAssociatedObject(self, &ActionHandlerTapGestureKey, block, OBJC_ASSOCIATION_COPY);
31 | }
32 |
33 | - (void)handleActionForTapGesture:(UITapGestureRecognizer *)gesture {
34 | if (gesture.state == UIGestureRecognizerStateRecognized) {
35 | void(^action)(void) = objc_getAssociatedObject(self, &ActionHandlerTapGestureKey);
36 | if (action) {
37 | action();
38 | }
39 | }
40 | }
41 | @end
42 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Category/UIKit/UIViewController/UIViewController+HUD.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIViewController+HUD.h
3 | // Floral
4 | //
5 | // Created by Sekorm on 2017/3/24.
6 | // Copyright © 2017年 YL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIViewController (HUD)
12 |
13 | @property (nonatomic,strong) MBProgressHUD *hud;
14 |
15 | - (void)hideHud:(BOOL)animated;
16 | /**
17 | 显示提示信息(有菊花, 一直显示, 不消失)
18 |
19 | - parameter view: 显示在哪个View上
20 | - parameter hint: 提示信息
21 | - parameter yOffset: y上的偏移量
22 | */
23 | - (void)showIndicatorHint:(NSString *)hint yOffset:(CGFloat)yOffset;
24 |
25 | /**
26 | 显示提示信息(有菊花, 一直显示, 不消失)
27 |
28 | - parameter view: 显示在哪个View上
29 | - parameter hint: 提示信息
30 |
31 | */
32 | - (void)showIndicatorHint:(NSString *)hint;
33 |
34 | - (void)showHint:(NSString *)hint;
35 |
36 | /**
37 | 显示纯文字提示信息(显示在keywindow上)
38 |
39 | - parameter hint: 提示信息
40 | - parameter duration: 持续时间(不填的话, 默认两秒)
41 | - parameter yOffset: y上的偏移量
42 | */
43 | - (void)showHint:(NSString *)hint duration:(NSTimeInterval)timeInterval yOffset:(CGFloat)yOffset;
44 |
45 | /**
46 | 显示纯文字提示信息
47 |
48 | - parameter hint: 显示在哪个View上
49 | - parameter hint: 提示信息
50 | - parameter duration: 持续时间(不填的话, 默认两秒)
51 | - parameter yOffset: y上的偏移量
52 | */
53 | - (void)showHint:(UIView *)view hint:(NSString *)hint duration:(NSTimeInterval)timeInterval yOffset:(CGFloat)yOffset;
54 | @end
55 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Custom/Controller/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Other/Custom/Controller/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Custom/View/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Other/Custom/View/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Custom/View/ELCustomLoadingAnimationView.h:
--------------------------------------------------------------------------------
1 | //
2 | // NHCustomLoadingAnimationView.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/5.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | // loading动画视图
8 |
9 | #import
10 |
11 | @interface ELCustomLoadingAnimationView : UIView
12 |
13 | - (void)showInView:(UIView *)view;
14 |
15 | - (void)dismiss;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Custom/View/ELCustomLoadingAnimationView.m:
--------------------------------------------------------------------------------
1 | //
2 | // NHCustomLoadingAnimationView.m
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/5.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import "ELCustomLoadingAnimationView.h"
10 |
11 | @interface ELCustomLoadingAnimationView ()
12 | @property (nonatomic, weak) UIImageView *imageView;
13 | @property (nonatomic, strong) NSMutableArray *imageArray;
14 | @end
15 |
16 | @implementation ELCustomLoadingAnimationView
17 |
18 | - (instancetype)init {
19 | self = [super init];
20 | if (self) {
21 | self.backgroundColor = [UIColor colorWithRed:0.94f green:0.94f blue:0.94f alpha:1.00f];;
22 | }
23 | return self;
24 | }
25 |
26 | - (void)showInView:(UIView *)view {
27 | if (view == nil) {
28 | view = [UIApplication sharedApplication].keyWindow;
29 | }
30 | [view addSubview:self];
31 | self.frame = view.bounds;
32 | self.imageView.frame = CGRectMake(0, 0, 70, 100);
33 | self.imageView.centerX = self.centerX;
34 | self.imageView.centerY = self.centerY * 0.7;
35 |
36 | [self.imageView startAnimating];
37 |
38 | }
39 |
40 | - (void)dismiss {
41 | [_imageArray removeAllObjects];
42 | [_imageView stopAnimating];
43 | [_imageView removeFromSuperview];
44 | [self removeFromSuperview];
45 | }
46 |
47 | - (NSMutableArray *)imageArray {
48 | if (!_imageArray) {
49 | _imageArray = [NSMutableArray new];
50 | }
51 | return _imageArray;
52 | }
53 |
54 | - (UIImageView *)imageView {
55 | if (!_imageView) {
56 | UIImageView *img = [[UIImageView alloc] init];
57 | [self addSubview:img];
58 | _imageView = img;
59 |
60 | for (NSInteger i = 0; i < 17; i++) {
61 | UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"refreshjoke_loading_%ld", i % 17]];
62 | [self.imageArray addObject:image];
63 | }
64 | self.imageView.animationDuration = 1.0;
65 | self.imageView.animationRepeatCount = 0;
66 | self.imageView.animationImages = self.imageArray;
67 | }
68 | return _imageView;
69 | }
70 | @end
71 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Custom/View/ELCustomNoNetworkEmptyView.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELCustomNoNetworkEmptyView.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ELCustomNoNetworkEmptyView : UIView
12 | /** 没有网络,重试*/
13 | @property (nonatomic, copy) void(^customNoNetworkEmptyViewDidClickRetryHandle)(ELCustomNoNetworkEmptyView *view);
14 | @end
15 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Custom/View/ELRefreshFooter.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELRefreshFooter.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/8.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | // 上拉刷新视图,上拉的时候会自动加载,类似微信的朋友圈上拉加载。
8 |
9 | #import "MJRefresh.h"
10 |
11 | @interface ELRefreshFooter : MJRefreshAutoNormalFooter
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Resource/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Other/Resource/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Tool/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Other/Tool/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Tool/ELCommonAPIConstant.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELCommonAPIConstant.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/9.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ELCommonAPIConstant : NSObject
12 | #pragma mark - HOME / 首页
13 |
14 | UIKIT_EXTERN NSString *const kNHHomeServiceListAPI;
15 |
16 | #pragma mark - READ / 阅读类
17 |
18 | /** 微信精选*/
19 | UIKIT_EXTERN NSString *const kELWeiXinNewsListAPI;
20 | /** 今日资讯*/
21 | UIKIT_EXTERN NSString *const kELTodayHotNewsListAPI;
22 | /** 趣图*/
23 | UIKIT_EXTERN NSString *const kELJokerPicListAPI;
24 | /** 段子*/
25 | UIKIT_EXTERN NSString *const kELJokerTextListAPI;
26 |
27 | /** 星座运势*/
28 | UIKIT_EXTERN NSString *const kELHoroscopeAPI;
29 |
30 | /** 星座运势*/
31 | UIKIT_EXTERN NSString *const kAliBabaAppKey;
32 | @end
33 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Tool/ELCommonAPIConstant.m:
--------------------------------------------------------------------------------
1 | //
2 | // ELCommonAPIConstant.m
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/9.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "ELCommonAPIConstant.h"
10 |
11 | @implementation ELCommonAPIConstant
12 |
13 | #pragma mark - READ / 阅读类
14 | /** 微信精选*/
15 | NSString *const kELWeiXinNewsListAPI = @"http://v.juhe.cn/weixin/query";
16 | /** 今日资讯*/
17 | NSString *const kELTodayHotNewsListAPI = @"http://v.juhe.cn/toutiao/index";
18 | /** 趣图 */
19 | NSString *const kELJokerPicListAPI = @"http://japi.juhe.cn/joke/img/list.from";
20 | /** 段子 */
21 | NSString *const kELJokerTextListAPI = @"http://japi.juhe.cn/joke/content/list.from";
22 | /** 星座运势 */
23 | NSString *const kELHoroscopeAPI = @"http://web.juhe.cn:8080/constellation/getAll";
24 |
25 |
26 | NSString *const kAliBabaAppKey = @"89a4c7b3506c484283e71490af0cbec5";
27 | @end
28 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Tool/ELCommonConstant.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELCommonConstant.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/7.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | // 普通公共常量
8 |
9 | #import
10 |
11 | @interface ELCommonConstant : NSObject
12 |
13 | /** 当前纬度*/
14 | UIKIT_EXTERN NSString *const kELUserCurrentLatitude;
15 | /** 当前经度*/
16 | UIKIT_EXTERN NSString *const kELUserCurrentLongitude;
17 | /** 是否登陆*/
18 | UIKIT_EXTERN NSString *const kELHasLoginFlag;
19 | /** 网络请求成功*/
20 | UIKIT_EXTERN NSString *const kELRequestSuccessNotification;
21 | @end
22 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Tool/ELCommonConstant.m:
--------------------------------------------------------------------------------
1 | //
2 | // ELCommonConstant.m
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/7.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import "ELCommonConstant.h"
10 |
11 | @implementation ELCommonConstant
12 |
13 | /** 当前纬度*/
14 | NSString *const kELUserCurrentLatitude = @"kELUserCurrentLatitude";
15 | /** 当前经度*/
16 | NSString *const kELUserCurrentLongitude = @"kELUserCurrentLongitude";
17 | /** 是否登陆*/
18 | NSString *const kELHasLoginFlag = @"kELHasLoginFlag";
19 | /** 网络请求成功*/
20 | NSString *const kELRequestSuccessNotification = @"kELRequestSuccessNotification";
21 | @end
22 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Tool/ELFileCacheManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELFileCacheManager.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ELFileCacheManager : NSObject
12 | /**
13 | * 把对象归档存到沙盒里Cache路径下
14 | */
15 | + (BOOL)saveObject:(id)object byFileName:(NSString*)fileName;
16 |
17 | /**
18 | * 通过文件名从沙盒中找到归档的对象
19 | */
20 | + (id)getObjectByFileName:(NSString*)fileName;
21 |
22 | /**
23 | * 根据文件名删除沙盒中的归档对象
24 | */
25 | + (void)removeObjectByFileName:(NSString*)fileName;
26 |
27 | /**
28 | * 存储用户偏好设置 到 NSUserDefults
29 | */
30 | + (void)saveUserData:(id)data forKey:(NSString*)key;
31 |
32 | /**
33 | * 读取用户偏好设置
34 | */
35 | +(id)readUserDataForKey:(NSString*)key;
36 |
37 | /**
38 | * 删除用户偏好设置
39 | */
40 | +(void)removeUserDataForkey:(NSString*)key;
41 |
42 |
43 | @end
44 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Tool/ELUserInfoManager.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELUserInfoManager.h
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/7.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | // 用户信息管理类
8 |
9 | #import
10 | #import "ELUserInfoModel.h"
11 |
12 | @interface ELUserInfoManager : NSObject
13 |
14 | + (instancetype)sharedManager;
15 |
16 | /**
17 | * 登录成功
18 | */
19 | - (void)didLoginInWithUserInfo:(id)userInfo;
20 |
21 | /**
22 | * 退出
23 | */
24 | - (void)didLoginOut;
25 |
26 | /**
27 | * 获取用户信息
28 | */
29 | - (ELUserInfoModel *)currentUserInfo;
30 |
31 | /**
32 | * 更新缓存中的用户信息
33 | */
34 | - (void)resetUserInfoWithUserInfo:(ELUserInfoModel *)userInfo;
35 |
36 | /**
37 | * 用来记录是否是登陆状态
38 | */
39 | @property (nonatomic, assign) BOOL isLogin;
40 |
41 | @end
42 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Tool/ELUserInfoManager.m:
--------------------------------------------------------------------------------
1 | //
2 | // ELUserInfoManager.m
3 | // EasyLife
4 | //
5 | // Created by LiangYe on 16/9/7.
6 | // Copyright © 2016年 LiangYe. All rights reserved.
7 | //
8 |
9 | #import "ELUserInfoManager.h"
10 | #import "ELUserInfoModel.h"
11 | #import "ELFileCacheManager.h"
12 |
13 | static ELUserInfoManager *_singleton = nil;
14 | @implementation ELUserInfoManager
15 |
16 | + (instancetype)sharedManager {
17 |
18 | static dispatch_once_t onceToken;
19 | dispatch_once(&onceToken, ^{
20 | _singleton = [[ELUserInfoManager alloc] init];
21 | });
22 | return _singleton;
23 | }
24 |
25 | // 当前用户信息
26 | - (ELUserInfoModel *)currentUserInfo {
27 |
28 | id obj = [ELFileCacheManager getObjectByFileName:NSStringFromClass([ELUserInfoModel class])];
29 | if (obj != nil) {
30 | return obj;
31 | }
32 | return nil;
33 | }
34 |
35 | // 重置用户信息
36 | - (void)resetUserInfoWithUserInfo:(ELUserInfoModel *)userInfo {
37 | [userInfo archive];
38 | }
39 |
40 | // 登陆
41 | - (void)didLoginInWithUserInfo:(id)userInfo {
42 |
43 | ELUserInfoModel *userinfo = [ELUserInfoModel modelWithDictionary:userInfo];
44 | [userinfo archive];
45 |
46 | [ELFileCacheManager saveUserData:@YES forKey:kELHasLoginFlag];
47 | }
48 |
49 | // 退出登陆
50 | - (void)didLoginOut {
51 | [ELFileCacheManager removeObjectByFileName:NSStringFromClass([ELUserInfoModel class])];
52 |
53 | [ELFileCacheManager saveUserData:@NO forKey:kELHasLoginFlag];
54 | }
55 |
56 | // 判断是否是登陆状态
57 | - (BOOL)isLogin {
58 | return [[NSUserDefaults standardUserDefaults] boolForKey:kELHasLoginFlag];
59 | }
60 |
61 | @end
62 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Tool/NSFileManager+Paths.h:
--------------------------------------------------------------------------------
1 | //
2 | // ELFileCacheManager+Paths.h
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface NSFileManager (Paths)
12 | /**
13 | Get URL of Documents directory.
14 |
15 | @return Documents directory URL.
16 | */
17 | + (NSURL *)documentsURL;
18 |
19 | /**
20 | Get path of Documents directory.
21 |
22 | @return Documents directory path.
23 | */
24 | + (NSString *)documentsPath;
25 |
26 | /**
27 | Get URL of Library directory.
28 |
29 | @return Library directory URL.
30 | */
31 | + (NSURL *)libraryURL;
32 |
33 | /**
34 | Get path of Library directory.
35 |
36 | @return Library directory path.
37 | */
38 | + (NSString *)libraryPath;
39 |
40 | /**
41 | Get URL of Caches directory.
42 |
43 | @return Caches directory URL.
44 | */
45 | + (NSURL *)cachesURL;
46 |
47 | /**
48 | Get path of Caches directory.
49 |
50 | @return Caches directory path.
51 | */
52 | + (NSString *)cachesPath;
53 |
54 | /**
55 | Adds a special filesystem flag to a file to avoid iCloud backup it.
56 |
57 | @param path Path to a file to set an attribute.
58 | */
59 | + (BOOL)addSkipBackupAttributeToFile:(NSString *)path;
60 |
61 | /**
62 | Get available disk space.
63 |
64 | @return An amount of available disk space in Megabytes.
65 | */
66 | + (double)availableDiskSpace;
67 |
68 | @end
69 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Tool/NSFileManager+Paths.m:
--------------------------------------------------------------------------------
1 | //
2 | // ELFileCacheManager+Paths.m
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import "NSFileManager+Paths.h"
10 | #include
11 |
12 | @implementation NSFileManager (Paths)
13 |
14 | + (NSURL *)URLForDirectory:(NSSearchPathDirectory)directory {
15 | return [self.defaultManager URLsForDirectory:directory inDomains:NSUserDomainMask].lastObject;
16 | }
17 |
18 | + (NSString *)pathForDirectory:(NSSearchPathDirectory)directory {
19 | return NSSearchPathForDirectoriesInDomains(directory, NSUserDomainMask, YES)[0];
20 | }
21 |
22 | + (NSURL *)documentsURL {
23 | return [self URLForDirectory:NSDocumentDirectory];
24 | }
25 |
26 | + (NSString *)documentsPath {
27 | return [self pathForDirectory:NSDocumentDirectory];
28 | }
29 |
30 | + (NSURL *)libraryURL {
31 | return [self URLForDirectory:NSLibraryDirectory];
32 | }
33 |
34 | + (NSString *)libraryPath {
35 | return [self pathForDirectory:NSLibraryDirectory];
36 | }
37 |
38 | + (NSURL *)cachesURL {
39 | return [self URLForDirectory:NSCachesDirectory];
40 | }
41 |
42 | + (NSString *)cachesPath {
43 | return [self pathForDirectory:NSCachesDirectory];
44 | }
45 |
46 | + (BOOL)addSkipBackupAttributeToFile:(NSString *)path {
47 | return [[NSURL.alloc initFileURLWithPath:path] setResourceValue:@(YES) forKey:NSURLIsExcludedFromBackupKey error:nil];
48 | }
49 |
50 | + (double)availableDiskSpace {
51 | NSDictionary *attributes = [self.defaultManager attributesOfFileSystemForPath:self.documentsPath error:nil];
52 | return [attributes[NSFileSystemFreeSize] unsignedLongLongValue] / (double)0x100000;
53 | }
54 |
55 | @end
56 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Other/Vendor/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 | #import
26 |
27 | #ifndef _AFNETWORKING_
28 | #define _AFNETWORKING_
29 |
30 | #import "AFURLRequestSerialization.h"
31 | #import "AFURLResponseSerialization.h"
32 | #import "AFSecurityPolicy.h"
33 |
34 | #if !TARGET_OS_WATCH
35 | #import "AFNetworkReachabilityManager.h"
36 | #endif
37 |
38 | #import "AFURLSessionManager.h"
39 | #import "AFHTTPSessionManager.h"
40 |
41 | #endif /* _AFNETWORKING_ */
42 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MBProgressHUD/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Other/Vendor/MBProgressHUD/.DS_Store
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJExtension/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJExtension/MJExtension.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJExtension.h
3 | // MJExtension
4 | //
5 | // Created by mj on 14-1-15.
6 | // Copyright (c) 2014年 小码哥. All rights reserved.
7 | // 代码地址:https://github.com/CoderMJLee/MJExtension
8 | // 代码地址:http://code4app.com/ios/%E5%AD%97%E5%85%B8-JSON-%E4%B8%8E%E6%A8%A1%E5%9E%8B%E7%9A%84%E8%BD%AC%E6%8D%A2/5339992a933bf062608b4c57
9 |
10 | #import "NSObject+MJCoding.h"
11 | #import "NSObject+MJProperty.h"
12 | #import "NSObject+MJClass.h"
13 | #import "NSObject+MJKeyValue.h"
14 | #import "NSString+MJExtension.h"
15 | #import "MJExtensionConst.h"
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJExtension/MJExtensionConst.m:
--------------------------------------------------------------------------------
1 | #ifndef __MJExtensionConst__M__
2 | #define __MJExtensionConst__M__
3 |
4 | #import
5 |
6 | /**
7 | * 成员变量类型(属性类型)
8 | */
9 | NSString *const MJPropertyTypeInt = @"i";
10 | NSString *const MJPropertyTypeShort = @"s";
11 | NSString *const MJPropertyTypeFloat = @"f";
12 | NSString *const MJPropertyTypeDouble = @"d";
13 | NSString *const MJPropertyTypeLong = @"l";
14 | NSString *const MJPropertyTypeLongLong = @"q";
15 | NSString *const MJPropertyTypeChar = @"c";
16 | NSString *const MJPropertyTypeBOOL1 = @"c";
17 | NSString *const MJPropertyTypeBOOL2 = @"b";
18 | NSString *const MJPropertyTypePointer = @"*";
19 |
20 | NSString *const MJPropertyTypeIvar = @"^{objc_ivar=}";
21 | NSString *const MJPropertyTypeMethod = @"^{objc_method=}";
22 | NSString *const MJPropertyTypeBlock = @"@?";
23 | NSString *const MJPropertyTypeClass = @"#";
24 | NSString *const MJPropertyTypeSEL = @":";
25 | NSString *const MJPropertyTypeId = @"@";
26 |
27 | #endif
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJExtension/MJFoundation.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJFoundation.h
3 | // MJExtensionExample
4 | //
5 | // Created by MJ Lee on 14/7/16.
6 | // Copyright (c) 2014年 小码哥. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface MJFoundation : NSObject
12 | + (BOOL)isClassFromFoundation:(Class)c;
13 | @end
14 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJExtension/MJFoundation.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJFoundation.m
3 | // MJExtensionExample
4 | //
5 | // Created by MJ Lee on 14/7/16.
6 | // Copyright (c) 2014年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJFoundation.h"
10 | #import "MJExtensionConst.h"
11 | #import
12 |
13 | static NSSet *foundationClasses_;
14 |
15 | @implementation MJFoundation
16 |
17 | + (NSSet *)foundationClasses
18 | {
19 | if (foundationClasses_ == nil) {
20 | // 集合中没有NSObject,因为几乎所有的类都是继承自NSObject,具体是不是NSObject需要特殊判断
21 | foundationClasses_ = [NSSet setWithObjects:
22 | [NSURL class],
23 | [NSDate class],
24 | [NSValue class],
25 | [NSData class],
26 | [NSError class],
27 | [NSArray class],
28 | [NSDictionary class],
29 | [NSString class],
30 | [NSAttributedString class], nil];
31 | }
32 | return foundationClasses_;
33 | }
34 |
35 | + (BOOL)isClassFromFoundation:(Class)c
36 | {
37 | if (c == [NSObject class] || c == [NSManagedObject class]) return YES;
38 |
39 | __block BOOL result = NO;
40 | [[self foundationClasses] enumerateObjectsUsingBlock:^(Class foundationClass, BOOL *stop) {
41 | if ([c isSubclassOfClass:foundationClass]) {
42 | result = YES;
43 | *stop = YES;
44 | }
45 | }];
46 | return result;
47 | }
48 | @end
49 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJExtension/MJProperty.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJProperty.h
3 | // MJExtensionExample
4 | //
5 | // Created by MJ Lee on 15/4/17.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | // 包装一个成员属性
8 |
9 | #import
10 | #import
11 | #import "MJPropertyType.h"
12 | #import "MJPropertyKey.h"
13 |
14 | /**
15 | * 包装一个成员
16 | */
17 | @interface MJProperty : NSObject
18 | /** 成员属性 */
19 | @property (nonatomic, assign) objc_property_t property;
20 | /** 成员属性的名字 */
21 | @property (nonatomic, readonly) NSString *name;
22 |
23 | /** 成员属性的类型 */
24 | @property (nonatomic, readonly) MJPropertyType *type;
25 | /** 成员属性来源于哪个类(可能是父类) */
26 | @property (nonatomic, assign) Class srcClass;
27 |
28 | /**** 同一个成员属性 - 父类和子类的行为可能不一致(originKey、propertyKeys、objectClassInArray) ****/
29 | /** 设置最原始的key */
30 | - (void)setOriginKey:(id)originKey forClass:(Class)c;
31 | /** 对应着字典中的多级key(里面存放的数组,数组里面都是MJPropertyKey对象) */
32 | - (NSArray *)propertyKeysForClass:(Class)c;
33 |
34 | /** 模型数组中的模型类型 */
35 | - (void)setObjectClassInArray:(Class)objectClass forClass:(Class)c;
36 | - (Class)objectClassInArrayForClass:(Class)c;
37 | /**** 同一个成员变量 - 父类和子类的行为可能不一致(key、keys、objectClassInArray) ****/
38 |
39 | /**
40 | * 设置object的成员变量值
41 | */
42 | - (void)setValue:(id)value forObject:(id)object;
43 | /**
44 | * 得到object的成员属性值
45 | */
46 | - (id)valueForObject:(id)object;
47 |
48 | /**
49 | * 初始化
50 | */
51 | + (instancetype)cachedPropertyWithProperty:(objc_property_t)property;
52 |
53 | @end
54 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJExtension/MJPropertyKey.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJPropertyKey.h
3 | // MJExtensionExample
4 | //
5 | // Created by MJ Lee on 15/8/11.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | typedef enum {
12 | MJPropertyKeyTypeDictionary = 0, // 字典的key
13 | MJPropertyKeyTypeArray // 数组的key
14 | } MJPropertyKeyType;
15 |
16 | /**
17 | * 属性的key
18 | */
19 | @interface MJPropertyKey : NSObject
20 | /** key的名字 */
21 | @property (copy, nonatomic) NSString *name;
22 | /** key的种类,可能是@"10",可能是@"age" */
23 | @property (assign, nonatomic) MJPropertyKeyType type;
24 |
25 | /**
26 | * 根据当前的key,也就是name,从object(字典或者数组)中取值
27 | */
28 | - (id)valueInObject:(id)object;
29 |
30 | @end
31 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJExtension/MJPropertyKey.m:
--------------------------------------------------------------------------------
1 | //
2 | // MJPropertyKey.m
3 | // MJExtensionExample
4 | //
5 | // Created by MJ Lee on 15/8/11.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "MJPropertyKey.h"
10 |
11 | @implementation MJPropertyKey
12 |
13 | - (id)valueInObject:(id)object
14 | {
15 | if ([object isKindOfClass:[NSDictionary class]] && self.type == MJPropertyKeyTypeDictionary) {
16 | return object[self.name];
17 | } else if ([object isKindOfClass:[NSArray class]] && self.type == MJPropertyKeyTypeArray) {
18 | NSArray *array = object;
19 | NSUInteger index = self.name.intValue;
20 | if (index < array.count) return array[index];
21 | return nil;
22 | }
23 | return nil;
24 | }
25 | @end
26 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJExtension/MJPropertyType.h:
--------------------------------------------------------------------------------
1 | //
2 | // MJPropertyType.h
3 | // MJExtension
4 | //
5 | // Created by mj on 14-1-15.
6 | // Copyright (c) 2014年 小码哥. All rights reserved.
7 | // 包装一种类型
8 |
9 | #import
10 |
11 | /**
12 | * 包装一种类型
13 | */
14 | @interface MJPropertyType : NSObject
15 | /** 类型标识符 */
16 | @property (nonatomic, copy) NSString *code;
17 |
18 | /** 是否为id类型 */
19 | @property (nonatomic, readonly, getter=isIdType) BOOL idType;
20 |
21 | /** 是否为基本数字类型:int、float等 */
22 | @property (nonatomic, readonly, getter=isNumberType) BOOL numberType;
23 |
24 | /** 是否为BOOL类型 */
25 | @property (nonatomic, readonly, getter=isBoolType) BOOL boolType;
26 |
27 | /** 对象类型(如果是基本数据类型,此值为nil) */
28 | @property (nonatomic, readonly) Class typeClass;
29 |
30 | /** 类型是否来自于Foundation框架,比如NSString、NSArray */
31 | @property (nonatomic, readonly, getter = isFromFoundation) BOOL fromFoundation;
32 | /** 类型是否不支持KVC */
33 | @property (nonatomic, readonly, getter = isKVCDisabled) BOOL KVCDisabled;
34 |
35 | /**
36 | * 获得缓存的类型对象
37 | */
38 | + (instancetype)cachedTypeWithCode:(NSString *)code;
39 | @end
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJExtension/NSObject+MJCoding.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSObject+MJCoding.h
3 | // MJExtension
4 | //
5 | // Created by mj on 14-1-15.
6 | // Copyright (c) 2014年 小码哥. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "MJExtensionConst.h"
11 |
12 | /**
13 | * Codeing协议
14 | */
15 | @protocol MJCoding
16 | @optional
17 | /**
18 | * 这个数组中的属性名才会进行归档
19 | */
20 | + (NSArray *)mj_allowedCodingPropertyNames;
21 | /**
22 | * 这个数组中的属性名将会被忽略:不进行归档
23 | */
24 | + (NSArray *)mj_ignoredCodingPropertyNames;
25 | @end
26 |
27 | @interface NSObject (MJCoding)
28 | /**
29 | * 解码(从文件中解析对象)
30 | */
31 | - (void)mj_decode:(NSCoder *)decoder;
32 | /**
33 | * 编码(将对象写入文件中)
34 | */
35 | - (void)mj_encode:(NSCoder *)encoder;
36 | @end
37 |
38 | /**
39 | 归档的实现
40 | */
41 | #define MJCodingImplementation \
42 | - (id)initWithCoder:(NSCoder *)decoder \
43 | { \
44 | if (self = [super init]) { \
45 | [self mj_decode:decoder]; \
46 | } \
47 | return self; \
48 | } \
49 | \
50 | - (void)encodeWithCoder:(NSCoder *)encoder \
51 | { \
52 | [self mj_encode:encoder]; \
53 | }
54 |
55 | #define MJExtensionCodingImplementation MJCodingImplementation
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJExtension/NSObject+MJCoding.m:
--------------------------------------------------------------------------------
1 | //
2 | // NSObject+MJCoding.m
3 | // MJExtension
4 | //
5 | // Created by mj on 14-1-15.
6 | // Copyright (c) 2014年 小码哥. All rights reserved.
7 | //
8 |
9 | #import "NSObject+MJCoding.h"
10 | #import "NSObject+MJClass.h"
11 | #import "NSObject+MJProperty.h"
12 | #import "MJProperty.h"
13 |
14 | @implementation NSObject (MJCoding)
15 |
16 | - (void)mj_encode:(NSCoder *)encoder
17 | {
18 | Class clazz = [self class];
19 |
20 | NSArray *allowedCodingPropertyNames = [clazz mj_totalAllowedCodingPropertyNames];
21 | NSArray *ignoredCodingPropertyNames = [clazz mj_totalIgnoredCodingPropertyNames];
22 |
23 | [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) {
24 | // 检测是否被忽略
25 | if (allowedCodingPropertyNames.count && ![allowedCodingPropertyNames containsObject:property.name]) return;
26 | if ([ignoredCodingPropertyNames containsObject:property.name]) return;
27 |
28 | id value = [property valueForObject:self];
29 | if (value == nil) return;
30 | [encoder encodeObject:value forKey:property.name];
31 | }];
32 | }
33 |
34 | - (void)mj_decode:(NSCoder *)decoder
35 | {
36 | Class clazz = [self class];
37 |
38 | NSArray *allowedCodingPropertyNames = [clazz mj_totalAllowedCodingPropertyNames];
39 | NSArray *ignoredCodingPropertyNames = [clazz mj_totalIgnoredCodingPropertyNames];
40 |
41 | [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) {
42 | // 检测是否被忽略
43 | if (allowedCodingPropertyNames.count && ![allowedCodingPropertyNames containsObject:property.name]) return;
44 | if ([ignoredCodingPropertyNames containsObject:property.name]) return;
45 |
46 | id value = [decoder decodeObjectForKey:property.name];
47 | if (value == nil) { // 兼容以前的MJExtension版本
48 | value = [decoder decodeObjectForKey:[@"_" stringByAppendingString:property.name]];
49 | }
50 | if (value == nil) return;
51 | [property setValue:value forObject:self];
52 | }];
53 | }
54 | @end
55 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJExtension/NSString+MJExtension.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSString+MJExtension.h
3 | // MJExtensionExample
4 | //
5 | // Created by MJ Lee on 15/6/7.
6 | // Copyright (c) 2015年 小码哥. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "MJExtensionConst.h"
11 |
12 | @interface NSString (MJExtension)
13 | /**
14 | * 驼峰转下划线(loveYou -> love_you)
15 | */
16 | - (NSString *)mj_underlineFromCamel;
17 | /**
18 | * 下划线转驼峰(love_you -> loveYou)
19 | */
20 | - (NSString *)mj_camelFromUnderline;
21 | /**
22 | * 首字母变大写
23 | */
24 | - (NSString *)mj_firstCharUpper;
25 | /**
26 | * 首字母变小写
27 | */
28 | - (NSString *)mj_firstCharLower;
29 |
30 | - (BOOL)mj_isPureInt;
31 |
32 | - (NSURL *)mj_url;
33 | @end
34 |
35 | @interface NSString (MJExtensionDeprecated_v_2_5_16)
36 | - (NSString *)underlineFromCamel MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
37 | - (NSString *)camelFromUnderline MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
38 | - (NSString *)firstCharUpper MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
39 | - (NSString *)firstCharLower MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
40 | - (BOOL)isPureInt MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
41 | - (NSURL *)url MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***");
42 | @end
43 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 | /** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏。默认是NO) */
29 | @property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden;
30 | @end
31 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 | @property (weak, nonatomic, readonly) UIImageView *gifView;
13 |
14 | /** 设置state状态下的动画图片images 动画持续时间duration*/
15 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
16 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
17 | @end
18 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 mark - 重写父类的方法
35 | - (void)prepare
36 | {
37 | [super prepare];
38 |
39 | self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
40 | }
41 |
42 | - (void)placeSubviews
43 | {
44 | [super placeSubviews];
45 |
46 | if (self.loadingView.constraints.count) return;
47 |
48 | // 圈圈
49 | CGFloat loadingCenterX = self.mj_w * 0.5;
50 | if (!self.isRefreshingTitleHidden) {
51 | loadingCenterX -= self.stateLabel.mj_textWith * 0.5 + self.labelLeftInset;
52 | }
53 | CGFloat loadingCenterY = self.mj_h * 0.5;
54 | self.loadingView.center = CGPointMake(loadingCenterX, loadingCenterY);
55 | }
56 |
57 | - (void)setState:(MJRefreshState)state
58 | {
59 | MJRefreshCheckState
60 |
61 | // 根据状态做事情
62 | if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
63 | [self.loadingView stopAnimating];
64 | } else if (state == MJRefreshStateRefreshing) {
65 | [self.loadingView startAnimating];
66 | }
67 | }
68 |
69 | @end
70 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 | /** 文字距离圈圈、箭头的距离 */
13 | @property (assign, nonatomic) CGFloat labelLeftInset;
14 | /** 显示刷新状态的label */
15 | @property (weak, nonatomic, readonly) UILabel *stateLabel;
16 |
17 | /** 设置state状态下的文字 */
18 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
19 |
20 | /** 隐藏刷新状态的文字 */
21 | @property (assign, nonatomic, getter=isRefreshingTitleHidden) BOOL refreshingTitleHidden;
22 | @end
23 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 | @property (weak, nonatomic, readonly) UIImageView *gifView;
13 |
14 | /** 设置state状态下的动画图片images 动画持续时间duration*/
15 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
16 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
17 | @end
18 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 | /** 文字距离圈圈、箭头的距离 */
13 | @property (assign, nonatomic) CGFloat labelLeftInset;
14 | /** 显示刷新状态的label */
15 | @property (weak, nonatomic, readonly) UILabel *stateLabel;
16 | /** 设置state状态下的文字 */
17 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
18 |
19 | /** 获取state状态下的title */
20 | - (NSString *)titleForState:(MJRefreshState)state;
21 | @end
22 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 | @property (weak, nonatomic, readonly) UIImageView *gifView;
13 |
14 | /** 设置state状态下的动画图片images 动画持续时间duration*/
15 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
16 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
17 | @end
18 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 | /** 文字距离圈圈、箭头的距离 */
20 | @property (assign, nonatomic) CGFloat labelLeftInset;
21 | /** 显示刷新状态的label */
22 | @property (weak, nonatomic, readonly) UILabel *stateLabel;
23 | /** 设置state状态下的文字 */
24 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
25 | @end
26 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Other/Vendor/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Other/Vendor/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HelloYeah/EasyLife/47a7aa55fb57b99f245f916ab14b3ce1ff30f986/EasyLife/Classes/Other/Vendor/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "MJRefreshHeaderIdleText" = "下拉可以刷新";
2 | "MJRefreshHeaderPullingText" = "鬆開立即刷新";
3 | "MJRefreshHeaderRefreshingText" = "正在刷新數據中...";
4 |
5 | "MJRefreshAutoFooterIdleText" = "點擊或上拉加載更多";
6 | "MJRefreshAutoFooterRefreshingText" = "正在加載更多的數據...";
7 | "MJRefreshAutoFooterNoMoreDataText" = "已經全部加載完畢";
8 |
9 | "MJRefreshBackFooterIdleText" = "上拉可以加載更多";
10 | "MJRefreshBackFooterPullingText" = "鬆開立即加載更多";
11 | "MJRefreshBackFooterRefreshingText" = "正在加載更多的數據...";
12 | "MJRefreshBackFooterNoMoreDataText" = "已經全部加載完畢";
13 |
14 | "MJRefreshHeaderLastTimeText" = "最後更新:";
15 | "MJRefreshHeaderDateTodayText" = "今天";
16 | "MJRefreshHeaderNoneLastDateText" = "無記錄";
17 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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"
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 MJRefreshLabelLeftInset = 25;
6 | const CGFloat MJRefreshHeaderHeight = 54.0;
7 | const CGFloat MJRefreshFooterHeight = 44.0;
8 | const CGFloat MJRefreshFastAnimationDuration = 0.25;
9 | const CGFloat MJRefreshSlowAnimationDuration = 0.4;
10 |
11 | NSString *const MJRefreshKeyPathContentOffset = @"contentOffset";
12 | NSString *const MJRefreshKeyPathContentInset = @"contentInset";
13 | NSString *const MJRefreshKeyPathContentSize = @"contentSize";
14 | NSString *const MJRefreshKeyPathPanState = @"state";
15 |
16 | NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey";
17 |
18 | NSString *const MJRefreshHeaderIdleText = @"MJRefreshHeaderIdleText";
19 | NSString *const MJRefreshHeaderPullingText = @"MJRefreshHeaderPullingText";
20 | NSString *const MJRefreshHeaderRefreshingText = @"MJRefreshHeaderRefreshingText";
21 |
22 | NSString *const MJRefreshAutoFooterIdleText = @"MJRefreshAutoFooterIdleText";
23 | NSString *const MJRefreshAutoFooterRefreshingText = @"MJRefreshAutoFooterRefreshingText";
24 | NSString *const MJRefreshAutoFooterNoMoreDataText = @"MJRefreshAutoFooterNoMoreDataText";
25 |
26 | NSString *const MJRefreshBackFooterIdleText = @"MJRefreshBackFooterIdleText";
27 | NSString *const MJRefreshBackFooterPullingText = @"MJRefreshBackFooterPullingText";
28 | NSString *const MJRefreshBackFooterRefreshingText = @"MJRefreshBackFooterRefreshingText";
29 | NSString *const MJRefreshBackFooterNoMoreDataText = @"MJRefreshBackFooterNoMoreDataText";
30 |
31 | NSString *const MJRefreshHeaderLastTimeText = @"MJRefreshHeaderLastTimeText";
32 | NSString *const MJRefreshHeaderDateTodayText = @"MJRefreshHeaderDateTodayText";
33 | NSString *const MJRefreshHeaderNoneLastDateText = @"MJRefreshHeaderNoneLastDateText";
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/MJRefresh/MJRefresh/NSBundle+MJRefresh.h:
--------------------------------------------------------------------------------
1 | //
2 | // NSBundle+MJRefresh.h
3 | // MJRefreshExample
4 | //
5 | // Created by MJ Lee on 16/6/13.
6 | // Copyright © 2016年 小码哥. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface NSBundle (MJRefresh)
12 | + (instancetype)mj_refreshBundle;
13 | + (UIImage *)mj_arrowImage;
14 | + (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value;
15 | + (NSString *)mj_localizedStringForKey:(NSString *)key;
16 | @end
17 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 | #import "MJRefreshConst.h"
12 |
13 | @class MJRefreshHeader, MJRefreshFooter;
14 |
15 | @interface UIScrollView (MJRefresh)
16 | /** 下拉刷新控件 */
17 | @property (strong, nonatomic) MJRefreshHeader *mj_header;
18 | @property (strong, nonatomic) MJRefreshHeader *header MJRefreshDeprecated("使用mj_header");
19 | /** 上拉刷新控件 */
20 | @property (strong, nonatomic) MJRefreshFooter *mj_footer;
21 | @property (strong, nonatomic) MJRefreshFooter *footer MJRefreshDeprecated("使用mj_footer");
22 |
23 | #pragma mark - other
24 | - (NSInteger)mj_totalDataCount;
25 | @property (copy, nonatomic) void (^mj_reloadDataBlock)(NSInteger totalDataCount);
26 | @end
27 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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.
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/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 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/SDWebImage/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2016 Olivier Poitrey rs@dailymotion.com
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 furnished
8 | to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in all
11 | 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 |
21 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/SDWebImage/SDWebImage/NSData+ImageContentType.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Fabrice Aneche on 06/01/14.
3 | // Copyright (c) 2014 Dailymotion. All rights reserved.
4 | //
5 |
6 | #import
7 |
8 | @interface NSData (ImageContentType)
9 |
10 | /**
11 | * Compute the content type for an image data
12 | *
13 | * @param data the input data
14 | *
15 | * @return the content type as string (i.e. image/jpeg, image/gif)
16 | */
17 | + (NSString *)sd_contentTypeForImageData:(NSData *)data;
18 |
19 | @end
20 |
21 |
22 | @interface NSData (ImageContentTypeDeprecated)
23 |
24 | + (NSString *)contentTypeForImageData:(NSData *)data __deprecated_msg("Use `sd_contentTypeForImageData:`");
25 |
26 | @end
27 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/SDWebImage/SDWebImage/NSData+ImageContentType.m:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Fabrice Aneche on 06/01/14.
3 | // Copyright (c) 2014 Dailymotion. All rights reserved.
4 | //
5 |
6 | #import "NSData+ImageContentType.h"
7 |
8 |
9 | @implementation NSData (ImageContentType)
10 |
11 | + (NSString *)sd_contentTypeForImageData:(NSData *)data {
12 | uint8_t c;
13 | [data getBytes:&c length:1];
14 | switch (c) {
15 | case 0xFF:
16 | return @"image/jpeg";
17 | case 0x89:
18 | return @"image/png";
19 | case 0x47:
20 | return @"image/gif";
21 | case 0x49:
22 | case 0x4D:
23 | return @"image/tiff";
24 | case 0x52:
25 | // R as RIFF for WEBP
26 | if ([data length] < 12) {
27 | return nil;
28 | }
29 |
30 | NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
31 | if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
32 | return @"image/webp";
33 | }
34 |
35 | return nil;
36 | }
37 | return nil;
38 | }
39 |
40 | @end
41 |
42 |
43 | @implementation NSData (ImageContentTypeDeprecated)
44 |
45 | + (NSString *)contentTypeForImageData:(NSData *)data {
46 | return [self sd_contentTypeForImageData:data];
47 | }
48 |
49 | @end
50 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/SDWebImage/SDWebImage/SDWebImageCompat.m:
--------------------------------------------------------------------------------
1 | //
2 | // SDWebImageCompat.m
3 | // SDWebImage
4 | //
5 | // Created by Olivier Poitrey on 11/12/12.
6 | // Copyright (c) 2012 Dailymotion. All rights reserved.
7 | //
8 |
9 | #import "SDWebImageCompat.h"
10 |
11 | #if !__has_feature(objc_arc)
12 | #error SDWebImage is ARC only. Either turn on ARC for the project or use -fobjc-arc flag
13 | #endif
14 |
15 | inline UIImage *SDScaledImageForKey(NSString *key, UIImage *image) {
16 | if (!image) {
17 | return nil;
18 | }
19 |
20 | if ([image.images count] > 0) {
21 | NSMutableArray *scaledImages = [NSMutableArray array];
22 |
23 | for (UIImage *tempImage in image.images) {
24 | [scaledImages addObject:SDScaledImageForKey(key, tempImage)];
25 | }
26 |
27 | return [UIImage animatedImageWithImages:scaledImages duration:image.duration];
28 | }
29 | else {
30 | if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
31 | CGFloat scale = 1;
32 | if (key.length >= 8) {
33 | NSRange range = [key rangeOfString:@"@2x."];
34 | if (range.location != NSNotFound) {
35 | scale = 2.0;
36 | }
37 |
38 | range = [key rangeOfString:@"@3x."];
39 | if (range.location != NSNotFound) {
40 | scale = 3.0;
41 | }
42 | }
43 |
44 | UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation];
45 | image = scaledImage;
46 | }
47 | return image;
48 | }
49 | }
50 |
51 | NSString *const SDWebImageErrorDomain = @"SDWebImageErrorDomain";
52 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/SDWebImage/SDWebImage/SDWebImageDecoder.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * Created by james on 9/28/11.
6 | *
7 | * For the full copyright and license information, please view the LICENSE
8 | * file that was distributed with this source code.
9 | */
10 |
11 | #import
12 | #import "SDWebImageCompat.h"
13 |
14 | @interface UIImage (ForceDecode)
15 |
16 | + (UIImage *)decodedImageWithImage:(UIImage *)image;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/SDWebImage/SDWebImage/SDWebImageOperation.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 |
11 | @protocol SDWebImageOperation
12 |
13 | - (void)cancel;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/SDWebImage/SDWebImage/UIImage+GIF.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+GIF.h
3 | // LBGIFImage
4 | //
5 | // Created by Laurin Brandner on 06.01.12.
6 | // Copyright (c) 2012 __MyCompanyName__. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIImage (GIF)
12 |
13 | + (UIImage *)sd_animatedGIFNamed:(NSString *)name;
14 |
15 | + (UIImage *)sd_animatedGIFWithData:(NSData *)data;
16 |
17 | - (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/SDWebImage/SDWebImage/UIImage+MultiFormat.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIImage+MultiFormat.h
3 | // SDWebImage
4 | //
5 | // Created by Olivier Poitrey on 07/06/13.
6 | // Copyright (c) 2013 Dailymotion. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface UIImage (MultiFormat)
12 |
13 | + (UIImage *)sd_imageWithData:(NSData *)data;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/SDWebImage/SDWebImage/UIView+WebCacheOperation.h:
--------------------------------------------------------------------------------
1 | /*
2 | * This file is part of the SDWebImage package.
3 | * (c) Olivier Poitrey
4 | *
5 | * For the full copyright and license information, please view the LICENSE
6 | * file that was distributed with this source code.
7 | */
8 |
9 | #import
10 | #import "SDWebImageManager.h"
11 |
12 | @interface UIView (WebCacheOperation)
13 |
14 | /**
15 | * Set the image load operation (storage in a UIView based dictionary)
16 | *
17 | * @param operation the operation
18 | * @param key key for storing the operation
19 | */
20 | - (void)sd_setImageLoadOperation:(id)operation forKey:(NSString *)key;
21 |
22 | /**
23 | * Cancel all operations for the current UIView and key
24 | *
25 | * @param key key for identifying the operations
26 | */
27 | - (void)sd_cancelImageLoadOperationWithKey:(NSString *)key;
28 |
29 | /**
30 | * Just remove the operations corresponding to the current UIView and key without cancelling them
31 | *
32 | * @param key key for identifying the operations
33 | */
34 | - (void)sd_removeImageLoadOperationWithKey:(NSString *)key;
35 |
36 | @end
37 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/YYCache/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 ibireme
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/YYImage/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 ibireme
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/YYText/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 ibireme
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/EasyLife/Classes/Other/Vendor/YYWebImage/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 ibireme
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/EasyLife/ELPrefixHeader.pch:
--------------------------------------------------------------------------------
1 | //
2 | // ELPrefixHeader.pch
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/10/8.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #ifndef ELPrefixHeader_pch
10 | #define ELPrefixHeader_pch
11 |
12 | #import "ELUtils.h"
13 | #import "ELCommonConstant.h"
14 | #import "ELDefaultHeader.h"
15 | #import "Masonry.h"
16 | #import "UIImageView+WebCache.h"
17 | #import "UIView+Frame.h"
18 | #import "ELCommonAPIConstant.h"
19 | #import "MBProgressHUD+NHAddition.h"
20 | #import "UIViewController+HUD.h"
21 |
22 | #endif /* ELPrefixHeader_pch */
23 |
--------------------------------------------------------------------------------
/EasyLife/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 | UILaunchStoryboardName
31 | LaunchScreen
32 | UIRequiredDeviceCapabilities
33 |
34 | armv7
35 |
36 | UISupportedInterfaceOrientations
37 |
38 | UIInterfaceOrientationPortrait
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/EasyLife/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // EasyLife
4 | //
5 | // Created by Sekorm on 16/9/29.
6 | // Copyright © 2016年 EL. 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 |
--------------------------------------------------------------------------------
/EasyLifeTests/EasyLifeTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // EasyLifeTests.m
3 | // EasyLifeTests
4 | //
5 | // Created by Sekorm on 16/9/29.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface EasyLifeTests : XCTestCase
12 |
13 | @end
14 |
15 | @implementation EasyLifeTests
16 |
17 | - (void)setUp {
18 | [super setUp];
19 | // Put setup code here. This method is called before the invocation of each test method in the class.
20 | }
21 |
22 | - (void)tearDown {
23 | // Put teardown code here. This method is called after the invocation of each test method in the class.
24 | [super tearDown];
25 | }
26 |
27 | - (void)testExample {
28 | // This is an example of a functional test case.
29 | // Use XCTAssert and related functions to verify your tests produce the correct results.
30 | }
31 |
32 | - (void)testPerformanceExample {
33 | // This is an example of a performance test case.
34 | [self measureBlock:^{
35 | // Put the code you want to measure the time of here.
36 | }];
37 | }
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/EasyLifeTests/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 |
--------------------------------------------------------------------------------
/EasyLifeUITests/EasyLifeUITests.m:
--------------------------------------------------------------------------------
1 | //
2 | // EasyLifeUITests.m
3 | // EasyLifeUITests
4 | //
5 | // Created by Sekorm on 16/9/29.
6 | // Copyright © 2016年 EL. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface EasyLifeUITests : XCTestCase
12 |
13 | @end
14 |
15 | @implementation EasyLifeUITests
16 |
17 | - (void)setUp {
18 | [super setUp];
19 |
20 | // Put setup code here. This method is called before the invocation of each test method in the class.
21 |
22 | // In UI tests it is usually best to stop immediately when a failure occurs.
23 | self.continueAfterFailure = NO;
24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
25 | [[[XCUIApplication alloc] init] launch];
26 |
27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
28 | }
29 |
30 | - (void)tearDown {
31 | // Put teardown code here. This method is called after the invocation of each test method in the class.
32 | [super tearDown];
33 | }
34 |
35 | - (void)testExample {
36 | // Use recording to get started writing UI tests.
37 | // Use XCTAssert and related functions to verify your tests produce the correct results.
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/EasyLifeUITests/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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # EasyLife
2 |
3 | 效果图如下
4 |
5 | 
6 |
7 |
8 | 
9 |
10 |
11 | 
12 |
13 |
14 | 
15 |
16 |
17 | 
18 |
19 |
20 | ---
21 |
22 |
23 | ### 数据来自聚合API,UI图标取自内涵段子
24 |
25 | 界面是自己随便整的,比较粗糙简单。
26 |
27 | 聚合Api有提供驾校考试的API,也想整进来,搞个大杂烩。由于需要自己设计效果,有点怕怕。。有比较好想法的朋友可以反馈给我。。
28 |
29 | 如果页面没有数据,有可能是请求次数到了上限。你替换成自己的试一试就好了。
30 |
31 | 如下:
32 |
33 | static const NSString * kJokerAppKey = @"d8d621f7c735a1be9c79a725daf5bde2" 聚合给的笑话AppKey
34 |
35 | ### 增加FM播放。
36 |
37 | 电台播放是基于IJKMediaFramework 实现的。
38 |
39 | 需要先导入IJKMediaFramework框架
40 |
41 | 关于IJKMediaFramework/IJKMediaFramework.h找不到的问题!!!
42 |
43 | 这还有一份已经打包好的(Release版), 下载地址:
44 |
45 | 链接:http://pan.baidu.com/s/1eRVetdK 密码:2dc0
46 |
47 | 下载后, 直接解压即可.
48 |
49 | 将你下载的framework拖入其中并拉进项目中
50 |
51 | ### 最后。
52 |
53 | 最后求一波星星。。予人玫瑰,手有余香。。。小生在此万分感谢。。。
54 |
55 |
--------------------------------------------------------------------------------