├── .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 | ![33.gif](http://upload-images.jianshu.io/upload_images/1338042-ef783b0250136bd4.gif?imageMogr2/auto-orient/strip) 6 | 7 | 8 | ![11.gif](http://upload-images.jianshu.io/upload_images/1338042-381077da150b5f1e.gif?imageMogr2/auto-orient/strip) 9 | 10 | 11 | ![22.gif](http://upload-images.jianshu.io/upload_images/1338042-b2242e2b1e364dc8.gif?imageMogr2/auto-orient/strip) 12 | 13 | 14 | ![44.gif](http://upload-images.jianshu.io/upload_images/1338042-9df8a373e6c0292d.gif?imageMogr2/auto-orient/strip) 15 | 16 | 17 | ![55.gif](http://upload-images.jianshu.io/upload_images/1338042-1c1b5e372466bd3a.gif?imageMogr2/auto-orient/strip) 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 | --------------------------------------------------------------------------------