├── .gitignore ├── .travis.yml ├── Example ├── FirstLineHeadIndentAnimation.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── FirstLineHeadIndentAnimation-Example.xcscheme ├── FirstLineHeadIndentAnimation.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings ├── FirstLineHeadIndentAnimation │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── FirstLineHeadIndentAnimation-Info.plist │ ├── FirstLineHeadIndentAnimation-Prefix.pch │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── collection_selected.imageset │ │ │ ├── Contents.json │ │ │ ├── collection_selected@2x.png │ │ │ └── collection_selected@3x.png │ │ ├── home_icon_play.imageset │ │ │ ├── Contents.json │ │ │ ├── home_icon_play@2x.png │ │ │ └── home_icon_play@3x.png │ │ ├── hotspot_icon_information.imageset │ │ │ ├── Contents.json │ │ │ ├── hotspot_icon_information@2x.png │ │ │ └── hotspot_icon_information@3x.png │ │ ├── hotspot_icon_interest_authentication.imageset │ │ │ ├── Contents.json │ │ │ ├── hotspot_icon_interest_authentication@2x.png │ │ │ └── hotspot_icon_interest_authentication@3x.png │ │ ├── hotspot_icon_like_normat.imageset │ │ │ ├── Contents.json │ │ │ ├── hotspot_icon_like_normat@2x.png │ │ │ └── hotspot_icon_like_normat@3x.png │ │ ├── hotspot_icon_like_selected.imageset │ │ │ ├── Contents.json │ │ │ ├── hotspot_icon_like_selected@2x.png │ │ │ └── hotspot_icon_like_selected@3x.png │ │ ├── hotspot_icon_more.imageset │ │ │ ├── Contents.json │ │ │ ├── hotspot_icon_more@2x.png │ │ │ └── hotspot_icon_more@3x.png │ │ ├── hotspot_icon_professional_authentication.imageset │ │ │ ├── Contents.json │ │ │ ├── hotspot_icon_professional_authentication@2x.png │ │ │ └── hotspot_icon_professional_authentication@3x.png │ │ ├── hotspot_icon_share.imageset │ │ │ ├── Contents.json │ │ │ ├── hotspot_icon_share@2x.png │ │ │ └── hotspot_icon_share@3x.png │ │ ├── my_icon_colours.imageset │ │ │ ├── Contents.json │ │ │ ├── my_icon_colours@2x.png │ │ │ └── my_icon_colours@3x.png │ │ ├── panda_error.imageset │ │ │ ├── Contents.json │ │ │ ├── panda_error@2x.png │ │ │ └── panda_error@3x.png │ │ ├── panda_favorite.imageset │ │ │ ├── Contents.json │ │ │ ├── panda_favorite@2x.png │ │ │ └── panda_favorite@3x.png │ │ ├── panda_networkerror.imageset │ │ │ ├── Contents.json │ │ │ ├── panda_networkerror@2x.png │ │ │ └── panda_networkerror@3x.png │ │ ├── player_pugc_collection.imageset │ │ │ ├── Contents.json │ │ │ ├── player_pugc_collection@2x.png │ │ │ └── player_pugc_collection@3x.png │ │ └── rect_shadow.imageset │ │ │ ├── Contents.json │ │ │ ├── rect_shadow@2x.png │ │ │ └── rect_shadow@3x.png │ ├── JPAppDelegate.h │ ├── JPAppDelegate.m │ ├── JPWebImage │ │ ├── JPImageView.h │ │ ├── JPImageView.m │ │ ├── JPRoundImageManager.h │ │ ├── JPRoundImageManager.m │ │ ├── JPWebImageHeader.h │ │ ├── JPWebImageManager.h │ │ ├── JPWebImageManager.m │ │ ├── UIButton+JPExtension.h │ │ ├── UIButton+JPExtension.m │ │ ├── UIImageView+JPExtension.h │ │ ├── UIImageView+JPExtension.m │ │ ├── YYWebImageHelper.h │ │ └── YYWebImageHelper.m │ ├── PUGC │ │ ├── Controller │ │ │ ├── PUGCViewController.h │ │ │ └── PUGCViewController.m │ │ ├── Model │ │ │ ├── WTVPUGCProfileModel.h │ │ │ ├── WTVPUGCProfileModel.m │ │ │ ├── pugc_0.json │ │ │ └── pugc_1.json │ │ ├── View │ │ │ ├── JPFadeFlowLayout.h │ │ │ ├── JPFadeFlowLayout.m │ │ │ ├── WLEmptyStateView.h │ │ │ ├── WLEmptyStateView.m │ │ │ ├── WTVPUGCOptionButton.h │ │ │ ├── WTVPUGCOptionButton.m │ │ │ ├── WTVPUGCProfileCell.h │ │ │ ├── WTVPUGCProfileCell.m │ │ │ ├── WTVPUGCProfileCollectionView.h │ │ │ ├── WTVPUGCProfileCollectionView.m │ │ │ ├── WTVPUGCProfileIcon.h │ │ │ ├── WTVPUGCProfileIcon.m │ │ │ ├── WTVPUGCProfileIconView.h │ │ │ ├── WTVPUGCProfileIconView.m │ │ │ ├── WTVPUGCProfilePlayView.h │ │ │ └── WTVPUGCProfilePlayView.m │ │ └── ViewModel │ │ │ ├── WTVPUGCProfileCellModel.h │ │ │ └── WTVPUGCProfileCellModel.m │ ├── UIApplication+JPExtension.h │ ├── UIApplication+JPExtension.m │ ├── ViewController.h │ ├── ViewController.m │ ├── en.lproj │ │ └── InfoPlist.strings │ └── main.m ├── Podfile ├── Podfile.lock ├── Pods │ ├── JPBasic │ │ ├── JPBasic │ │ │ └── Classes │ │ │ │ ├── JPCategory │ │ │ │ ├── Foundation │ │ │ │ │ ├── NSDate+JPExtension.h │ │ │ │ │ ├── NSDate+JPExtension.m │ │ │ │ │ ├── NSObject+JPExtension.h │ │ │ │ │ ├── NSObject+JPExtension.m │ │ │ │ │ ├── NSString+JPExtension.h │ │ │ │ │ └── NSString+JPExtension.m │ │ │ │ └── UIKit │ │ │ │ │ ├── UIColor+JPExtension.h │ │ │ │ │ ├── UIColor+JPExtension.m │ │ │ │ │ ├── UIImage+JPExtension.h │ │ │ │ │ ├── UIImage+JPExtension.m │ │ │ │ │ ├── UINavigationBar+JPExtension.h │ │ │ │ │ ├── UINavigationBar+JPExtension.m │ │ │ │ │ ├── UIScrollView+JPExtension.h │ │ │ │ │ ├── UIScrollView+JPExtension.m │ │ │ │ │ ├── UIView+JPExtension.h │ │ │ │ │ ├── UIView+JPExtension.m │ │ │ │ │ ├── UIView+JPPOP.h │ │ │ │ │ ├── UIView+JPPOP.m │ │ │ │ │ ├── UIViewController+JPExtension.h │ │ │ │ │ ├── UIViewController+JPExtension.m │ │ │ │ │ ├── UIWindow+JPExtension.h │ │ │ │ │ └── UIWindow+JPExtension.m │ │ │ │ ├── JPConst │ │ │ │ ├── JPConstant.h │ │ │ │ ├── JPConstant.m │ │ │ │ └── JPMacro.h │ │ │ │ ├── JPCustomUnit │ │ │ │ ├── Button │ │ │ │ │ ├── JPCustomLayoutButton.h │ │ │ │ │ ├── JPCustomLayoutButton.m │ │ │ │ │ ├── JPIconButton.h │ │ │ │ │ ├── JPIconButton.m │ │ │ │ │ ├── JPMaskButton.h │ │ │ │ │ ├── JPMaskButton.m │ │ │ │ │ ├── JPNoHighlightButton.h │ │ │ │ │ ├── JPNoHighlightButton.m │ │ │ │ │ ├── JPScreenBorderButton.h │ │ │ │ │ ├── JPScreenBorderButton.m │ │ │ │ │ ├── JPUnderlineButton.h │ │ │ │ │ └── JPUnderlineButton.m │ │ │ │ ├── Model │ │ │ │ │ ├── JPProxy.h │ │ │ │ │ └── JPProxy.m │ │ │ │ ├── View │ │ │ │ │ ├── JPBadgeLabel.h │ │ │ │ │ ├── JPBadgeLabel.m │ │ │ │ │ ├── JPBasicPopView.h │ │ │ │ │ ├── JPBasicPopView.m │ │ │ │ │ ├── JPBounceView.h │ │ │ │ │ ├── JPBounceView.m │ │ │ │ │ ├── JPEmptyStateView.h │ │ │ │ │ ├── JPEmptyStateView.m │ │ │ │ │ ├── JPFPSLabel.h │ │ │ │ │ ├── JPFPSLabel.m │ │ │ │ │ ├── JPGradientView.h │ │ │ │ │ ├── JPGradientView.m │ │ │ │ │ ├── JPMaskView.h │ │ │ │ │ ├── JPMaskView.m │ │ │ │ │ ├── JPScreenEdgeLeftScrollView.h │ │ │ │ │ ├── JPScreenEdgeLeftScrollView.m │ │ │ │ │ ├── JPSeparateHeaderFooterView.h │ │ │ │ │ ├── JPSeparateHeaderFooterView.m │ │ │ │ │ ├── JPTextField.h │ │ │ │ │ ├── JPTextField.m │ │ │ │ │ ├── JPTextView.h │ │ │ │ │ └── JPTextView.m │ │ │ │ └── ViewController │ │ │ │ │ ├── JPSubCollectionViewController.h │ │ │ │ │ ├── JPSubCollectionViewController.m │ │ │ │ │ ├── JPSubScrollViewController.h │ │ │ │ │ ├── JPSubScrollViewController.m │ │ │ │ │ ├── JPSubTableViewController.h │ │ │ │ │ ├── JPSubTableViewController.m │ │ │ │ │ ├── JPViewController.h │ │ │ │ │ └── JPViewController.m │ │ │ │ ├── JPProgressHUD │ │ │ │ ├── JPProgressHUD.h │ │ │ │ └── JPProgressHUD.m │ │ │ │ └── JPTool │ │ │ │ ├── JPAlertControllerTool.h │ │ │ │ ├── JPAlertControllerTool.m │ │ │ │ ├── JPDeviceTool.h │ │ │ │ ├── JPDeviceTool.m │ │ │ │ ├── JPFileTool.h │ │ │ │ ├── JPFileTool.m │ │ │ │ ├── JPInteractiveTransition.h │ │ │ │ ├── JPInteractiveTransition.m │ │ │ │ ├── JPSolveTool.h │ │ │ │ ├── JPSolveTool.m │ │ │ │ ├── JPTextLayoutTool.h │ │ │ │ └── JPTextLayoutTool.m │ │ ├── LICENSE │ │ └── README.md │ ├── Local Podspecs │ │ └── FirstLineHeadIndentAnimation.podspec.json │ ├── MJExtension │ │ ├── LICENSE │ │ ├── MJExtension │ │ │ ├── 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 │ │ └── README.md │ ├── 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 │ │ │ │ ├── ko.lproj │ │ │ │ │ └── Localizable.strings │ │ │ │ ├── ru.lproj │ │ │ │ │ └── Localizable.strings │ │ │ │ ├── uk.lproj │ │ │ │ │ └── Localizable.strings │ │ │ │ ├── zh-Hans.lproj │ │ │ │ │ └── Localizable.strings │ │ │ │ └── zh-Hant.lproj │ │ │ │ │ └── Localizable.strings │ │ │ ├── MJRefresh.h │ │ │ ├── MJRefreshConfig.h │ │ │ ├── MJRefreshConfig.m │ │ │ ├── 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 │ ├── Manifest.lock │ ├── Masonry │ │ ├── LICENSE │ │ ├── Masonry │ │ │ ├── MASCompositeConstraint.h │ │ │ ├── MASCompositeConstraint.m │ │ │ ├── MASConstraint+Private.h │ │ │ ├── MASConstraint.h │ │ │ ├── MASConstraint.m │ │ │ ├── MASConstraintMaker.h │ │ │ ├── MASConstraintMaker.m │ │ │ ├── MASLayoutConstraint.h │ │ │ ├── MASLayoutConstraint.m │ │ │ ├── MASUtilities.h │ │ │ ├── MASViewAttribute.h │ │ │ ├── MASViewAttribute.m │ │ │ ├── MASViewConstraint.h │ │ │ ├── MASViewConstraint.m │ │ │ ├── Masonry.h │ │ │ ├── NSArray+MASAdditions.h │ │ │ ├── NSArray+MASAdditions.m │ │ │ ├── NSArray+MASShorthandAdditions.h │ │ │ ├── NSLayoutConstraint+MASDebugAdditions.h │ │ │ ├── NSLayoutConstraint+MASDebugAdditions.m │ │ │ ├── View+MASAdditions.h │ │ │ ├── View+MASAdditions.m │ │ │ ├── View+MASShorthandAdditions.h │ │ │ ├── ViewController+MASAdditions.h │ │ │ └── ViewController+MASAdditions.m │ │ └── README.md │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ ├── SVProgressHUD │ │ ├── LICENSE │ │ ├── README.md │ │ └── SVProgressHUD │ │ │ ├── SVIndefiniteAnimatedView.h │ │ │ ├── SVIndefiniteAnimatedView.m │ │ │ ├── SVProgressAnimatedView.h │ │ │ ├── SVProgressAnimatedView.m │ │ │ ├── SVProgressHUD.bundle │ │ │ ├── angle-mask.png │ │ │ ├── angle-mask@2x.png │ │ │ ├── angle-mask@3x.png │ │ │ ├── error.png │ │ │ ├── error@2x.png │ │ │ ├── error@3x.png │ │ │ ├── info.png │ │ │ ├── info@2x.png │ │ │ ├── info@3x.png │ │ │ ├── success.png │ │ │ ├── success@2x.png │ │ │ └── success@3x.png │ │ │ ├── SVProgressHUD.h │ │ │ ├── SVProgressHUD.m │ │ │ ├── SVRadialGradientLayer.h │ │ │ └── SVRadialGradientLayer.m │ ├── Target Support Files │ │ ├── JPBasic │ │ │ ├── JPBasic-Info.plist │ │ │ ├── JPBasic-dummy.m │ │ │ ├── JPBasic-prefix.pch │ │ │ ├── JPBasic-umbrella.h │ │ │ ├── JPBasic.debug.xcconfig │ │ │ ├── JPBasic.modulemap │ │ │ └── JPBasic.release.xcconfig │ │ ├── MJExtension │ │ │ ├── MJExtension-Info.plist │ │ │ ├── MJExtension-dummy.m │ │ │ ├── MJExtension-prefix.pch │ │ │ ├── MJExtension-umbrella.h │ │ │ ├── MJExtension.debug.xcconfig │ │ │ ├── MJExtension.modulemap │ │ │ └── MJExtension.release.xcconfig │ │ ├── MJRefresh │ │ │ ├── MJRefresh-Info.plist │ │ │ ├── MJRefresh-dummy.m │ │ │ ├── MJRefresh-prefix.pch │ │ │ ├── MJRefresh-umbrella.h │ │ │ ├── MJRefresh.debug.xcconfig │ │ │ ├── MJRefresh.modulemap │ │ │ └── MJRefresh.release.xcconfig │ │ ├── Masonry │ │ │ ├── Masonry-Info.plist │ │ │ ├── Masonry-dummy.m │ │ │ ├── Masonry-prefix.pch │ │ │ ├── Masonry-umbrella.h │ │ │ ├── Masonry.debug.xcconfig │ │ │ ├── Masonry.modulemap │ │ │ └── Masonry.release.xcconfig │ │ ├── Pods-FirstLineHeadIndentAnimation_Example │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Example-Info.plist │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Example-acknowledgements.markdown │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Example-acknowledgements.plist │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Example-dummy.m │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Example-frameworks.sh │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Example-umbrella.h │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Example.debug.xcconfig │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Example.modulemap │ │ │ └── Pods-FirstLineHeadIndentAnimation_Example.release.xcconfig │ │ ├── Pods-FirstLineHeadIndentAnimation_Tests │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Tests-Info.plist │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Tests-acknowledgements.markdown │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Tests-acknowledgements.plist │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Tests-dummy.m │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Tests-umbrella.h │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Tests.debug.xcconfig │ │ │ ├── Pods-FirstLineHeadIndentAnimation_Tests.modulemap │ │ │ └── Pods-FirstLineHeadIndentAnimation_Tests.release.xcconfig │ │ ├── SVProgressHUD │ │ │ ├── SVProgressHUD-Info.plist │ │ │ ├── SVProgressHUD-dummy.m │ │ │ ├── SVProgressHUD-prefix.pch │ │ │ ├── SVProgressHUD-umbrella.h │ │ │ ├── SVProgressHUD.debug.xcconfig │ │ │ ├── SVProgressHUD.modulemap │ │ │ └── SVProgressHUD.release.xcconfig │ │ ├── YYCache │ │ │ ├── YYCache-Info.plist │ │ │ ├── YYCache-dummy.m │ │ │ ├── YYCache-prefix.pch │ │ │ ├── YYCache-umbrella.h │ │ │ ├── YYCache.debug.xcconfig │ │ │ ├── YYCache.modulemap │ │ │ └── YYCache.release.xcconfig │ │ ├── YYImage │ │ │ ├── YYImage-Info.plist │ │ │ ├── YYImage-dummy.m │ │ │ ├── YYImage-prefix.pch │ │ │ ├── YYImage-umbrella.h │ │ │ ├── YYImage.debug.xcconfig │ │ │ ├── YYImage.modulemap │ │ │ └── YYImage.release.xcconfig │ │ ├── YYText │ │ │ ├── YYText-Info.plist │ │ │ ├── YYText-dummy.m │ │ │ ├── YYText-prefix.pch │ │ │ ├── YYText-umbrella.h │ │ │ ├── YYText.debug.xcconfig │ │ │ ├── YYText.modulemap │ │ │ └── YYText.release.xcconfig │ │ ├── YYWebImage │ │ │ ├── YYWebImage-Info.plist │ │ │ ├── YYWebImage-dummy.m │ │ │ ├── YYWebImage-prefix.pch │ │ │ ├── YYWebImage-umbrella.h │ │ │ ├── YYWebImage.debug.xcconfig │ │ │ ├── YYWebImage.modulemap │ │ │ └── YYWebImage.release.xcconfig │ │ └── pop │ │ │ ├── pop-Info.plist │ │ │ ├── pop-dummy.m │ │ │ ├── pop-prefix.pch │ │ │ ├── pop-umbrella.h │ │ │ ├── pop.debug.xcconfig │ │ │ ├── pop.modulemap │ │ │ └── pop.release.xcconfig │ ├── 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 │ │ └── YYText │ │ │ ├── Component │ │ │ ├── YYTextContainerView.h │ │ │ ├── YYTextContainerView.m │ │ │ ├── YYTextDebugOption.h │ │ │ ├── YYTextDebugOption.m │ │ │ ├── YYTextEffectWindow.h │ │ │ ├── YYTextEffectWindow.m │ │ │ ├── YYTextInput.h │ │ │ ├── YYTextInput.m │ │ │ ├── YYTextKeyboardManager.h │ │ │ ├── YYTextKeyboardManager.m │ │ │ ├── YYTextLayout.h │ │ │ ├── YYTextLayout.m │ │ │ ├── YYTextLine.h │ │ │ ├── YYTextLine.m │ │ │ ├── YYTextMagnifier.h │ │ │ ├── YYTextMagnifier.m │ │ │ ├── YYTextSelectionView.h │ │ │ └── YYTextSelectionView.m │ │ │ ├── String │ │ │ ├── YYTextArchiver.h │ │ │ ├── YYTextArchiver.m │ │ │ ├── YYTextAttribute.h │ │ │ ├── YYTextAttribute.m │ │ │ ├── YYTextParser.h │ │ │ ├── YYTextParser.m │ │ │ ├── YYTextRubyAnnotation.h │ │ │ ├── YYTextRubyAnnotation.m │ │ │ ├── YYTextRunDelegate.h │ │ │ └── YYTextRunDelegate.m │ │ │ ├── Utility │ │ │ ├── NSAttributedString+YYText.h │ │ │ ├── NSAttributedString+YYText.m │ │ │ ├── NSParagraphStyle+YYText.h │ │ │ ├── NSParagraphStyle+YYText.m │ │ │ ├── UIPasteboard+YYText.h │ │ │ ├── UIPasteboard+YYText.m │ │ │ ├── UIView+YYText.h │ │ │ ├── UIView+YYText.m │ │ │ ├── YYTextAsyncLayer.h │ │ │ ├── YYTextAsyncLayer.m │ │ │ ├── YYTextTransaction.h │ │ │ ├── YYTextTransaction.m │ │ │ ├── YYTextUtilities.h │ │ │ ├── YYTextUtilities.m │ │ │ ├── YYTextWeakProxy.h │ │ │ └── YYTextWeakProxy.m │ │ │ ├── YYLabel.h │ │ │ ├── YYLabel.m │ │ │ ├── YYText.h │ │ │ ├── YYTextView.h │ │ │ └── YYTextView.m │ ├── 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 │ └── pop │ │ ├── LICENSE │ │ ├── README.md │ │ └── pop │ │ ├── POP.h │ │ ├── POPAction.h │ │ ├── POPAnimatableProperty.h │ │ ├── POPAnimatableProperty.mm │ │ ├── POPAnimatablePropertyTypes.h │ │ ├── POPAnimation.h │ │ ├── POPAnimation.mm │ │ ├── POPAnimationEvent.h │ │ ├── POPAnimationEvent.mm │ │ ├── POPAnimationEventInternal.h │ │ ├── POPAnimationExtras.h │ │ ├── POPAnimationExtras.mm │ │ ├── POPAnimationInternal.h │ │ ├── POPAnimationPrivate.h │ │ ├── POPAnimationRuntime.h │ │ ├── POPAnimationRuntime.mm │ │ ├── POPAnimationTracer.h │ │ ├── POPAnimationTracer.mm │ │ ├── POPAnimationTracerInternal.h │ │ ├── POPAnimator.h │ │ ├── POPAnimator.mm │ │ ├── POPAnimatorPrivate.h │ │ ├── POPBasicAnimation.h │ │ ├── POPBasicAnimation.mm │ │ ├── POPBasicAnimationInternal.h │ │ ├── POPCGUtils.h │ │ ├── POPCGUtils.mm │ │ ├── POPCustomAnimation.h │ │ ├── POPCustomAnimation.mm │ │ ├── POPDecayAnimation.h │ │ ├── POPDecayAnimation.mm │ │ ├── POPDecayAnimationInternal.h │ │ ├── POPDefines.h │ │ ├── POPGeometry.h │ │ ├── POPGeometry.mm │ │ ├── POPLayerExtras.h │ │ ├── POPLayerExtras.mm │ │ ├── POPMath.h │ │ ├── POPMath.mm │ │ ├── POPPropertyAnimation.h │ │ ├── POPPropertyAnimation.mm │ │ ├── POPPropertyAnimationInternal.h │ │ ├── POPSpringAnimation.h │ │ ├── POPSpringAnimation.mm │ │ ├── POPSpringAnimationInternal.h │ │ ├── POPSpringSolver.h │ │ ├── POPVector.h │ │ ├── POPVector.mm │ │ └── WebCore │ │ ├── FloatConversion.h │ │ ├── TransformationMatrix.cpp │ │ ├── TransformationMatrix.h │ │ └── UnitBezier.h └── Tests │ ├── Tests-Info.plist │ ├── Tests-Prefix.pch │ ├── Tests.m │ └── en.lproj │ └── InfoPlist.strings ├── FirstLineHeadIndentAnimation.podspec ├── LICENSE ├── README.md └── _Pods.xcodeproj /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 26 | # Carthage/Checkouts 27 | 28 | Carthage/Build 29 | 30 | # We recommend against adding the Pods directory to your .gitignore. However 31 | # you should judge for yourself, the pros and cons are mentioned at: 32 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 33 | # 34 | # Note: if you ignore the Pods directory, make sure to uncomment 35 | # `pod install` in .travis.yml 36 | # 37 | # Pods/ 38 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * https://www.objc.io/issues/6-build-tools/travis-ci/ 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | script: 13 | - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/FirstLineHeadIndentAnimation.xcworkspace -scheme FirstLineHeadIndentAnimation-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildSystemType 6 | Latest 7 | PreviewsEnabled 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/FirstLineHeadIndentAnimation-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | @import UIKit; 15 | @import Foundation; 16 | 17 | #define MAS_SHORTHAND_GLOBALS 18 | #import 19 | #import "JPSolveTool.h" 20 | #import "JPMacro.h" 21 | #import "UIView+JPExtension.h" 22 | #import "UIView+JPPOP.h" 23 | #import "UIColor+JPExtension.h" 24 | #import "JPProgressHUD.h" 25 | #import "JPFileTool.h" 26 | #import "UIViewController+JPExtension.h" 27 | #import "UIImage+JPExtension.h" 28 | #import "NSObject+JPExtension.h" 29 | #import "NSString+JPExtension.h" 30 | #import "JPProxy.h" 31 | #import "MJExtension.h" 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/collection_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "collection_selected@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "collection_selected@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/collection_selected.imageset/collection_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/collection_selected.imageset/collection_selected@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/collection_selected.imageset/collection_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/collection_selected.imageset/collection_selected@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/home_icon_play.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "home_icon_play@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "home_icon_play@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/home_icon_play.imageset/home_icon_play@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/home_icon_play.imageset/home_icon_play@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/home_icon_play.imageset/home_icon_play@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/home_icon_play.imageset/home_icon_play@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_information.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "hotspot_icon_information@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "hotspot_icon_information@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_information.imageset/hotspot_icon_information@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_information.imageset/hotspot_icon_information@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_information.imageset/hotspot_icon_information@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_information.imageset/hotspot_icon_information@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_interest_authentication.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "hotspot_icon_interest_authentication@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "hotspot_icon_interest_authentication@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_interest_authentication.imageset/hotspot_icon_interest_authentication@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_interest_authentication.imageset/hotspot_icon_interest_authentication@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_interest_authentication.imageset/hotspot_icon_interest_authentication@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_interest_authentication.imageset/hotspot_icon_interest_authentication@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_like_normat.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "hotspot_icon_like_normat@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "hotspot_icon_like_normat@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_like_normat.imageset/hotspot_icon_like_normat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_like_normat.imageset/hotspot_icon_like_normat@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_like_normat.imageset/hotspot_icon_like_normat@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_like_normat.imageset/hotspot_icon_like_normat@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_like_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "hotspot_icon_like_selected@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "hotspot_icon_like_selected@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_like_selected.imageset/hotspot_icon_like_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_like_selected.imageset/hotspot_icon_like_selected@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_like_selected.imageset/hotspot_icon_like_selected@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_like_selected.imageset/hotspot_icon_like_selected@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_more.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "hotspot_icon_more@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "hotspot_icon_more@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_more.imageset/hotspot_icon_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_more.imageset/hotspot_icon_more@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_more.imageset/hotspot_icon_more@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_more.imageset/hotspot_icon_more@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_professional_authentication.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "hotspot_icon_professional_authentication@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "hotspot_icon_professional_authentication@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_professional_authentication.imageset/hotspot_icon_professional_authentication@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_professional_authentication.imageset/hotspot_icon_professional_authentication@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_professional_authentication.imageset/hotspot_icon_professional_authentication@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_professional_authentication.imageset/hotspot_icon_professional_authentication@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_share.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "hotspot_icon_share@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "hotspot_icon_share@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_share.imageset/hotspot_icon_share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_share.imageset/hotspot_icon_share@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_share.imageset/hotspot_icon_share@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/hotspot_icon_share.imageset/hotspot_icon_share@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/my_icon_colours.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "my_icon_colours@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "my_icon_colours@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/my_icon_colours.imageset/my_icon_colours@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/my_icon_colours.imageset/my_icon_colours@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/my_icon_colours.imageset/my_icon_colours@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/my_icon_colours.imageset/my_icon_colours@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_error.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "panda_error@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "panda_error@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_error.imageset/panda_error@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_error.imageset/panda_error@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_error.imageset/panda_error@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_error.imageset/panda_error@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_favorite.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "panda_favorite@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "panda_favorite@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_favorite.imageset/panda_favorite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_favorite.imageset/panda_favorite@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_favorite.imageset/panda_favorite@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_favorite.imageset/panda_favorite@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_networkerror.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "panda_networkerror@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "panda_networkerror@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_networkerror.imageset/panda_networkerror@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_networkerror.imageset/panda_networkerror@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_networkerror.imageset/panda_networkerror@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/panda_networkerror.imageset/panda_networkerror@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/player_pugc_collection.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "player_pugc_collection@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "player_pugc_collection@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/player_pugc_collection.imageset/player_pugc_collection@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/player_pugc_collection.imageset/player_pugc_collection@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/player_pugc_collection.imageset/player_pugc_collection@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/player_pugc_collection.imageset/player_pugc_collection@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/rect_shadow.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "rect_shadow@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "rect_shadow@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/rect_shadow.imageset/rect_shadow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/rect_shadow.imageset/rect_shadow@2x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/Images.xcassets/rect_shadow.imageset/rect_shadow@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/FirstLineHeadIndentAnimation/Images.xcassets/rect_shadow.imageset/rect_shadow@3x.png -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/JPAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPAppDelegate.h 3 | // FirstLineHeadIndentAnimation 4 | // 5 | // Created by zhoujianping24@hotmail.com on 05/15/2020. 6 | // Copyright (c) 2020 zhoujianping24@hotmail.com. All rights reserved. 7 | // 8 | 9 | @import UIKit; 10 | 11 | @interface JPAppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/JPWebImage/JPRoundImageManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPRoundImageManager.h 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2020/4/13. 6 | // Copyright © 2020 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "YYWebImageHelper.h" 12 | 13 | @interface JPRoundImageManager : NSObject 14 | + (YYWebImageManager *)sharedManager; 15 | 16 | /** 沙盒是否含有图片 */ 17 | + (void)cachedImageExistsForURL:(NSURL *)url completed:(void(^)(BOOL isInCache))completed; 18 | 19 | /** 从沙盒获取图片 */ 20 | + (UIImage *)imageFromDiskCacheForURL:(NSURL *)url; 21 | 22 | /** 清除内存 */ 23 | + (void)clearMemory; 24 | /** 清除磁盘 */ 25 | + (void)clearDisk; 26 | /** 清除全部 */ 27 | + (void)clearAll; 28 | 29 | /** 30 | * 下载图片 其中progress、transform、completed均在子线程中,除了transform其余需要刷新UI记得回到主线程 31 | */ 32 | + (void)downloadImageWithURL:(NSURL *)imageURL 33 | options:(JPWebImageOptions)options 34 | progress:(JPSetImageProgress)progress 35 | transform:(JPSetImageTransform)transform 36 | completed:(JPSetImageCompleted)completed; 37 | @end 38 | 39 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/JPWebImage/JPWebImageManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPWebImageManager.h 3 | // Infinitee2.0 4 | // 5 | // Created by guanning on 2017/7/3. 6 | // Copyright © 2017年 Infinitee. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "JPWebImageHeader.h" 11 | 12 | @interface JPWebImageManager : NSObject 13 | /** 沙盒是否含有图片 */ 14 | + (void)cachedImageExistsForURL:(NSURL *)url completed:(void(^)(BOOL isInCache))completed; 15 | 16 | /** 从沙盒获取图片 */ 17 | + (UIImage *)imageFromDiskCacheForURL:(NSURL *)url; 18 | 19 | /** 清除内存 */ 20 | + (void)clearMemory; 21 | /** 清除磁盘 */ 22 | + (void)clearDisk; 23 | /** 清除全部 */ 24 | + (void)clearAll; 25 | 26 | /** 27 | * 下载图片 其中progress、transform、completed均在子线程中,除了transform其余需要刷新UI记得回到主线程 28 | */ 29 | + (void)downloadImageWithURL:(NSURL *)imageURL 30 | options:(JPWebImageOptions)options 31 | progress:(JPSetImageProgress)progress 32 | transform:(JPSetImageTransform)transform 33 | completed:(JPSetImageCompleted)completed; 34 | @end 35 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/JPWebImage/YYWebImageHelper.h: -------------------------------------------------------------------------------- 1 | // 2 | // YYWebImageHelper.h 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2020/4/13. 6 | // Copyright © 2020 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "JPWebImageHeader.h" 11 | #import 12 | 13 | @interface YYWebImageHelper : NSObject 14 | 15 | + (YYWebImageOptions)jp2yyOptions:(JPWebImageOptions)options; 16 | 17 | + (YYWebImageProgressBlock)jp2yyProgress:(JPSetImageProgress)progress; 18 | + (YYWebImageTransformBlock)jp2yyTransform:(JPSetImageTransform)transform; 19 | + (YYWebImageCompletionBlock)jp2yyCompletion:(JPSetImageCompleted)completed; 20 | 21 | + (JPWebImageFromType)yy2jpFromType:(YYWebImageFromType)from; 22 | + (JPWebImageStage)yy2jpStage:(YYWebImageStage)stage; 23 | 24 | @end 25 | 26 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/PUGC/Controller/PUGCViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PUGCViewController.h 3 | // FirstLineHeadIndentAnimation-Example_Example 4 | // 5 | // Created by 周健平 on 2020/5/14. 6 | // Copyright © 2020 zhoujianping24@hotmail.com. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PUGCViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/PUGC/Model/WTVPUGCProfileModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // WTVPUGCProfileModel.m 3 | // FirstLineHeadIndentAnimation-Example_Example 4 | // 5 | // Created by 周健平 on 2020/5/14. 6 | // Copyright © 2020 zhoujianping24@hotmail.com. All rights reserved. 7 | // 8 | 9 | #import "WTVPUGCProfileModel.h" 10 | 11 | @implementation WTVPUGCProfileModel 12 | 13 | #pragma mark - MJExtension method 14 | 15 | // 自定义【属性名】 16 | + (NSDictionary *)mj_replacedKeyFromPropertyName { 17 | /* 18 | @key:自定义的属性名 19 | @value:服务器返回的属性名 20 | */ 21 | return @{@"relateModel": @"relateVideo"}; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/PUGC/View/JPFadeFlowLayout.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPFadeFlowLayout.h 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2019/9/14. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPFadeFlowLayout : UICollectionViewFlowLayout 12 | @property (nonatomic, assign) CGPoint scale; 13 | @end 14 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/PUGC/View/WTVPUGCOptionButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // WTVPUGCOptionButton.h 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2020/4/22. 6 | // Copyright © 2020 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import "JPBounceView.h" 10 | 11 | @interface WTVPUGCOptionButton : JPBounceView 12 | + (CGSize)buttonSize; 13 | + (instancetype)zanButton; 14 | + (instancetype)collectButton; 15 | + (instancetype)forwardButton; 16 | + (instancetype)commentButton; 17 | + (instancetype)moreButton; 18 | 19 | @property (nonatomic, weak) UIImageView *iconView; 20 | @property (nonatomic, weak) UILabel *countLabel; 21 | 22 | @property (nonatomic, strong) NSString *normalIcon; 23 | @property (nonatomic, strong) NSString *selectIcon; 24 | 25 | @property (nonatomic, strong) UIColor *normalColor; 26 | @property (nonatomic, strong) UIColor *selectColor; 27 | 28 | - (void)setCountStr:(NSString *)countStr; 29 | - (NSString *)countStr; 30 | 31 | @property (nonatomic, assign) BOOL isSelected; 32 | - (void)setIsSelected:(BOOL)isSelected animated:(BOOL)isAnamated; 33 | @end 34 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/PUGC/View/WTVPUGCProfileIcon.h: -------------------------------------------------------------------------------- 1 | // 2 | // WTVPUGCProfileIcon.h 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2020/4/17. 6 | // Copyright © 2020 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface WTVPUGCProfileIcon : UIView 12 | - (instancetype)initWithFrame:(CGRect)frame logoWH:(CGFloat)logoWH; 13 | - (instancetype)initWithLogoWH:(CGFloat)logoWH; 14 | @property (nonatomic, strong) UIImageView *imageView; 15 | @property (nonatomic, strong) UIImageView *logoView; 16 | 17 | - (void)showLogo:(BOOL)isAnimated; 18 | - (void)hideLogo:(BOOL)isAnimated; 19 | 20 | @property (nonatomic, assign) BOOL isLiving; 21 | - (void)setIsLiving:(BOOL)isLiving animated:(BOOL)isAnimated; 22 | @end 23 | 24 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/PUGC/View/WTVPUGCProfileIconView.h: -------------------------------------------------------------------------------- 1 | // 2 | // WTVPUGCProfileIconView.h 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2020/5/12. 6 | // Copyright © 2020 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "WTVPUGCProfileIcon.h" 11 | 12 | @interface WTVPUGCProfileIconView : UIView 13 | + (CGFloat)iconWH; 14 | + (instancetype)iconView; 15 | @property (nonatomic, strong) WTVPUGCProfileIcon *icon; 16 | @property (nonatomic, strong) UILabel *nameLabel; 17 | @property (nonatomic, strong) UILabel *bottomLabel; 18 | @property (nonatomic, strong) UIButton *followBtn; 19 | @property (nonatomic, strong) UIView *followBtnLine; 20 | @property (nonatomic, assign) BOOL isNotNeedFollow; 21 | - (void)setIsFollowed:(BOOL)isFollowed animated:(BOOL)isAnimated; 22 | @end 23 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/UIApplication+JPExtension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIApplication+JPExtension.h 3 | // Infinitee2.0 4 | // 5 | // Created by 周健平 on 2019/7/11. 6 | // Copyright © 2019 Infinitee. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIApplication (JPExtension) 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // FirstLineHeadIndentAnimation 4 | // 5 | // Created by zhoujianping24@hotmail.com on 05/15/2020. 6 | // Copyright (c) 2020 zhoujianping24@hotmail.com. All rights reserved. 7 | // 8 | 9 | @import UIKit; 10 | 11 | @interface ViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Example/FirstLineHeadIndentAnimation/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // FirstLineHeadIndentAnimation 4 | // 5 | // Created by zhoujianping24@hotmail.com on 05/15/2020. 6 | // Copyright (c) 2020 zhoujianping24@hotmail.com. All rights reserved. 7 | // 8 | 9 | @import UIKit; 10 | #import "JPAppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) 13 | { 14 | @autoreleasepool { 15 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([JPAppDelegate class])); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | source 'https://github.com/CocoaPods/Specs.git' 2 | 3 | use_frameworks! 4 | 5 | platform :ios, '8.0' 6 | 7 | target 'FirstLineHeadIndentAnimation_Example' do 8 | 9 | pod 'JPBasic' 10 | pod 'YYWebImage' 11 | pod 'MJRefresh' 12 | pod 'MJExtension' 13 | 14 | target 'FirstLineHeadIndentAnimation_Tests' do 15 | inherit! :search_paths 16 | 17 | 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCategory/Foundation/NSDate+JPExtension.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDate+JPExtension.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2019/5/15. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSDate (JPExtension) 12 | + (NSString *)jp_hhmmssStringWithTimeInt:(NSTimeInterval)timeInt; 13 | + (NSString *)jp_hhmmssSSStringForCurrentDate; 14 | - (NSString *)jp_hhmmssString; 15 | - (NSString *)jp_hhmmssSSString; 16 | - (NSDateComponents *)jp_ddHHmmssDeltaFromNow; 17 | 18 | - (NSDateComponents *)jp_deltaFromDate:(NSDate *)fromDate; 19 | - (NSDateComponents *)jp_deltaToDate:(NSDate *)toDate; 20 | + (NSDateComponents *)jp_deltaFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate; 21 | @end 22 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCategory/Foundation/NSObject+JPExtension.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+JPExtension.h 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2018/7/23. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSObject (JPExtension) 12 | + (NSString *)jp_className; 13 | - (NSString *)jp_className; 14 | 15 | + (BOOL)jp_isMetaClass; 16 | + (Class)jp_metaClass; 17 | - (Class)jp_metaClass; 18 | 19 | + (void)jp_lookIvarList; 20 | - (void)jp_lookIvarList; 21 | 22 | + (void)jp_lookPropertyList; 23 | - (void)jp_lookPropertyList; 24 | 25 | + (void)jp_lookMethodList; 26 | - (void)jp_lookMethodList; 27 | 28 | + (NSInteger)jp_instanceSize; 29 | - (NSInteger)jp_instanceSize; 30 | 31 | - (NSInteger)jp_mallocSize; 32 | 33 | + (void)jp_swizzleInstanceMethodsWithOriginalSelector:(SEL)originalSelector swizzledSelector:(SEL)swizzledSelector; 34 | + (void)jp_swizzleClassMethodsWithOriginalSelector:(SEL)originalSelector swizzledSelector:(SEL)swizzledSelector; 35 | @end 36 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCategory/Foundation/NSString+JPExtension.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+JPExtension.h 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2018/4/11. 6 | // Copyright © 2018年 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | CG_INLINE bool 12 | JPStringEqualToString(NSString *str1, NSString *str2) { 13 | if (!str1 && !str2) return true; 14 | if ((str1 && str2) && [str1 isEqualToString:str2]) return true; 15 | return false; 16 | } 17 | 18 | @interface NSString (JPExtension) 19 | 20 | /** 判断是否全是空格 */ 21 | - (BOOL)jp_isNotEmpty; 22 | - (BOOL)jp_isNotNull; 23 | 24 | /** 判断是否纯数字 */ 25 | - (BOOL)jp_isNumber; 26 | 27 | - (BOOL)jp_isPhoneNumber; 28 | 29 | - (NSString *)jp_examineTextWithTextHandle:(NSString *(^)(BOOL isNullStr, NSString *text))textHandle; 30 | 31 | - (NSString *)jp_createDateStrWithSeparateStr:(NSString *)separateStr; 32 | 33 | + (NSString *)jp_durationFormatWithFromTime:(NSString *)fromTime toTime:(NSString *)toTime separateStr:(NSString *)separateStr connectStr:(NSString *)connectStr; 34 | 35 | - (NSAttributedString *)jp_matchesKeywords:(NSString *)keywords font:(UIFont *)font keywordsColor:(UIColor *)keywordsColor otherColor:(UIColor *)otherColor; 36 | 37 | - (NSString *)jp_appVersionFormat; 38 | 39 | /** 判断如果包含中文 */ 40 | - (BOOL)jp_containsChinese; 41 | 42 | /** 判断是否身份证号码 */ 43 | - (BOOL)jp_isCardID; 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCategory/UIKit/UINavigationBar+JPExtension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UINavigationBar+JPExtension.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2019/1/9. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UINavigationBar (JPExtension) 12 | - (UIView *)jp_setupCustomNavigationBgView:(UIView *)customBgView; 13 | - (UIView *)jp_setupNavigationBgView; // white view 14 | - (void)jp_setNavigationBgColor:(UIColor *)color; 15 | - (void)jp_setNavigationBgAlpha:(CGFloat)alpha; 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCategory/UIKit/UINavigationBar+JPExtension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UINavigationBar+JPExtension.m 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2019/1/9. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import "UINavigationBar+JPExtension.h" 10 | #import 11 | #import 12 | 13 | @implementation UINavigationBar (JPExtension) 14 | 15 | - (void)setJp_navBgView:(UIView *)jp_navBgView { 16 | objc_setAssociatedObject(self, @selector(jp_navBgView), jp_navBgView, OBJC_ASSOCIATION_ASSIGN); 17 | } 18 | - (UIView *)jp_navBgView { 19 | return objc_getAssociatedObject(self, _cmd); 20 | } 21 | 22 | - (UIView *)jp_setupCustomNavigationBgView:(UIView *)customBgView { 23 | if (self.jp_navBgView) [self.jp_navBgView removeFromSuperview]; 24 | 25 | [self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 26 | [self setShadowImage:[UIImage new]]; 27 | 28 | UIView *navBgView = [self valueForKey:@"backgroundView"]; 29 | [navBgView addSubview:customBgView]; 30 | [customBgView mas_makeConstraints:^(MASConstraintMaker *make) { 31 | make.edges.equalTo(navBgView); 32 | }]; 33 | self.jp_navBgView = customBgView; 34 | 35 | return customBgView; 36 | } 37 | 38 | - (UIView *)jp_setupNavigationBgView { 39 | UIView *navBgView = [UIView new]; 40 | navBgView.backgroundColor = UIColor.whiteColor; 41 | return [self jp_setupCustomNavigationBgView:navBgView]; 42 | } 43 | 44 | - (void)jp_setNavigationBgColor:(UIColor *)color { 45 | if (!self.jp_navBgView) return; 46 | self.jp_navBgView.backgroundColor = color; 47 | } 48 | 49 | - (void)jp_setNavigationBgAlpha:(CGFloat)alpha { 50 | if (!self.jp_navBgView) return; 51 | self.jp_navBgView.alpha = alpha; 52 | } 53 | @end 54 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCategory/UIKit/UIScrollView+JPExtension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+JPExtension.h 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2018/12/11. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIScrollView (JPExtension) 12 | - (void)jp_contentInsetAdjustmentNever; 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCategory/UIKit/UIScrollView+JPExtension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+JPExtension.m 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2018/12/11. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import "UIScrollView+JPExtension.h" 10 | 11 | @implementation UIScrollView (JPExtension) 12 | 13 | - (void)jp_contentInsetAdjustmentNever { 14 | if (@available(iOS 11.0, *)) { 15 | self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; 16 | if ([self isKindOfClass:UITableView.class]) { 17 | UITableView *tableView = (UITableView *)self; 18 | tableView.estimatedRowHeight = 0; 19 | tableView.estimatedSectionHeaderHeight = 0; 20 | tableView.estimatedSectionFooterHeight = 0; 21 | } 22 | } 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCategory/UIKit/UIViewController+JPExtension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+JPExtension.h 3 | // Infinitee2.0 4 | // 5 | // Created by 周健平 on 2017/9/20. 6 | // Copyright © 2017年 Infinitee. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "UIScrollView+JPExtension.h" 11 | 12 | @interface UIViewController (JPExtension) 13 | - (UIViewController *)jp_topViewController; 14 | - (UINavigationController *)jp_topNavigationController; 15 | - (void)jp_contentInsetAdjustmentNever:(UIScrollView *)scrollView; 16 | - (BOOL)jp_isRootViewController; 17 | - (void)jp_popVC; 18 | @property (nonatomic, assign) BOOL jp_isHideNavigationBar; 19 | @property (nonatomic, assign) BOOL jp_isNotAutoSetBackBarButtonItem; 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCategory/UIKit/UIWindow+JPExtension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIWindow+JPExtension.h 3 | // AFNetworking 4 | // 5 | // Created by 周健平 on 2020/3/19. 6 | // 7 | 8 | #import 9 | 10 | @interface UIWindow (JPExtension) 11 | /** 获取顶层控制器 */ 12 | - (UIViewController *)jp_topViewController; 13 | + (UIViewController *)jp_topViewControllerFromKeyWindow; 14 | + (UIViewController *)jp_topViewControllerFromDelegateWindow; 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCategory/UIKit/UIWindow+JPExtension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIWindow+JPExtension.m 3 | // AFNetworking 4 | // 5 | // Created by 周健平 on 2020/3/19. 6 | // 7 | 8 | #import "UIWindow+JPExtension.h" 9 | 10 | @implementation UIWindow (JPExtension) 11 | 12 | /** 获取顶层控制器 */ 13 | - (UIViewController *)jp_topViewController { 14 | if (!self.rootViewController) return nil; 15 | UIViewController *resultVC; 16 | resultVC = [self __jp_getTopViewController:self.rootViewController]; 17 | while (resultVC.presentedViewController) { // 看看有没有moda出来的 18 | resultVC = [self __jp_getTopViewController:resultVC.presentedViewController]; 19 | } 20 | if ([resultVC isKindOfClass:UIAlertController.class]) { 21 | resultVC = resultVC.presentingViewController; // 从哪里moda的那个才是 22 | return [self __jp_getTopViewController:resultVC]; 23 | } 24 | return resultVC; 25 | } 26 | 27 | - (UIViewController *)__jp_getTopViewController:(UIViewController *)vc { 28 | if ([vc isKindOfClass:[UINavigationController class]]) { 29 | return [self __jp_getTopViewController:[(UINavigationController *)vc topViewController]]; 30 | } else if ([vc isKindOfClass:[UITabBarController class]]) { 31 | return [self __jp_getTopViewController:[(UITabBarController *)vc selectedViewController]]; 32 | } else { 33 | return vc; 34 | } 35 | } 36 | 37 | + (UIViewController *)jp_topViewControllerFromKeyWindow { 38 | return [[UIApplication sharedApplication].keyWindow jp_topViewController]; 39 | } 40 | 41 | + (UIViewController *)jp_topViewControllerFromDelegateWindow { 42 | return [[UIApplication sharedApplication].delegate.window jp_topViewController]; 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/Button/JPCustomLayoutButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPCustomLayoutButton.h 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2019/9/9. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPCustomLayoutButton : UIButton 12 | @property (nonatomic, copy) void (^layoutSubviewsBlock)(UIButton *btn); 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/Button/JPCustomLayoutButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // JPCustomLayoutButton.m 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2019/9/9. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import "JPCustomLayoutButton.h" 10 | 11 | @implementation JPCustomLayoutButton 12 | 13 | /** 14 | * 例:图标置右,文字置左 15 | button.layoutSubviewsBlock = ^(UIButton *btn) { 16 | CGFloat space = JPScaleValue(4); 17 | CGFloat totalW = btn.imageView.jp_width + space + btn.titleLabel.jp_width; 18 | CGFloat totalMaxX = JPHalfOfDiff(btn.jp_width, totalW) + totalW; 19 | btn.imageView.jp_x = totalMaxX - btn.imageView.jp_width; 20 | btn.titleLabel.jp_x = btn.imageView.jp_x - btn.titleLabel.jp_width - space; 21 | }; 22 | */ 23 | 24 | - (void)layoutSubviews { 25 | [super layoutSubviews]; 26 | !self.layoutSubviewsBlock ? : self.layoutSubviewsBlock(self); 27 | } 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/Button/JPIconButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPIconButton.h 3 | // Infinitee2.0 4 | // 5 | // Created by guanning on 2016/12/19. 6 | // Copyright © 2016年 Infinitee. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPIconButton : UIButton 12 | 13 | + (JPIconButton *)iconButtonWithIcon:(NSString *)icon 14 | iconSize:(CGSize)iconSize 15 | title:(NSString *)title 16 | titleFont:(UIFont *)titleFont 17 | titleColor:(UIColor *)titleColor 18 | contentEdgeInsets:(UIEdgeInsets)contentEdgeInsets 19 | space:(CGFloat)space 20 | isVertical:(BOOL)isVertical; 21 | 22 | @property (nonatomic, assign) UIEdgeInsets jp_contentEdgeInsets; 23 | @property (nonatomic, assign) CGFloat space; 24 | @property (nonatomic, assign) BOOL isVertical; 25 | 26 | - (void)updateIconSize:(CGSize)iconSize 27 | titleFont:(UIFont *)titleFont 28 | contentEdgeInsets:(UIEdgeInsets)contentEdgeInsets 29 | space:(CGFloat)space 30 | isVertical:(BOOL)isVertical; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/Button/JPMaskButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPMaskButton.h 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2018/12/6. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface JPMaskButton : UIButton 14 | @property (nonatomic, strong) UIImage *maskImage; 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/Button/JPMaskButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // JPMaskButton.m 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2018/12/6. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import "JPMaskButton.h" 10 | #import "JPMacro.h" 11 | 12 | @implementation JPMaskButton 13 | 14 | - (void)setMaskImage:(UIImage *)maskImage { 15 | _maskImage = maskImage; 16 | if (maskImage) { 17 | CALayer *maskLayer = self.layer.mask; 18 | if (!maskLayer) { 19 | maskLayer = [CALayer layer]; 20 | maskLayer.contentsGravity = kCAGravityCenter; 21 | maskLayer.contentsScale = [UIScreen mainScreen].scale; 22 | self.layer.mask = maskLayer; 23 | } 24 | maskLayer.contents = (id)maskImage.CGImage; 25 | } else { 26 | self.layer.mask = nil; 27 | } 28 | } 29 | 30 | - (void)layoutSubviews { 31 | [super layoutSubviews]; 32 | self.layer.mask.frame = self.bounds; 33 | } 34 | 35 | - (instancetype)initWithFrame:(CGRect)frame { 36 | if (self = [super initWithFrame:frame]) { 37 | [self.imageView addObserver:self forKeyPath:JPKeyPath(self.imageView, layer.opacity) options:NSKeyValueObservingOptionNew context:nil]; 38 | } 39 | return self; 40 | } 41 | 42 | - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 43 | if (self.layer.mask) { 44 | CGFloat opacity = [change[NSKeyValueChangeNewKey] doubleValue]; 45 | self.layer.mask.opacity = opacity; 46 | } 47 | } 48 | 49 | - (void)dealloc { 50 | [self.imageView removeObserver:self forKeyPath:JPKeyPath(self.imageView, layer.opacity)]; 51 | } 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/Button/JPNoHighlightButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPNoHighlightButton.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2019/1/9. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface JPNoHighlightButton : UIButton 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/Button/JPNoHighlightButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // JPNoHighlightButton.m 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2019/1/9. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import "JPNoHighlightButton.h" 10 | 11 | @implementation JPNoHighlightButton 12 | 13 | - (void)setHighlighted:(BOOL)highlighted { 14 | 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/Button/JPScreenBorderButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPScreenBorderButton.h 3 | // DesignSpaceRestructure 4 | // 5 | // Created by 周健平 on 2017/12/16. 6 | // Copyright © 2017年 周健平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPScreenBorderButton : UIButton 12 | @property (nonatomic, copy) void (^highlightedDidChangedBlock)(BOOL jp_isHighlighted); 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/Button/JPUnderlineButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPUnderlineButton.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2018/11/15. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface JPUnderlineButton : UIButton 14 | @property (nonatomic, assign) BOOL isShowUnderline; 15 | @property (nonatomic, assign) CGFloat underlinePadding; 16 | @property (nonatomic, assign) CGFloat underlineSpace; 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/Model/JPProxy.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPProxy.h 3 | // JPBasic 4 | // 5 | // Created by 周健平 on 2019/12/12. 6 | // 7 | 8 | #import 9 | 10 | #define JPTargetProxy(target) [JPProxy proxyWithTarget:target] 11 | 12 | @interface JPProxy : NSProxy 13 | + (instancetype)proxyWithTarget:(id)target; 14 | @property (nonatomic, weak) id target; 15 | @end 16 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/Model/JPProxy.m: -------------------------------------------------------------------------------- 1 | // 2 | // JPProxy.m 3 | // JPBasic 4 | // 5 | // Created by 周健平 on 2019/12/12. 6 | // 7 | 8 | #import "JPProxy.h" 9 | 10 | @implementation JPProxy 11 | 12 | + (instancetype)proxyWithTarget:(id)target { 13 | JPProxy *proxy = [self alloc]; // NSProxy没有init方法 14 | proxy.target = target; 15 | return proxy; 16 | } 17 | 18 | - (NSMethodSignature *)methodSignatureForSelector:(SEL)sel { 19 | return [self.target methodSignatureForSelector:sel]; 20 | } 21 | 22 | - (void)forwardInvocation:(NSInvocation *)invocation { 23 | [invocation invokeWithTarget:self.target]; 24 | } 25 | 26 | //- (void)dealloc { 27 | // NSLog(@"%s", __func__); 28 | //} 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPBadgeLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPBadgeLabel.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2018/10/19. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | typedef NS_ENUM(NSUInteger, JPBadgeLabelState) { 14 | JPBadgeLabelHidingState, 15 | JPBadgeLabelShowingState 16 | }; 17 | 18 | @interface JPBadgeLabel : UILabel 19 | + (JPBadgeLabel *)baseBadgeLabel; 20 | @property (nonatomic, assign) JPBadgeLabelState state; 21 | @property (nonatomic, assign) NSInteger badgeCount; 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPBasicPopView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPBasicPopView.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2018/9/30. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface JPBasicPopView : UIView 14 | @property (nonatomic, weak) UIView *contentView; 15 | - (UIWindow *)jp_window; 16 | - (void)addToWindow; 17 | - (void)removeFromWindow; 18 | 19 | - (void)didClickBgView; 20 | 21 | - (void)scalePopAnimation:(BOOL)forShow complete:(nullable void(^)(BOOL isShowed))complete; 22 | - (void)rotationAnimation:(BOOL)forShow complete:(nullable void(^)(BOOL isShowed))complete; 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPBounceView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPBounceView.h 3 | // Infinitee2.0 4 | // 5 | // Created by 周健平 on 2017/10/12. 6 | // Copyright © 2017年 Infinitee. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPBounceView : UIView 12 | /** 默认0.15 */ 13 | @property (nonatomic, assign) NSTimeInterval imageSetterDuration; 14 | @property (nonatomic, strong) UIImage *image; 15 | - (void)setImage:(UIImage *)image animated:(BOOL)animated; 16 | 17 | /** 默认YES */ 18 | @property (nonatomic, assign) BOOL isBounce; 19 | /** 默认1.13 */ 20 | @property (nonatomic, assign) CGFloat scale; 21 | /** 默认0.27 */ 22 | @property (nonatomic, assign) NSTimeInterval scaleDuration; 23 | /** 默认20.0 */ 24 | @property (nonatomic, assign) CGFloat recoverSpeed; 25 | /** 默认17.0 */ 26 | @property (nonatomic, assign) CGFloat recoverBounciness; 27 | /** 默认NO */ 28 | @property (nonatomic, assign) BOOL isJudgeBegin; 29 | /** 默认YES */ 30 | @property (nonatomic, assign) BOOL isCanTouchesBegan; 31 | 32 | @property (nonatomic, copy) void (^viewTouchUpInside)(JPBounceView *bounceView); 33 | 34 | - (void)recover; 35 | @property (nonatomic, assign) BOOL isTouching; 36 | @property (nonatomic, copy) void (^touchingDidChanged)(BOOL isTouching); 37 | @end 38 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPEmptyStateView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPEmptyStateView.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2019/2/23. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPEmptyStateView : UIView 12 | + (instancetype)emptyStateViewWithImageName:(NSString *)imageName title:(NSString *)title; 13 | @property (nonatomic, weak) UIImageView *imageView; 14 | @property (nonatomic, weak) UIActivityIndicatorView *jvhua; 15 | @property (nonatomic, weak) UILabel *titleLabel; 16 | - (void)updateImage:(NSString *)imageName title:(NSString *)title animated:(BOOL)animated; 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPFPSLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPFPSLabel.h 3 | // YYKitExample 4 | // 5 | // Created by ibireme on 15/9/3. 6 | // Copyright (c) 2015 ibireme. All rights reserved. 7 | // 8 | // 实际上就是YYFPSLabel,只是防止别的项目有重名的文件,特意改个名字,可能以后会有改动~ 9 | 10 | #import 11 | 12 | /** 13 | Show Screen FPS... 14 | 15 | The maximum fps in OSX/iOS Simulator is 60.00. 16 | The maximum fps on iPhone is 59.97. 17 | The maxmium fps on iPad is 60.0. 18 | */ 19 | @interface JPFPSLabel : UILabel 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPGradientView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPGradientView.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2018/11/27. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPGradientView : UIView 12 | - (CAGradientLayer *)gradientLayer; 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPGradientView.m: -------------------------------------------------------------------------------- 1 | // 2 | // JPGradientView.m 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2018/11/27. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import "JPGradientView.h" 10 | 11 | @implementation JPGradientView 12 | 13 | + (Class)layerClass { 14 | return CAGradientLayer.class; 15 | } 16 | 17 | - (CAGradientLayer *)gradientLayer { 18 | return (CAGradientLayer *)self.layer; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPMaskView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPMaskView.h 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2018/12/6. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface JPMaskView : UIView 14 | @property (nonatomic, strong) UIImage *maskImage; 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPMaskView.m: -------------------------------------------------------------------------------- 1 | // 2 | // JPMaskView.m 3 | // WoTV 4 | // 5 | // Created by 周健平 on 2018/12/6. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import "JPMaskView.h" 10 | 11 | @implementation JPMaskView 12 | 13 | - (void)setMaskImage:(UIImage *)maskImage { 14 | _maskImage = maskImage; 15 | if (maskImage) { 16 | CALayer *maskLayer = self.layer.mask; 17 | if (!maskLayer) { 18 | maskLayer = [CALayer layer]; 19 | maskLayer.contentsGravity = kCAGravityCenter; 20 | maskLayer.contentsScale = [UIScreen mainScreen].scale; 21 | self.layer.mask = maskLayer; 22 | } 23 | maskLayer.contents = (id)maskImage.CGImage; 24 | } else { 25 | self.layer.mask = nil; 26 | } 27 | } 28 | 29 | - (void)layoutSubviews { 30 | [super layoutSubviews]; 31 | self.layer.mask.frame = self.bounds; 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPScreenEdgeLeftScrollView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPScreenEdgeLeftScrollView.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2019/8/30. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPScreenEdgeLeftScrollView : UIScrollView 12 | @property (nonatomic, assign) BOOL isNotFull; 13 | @end 14 | 15 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPScreenEdgeLeftScrollView.m: -------------------------------------------------------------------------------- 1 | // 2 | // JPScreenEdgeLeftScrollView.m 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2019/8/30. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import "JPScreenEdgeLeftScrollView.h" 10 | 11 | @implementation JPScreenEdgeLeftScrollView 12 | 13 | #pragma mark - 让左边边缘区域无法响应,让事件传递到父控制器(缺陷:左边宽15的区域无法滚动) 14 | 15 | - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 16 | if (self.isNotFull) { 17 | return [super hitTest:point withEvent:event]; 18 | } 19 | CGRect frame = CGRectMake(0, 0, 15, self.frame.size.height); 20 | if (!CGRectContainsPoint(frame, point)) { 21 | return [super hitTest:point withEvent:event]; 22 | } else { 23 | return nil; 24 | } 25 | } 26 | @end 27 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPSeparateHeaderFooterView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPSeparateHeaderFooterView.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2018/9/24. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | static NSString *const JPSeparateHeaderFooterViewID = @"JPSeparateHeaderFooterView"; 14 | 15 | @interface JPSeparateHeaderFooterView : UITableViewHeaderFooterView 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPSeparateHeaderFooterView.m: -------------------------------------------------------------------------------- 1 | // 2 | // JPSeparateHeaderFooterView.m 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2018/9/24. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import "JPSeparateHeaderFooterView.h" 10 | 11 | @implementation JPSeparateHeaderFooterView 12 | 13 | //- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier { 14 | // if (self = [super initWithReuseIdentifier:reuseIdentifier]) { 15 | // self.backgroundView = nil; 16 | // } 17 | // return self; 18 | //} 19 | 20 | - (void)setBackgroundView:(UIView *)backgroundView { 21 | backgroundView = nil; 22 | [super setBackgroundView:backgroundView]; 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPTextField.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPTextField.h 3 | // Infinitee2.0 4 | // 5 | // Created by guanning on 2017/1/18. 6 | // Copyright © 2017年 Infinitee. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPTextField : UITextField 12 | @property (nonatomic, copy) void (^firstResponderHandle)(JPTextField *textField, BOOL isFirstResponder); 13 | 14 | @property (nonatomic, assign) NSUInteger maxLimitNums; 15 | @property (nonatomic, copy) void (^reachMaxLimitNums)(NSInteger maxLimitNums); // 已达最多字数的block 16 | 17 | @property (nonatomic, assign) BOOL isNoSetText; 18 | 19 | @property (nonatomic, copy) void (^textDidBeginEditing)(JPTextField *textField); 20 | @property (nonatomic, copy) void (^textDidChange)(JPTextField *textField, BOOL isLenovo); 21 | @property (nonatomic, copy) void (^textDidEndEditing)(JPTextField *textField); 22 | 23 | @property (nonatomic, copy) void (^deleteBlock)(JPTextField *textField); 24 | 25 | @property (nonatomic, copy) BOOL (^returnKeyDidClick)(JPTextField *textField, NSString *finalText); 26 | 27 | - (void)setAndCheckText:(NSString *)text; 28 | @end 29 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/View/JPTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPTextView.h 3 | // 健平不得姐 4 | // 5 | // Created by ios app on 16/6/3. 6 | // Copyright © 2016年 cb2015. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | // 光标初始x值 12 | UIKIT_EXTERN CGFloat const JPCursorMargin; // 5.0 13 | 14 | @interface JPTextView : UITextView 15 | @property(nonatomic, copy) NSString *placeholder; 16 | @property(nonatomic, strong) UIColor *placeholderColor; 17 | 18 | @property (nonatomic, copy) void (^firstResponderHandle)(JPTextView *textView, BOOL isFirstResponder); 19 | 20 | @property (nonatomic, assign) NSUInteger maxLimitNums; 21 | @property (nonatomic, copy) void (^reachMaxLimitNums)(NSInteger maxLimitNums); // 已达最多字数的block 22 | 23 | @property (nonatomic, assign) BOOL textKeepTheTop; 24 | 25 | @property (nonatomic, copy) void (^textDidBeginEditing)(JPTextView *textView); 26 | @property (nonatomic, copy) void (^textDidChange)(JPTextView *textView, BOOL isLenovo); 27 | @property (nonatomic, copy) void (^textDidEndEditing)(JPTextView *textView); 28 | 29 | @property (nonatomic, copy) BOOL (^returnKeyDidClick)(JPTextView *textView, NSString *finalText); 30 | 31 | - (void)setAndCheckText:(NSString *)text; 32 | @end 33 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/ViewController/JPSubCollectionViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPSubCollectionViewController.h 3 | // WoTVEducation 4 | // 5 | // Created by 周健平 on 2018/1/4. 6 | // Copyright © 2018年 沃视频. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPSubCollectionViewController : UICollectionViewController 12 | @property (nonatomic, copy) void (^willBeginDraggingHandle)(UIScrollView *scrollView); 13 | @property (nonatomic, copy) void (^didScrollHandle)(UIScrollView *scrollView); 14 | @property (nonatomic, copy) void (^didEndScrollHandle)(UIScrollView *scrollView); 15 | @property (nonatomic, copy) void (^panEndedHandle)(UIScrollView *scrollView); 16 | @property (nonatomic, copy) void (^requestStartHandle)(UIScrollView *scrollView); 17 | @property (nonatomic, copy) void (^requestDoneHandle)(UIScrollView *scrollView); 18 | @end 19 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/ViewController/JPSubScrollViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPSubScrollViewController.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2019/8/9. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPSubScrollViewController : UIViewController 12 | @property (nonatomic, weak) UIScrollView *scrollView; 13 | @property (nonatomic, copy) void (^willBeginDraggingHandle)(UIScrollView *scrollView); 14 | @property (nonatomic, copy) void (^didScrollHandle)(UIScrollView *scrollView); 15 | @property (nonatomic, copy) void (^didEndScrollHandle)(UIScrollView *scrollView); 16 | @property (nonatomic, copy) void (^panEndedHandle)(UIScrollView *scrollView); 17 | @property (nonatomic, copy) void (^requestStartHandle)(UIScrollView *scrollView); 18 | @property (nonatomic, copy) void (^requestDoneHandle)(UIScrollView *scrollView); 19 | @end 20 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/ViewController/JPSubTableViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPSubTableViewController.h 3 | // WoTVEducation 4 | // 5 | // Created by 周健平 on 2018/1/4. 6 | // Copyright © 2018年 沃视频. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPSubTableViewController : UITableViewController 12 | @property (nonatomic, copy) void (^willBeginDraggingHandle)(UIScrollView *scrollView); 13 | @property (nonatomic, copy) void (^didScrollHandle)(UIScrollView *scrollView); 14 | @property (nonatomic, copy) void (^didEndScrollHandle)(UIScrollView *scrollView); 15 | @property (nonatomic, copy) void (^panEndedHandle)(UIScrollView *scrollView); 16 | @property (nonatomic, copy) void (^requestStartHandle)(UIScrollView *scrollView); 17 | @property (nonatomic, copy) void (^requestDoneHandle)(UIScrollView *scrollView); 18 | @end 19 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/ViewController/JPViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPViewController.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2019/1/25. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "JPConstant.h" 11 | 12 | @interface JPViewController : UIViewController 13 | @property (nonatomic, copy) JPGetCurrentInterfaceOrientationBlock currentInterfaceOrientation; 14 | @end 15 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPCustomUnit/ViewController/JPViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // JPViewController.m 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2019/1/25. 6 | // Copyright © 2019 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import "JPViewController.h" 10 | 11 | @implementation JPViewController 12 | 13 | - (BOOL)shouldAutorotate { 14 | return YES; 15 | } 16 | 17 | - (UIInterfaceOrientationMask)supportedInterfaceOrientations { 18 | if (self.currentInterfaceOrientation) { 19 | return self.currentInterfaceOrientation(); 20 | } 21 | return UIInterfaceOrientationMaskAll; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPTool/JPAlertControllerTool.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPAlertControllerTool.h 3 | // Infinitee2.0-Design 4 | // 5 | // Created by Jill on 16/8/16. 6 | // Copyright © 2016年 陈珏洁. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPAlertControllerTool : NSObject 12 | 13 | /** 14 | * 没有configurationHandler 15 | */ 16 | + (UIAlertController *)alertControllerWithStyle:(UIAlertControllerStyle)style title:(NSString *)title message:(NSString *)message actions:(NSArray *)actions targetController:(UIViewController *)targetController; 17 | 18 | /** 19 | * 有configurationHandler 20 | */ 21 | + (UIAlertController *)alertControllerWithStyle:(UIAlertControllerStyle)style title:(NSString *)title message:(NSString *)message actions:(NSArray *)actions configurationHandler:(void (^)(UITextField *textField))configurationHandler targetController:(UIViewController *)targetController; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPTool/JPAlertControllerTool.m: -------------------------------------------------------------------------------- 1 | // 2 | // JPAlertControllerTool.m 3 | // Infinitee2.0-Design 4 | // 5 | // Created by Jill on 16/8/16. 6 | // Copyright © 2016年 陈珏洁. All rights reserved. 7 | // 8 | 9 | #import "JPAlertControllerTool.h" 10 | 11 | @implementation JPAlertControllerTool 12 | 13 | + (UIAlertController *)alertControllerWithStyle:(UIAlertControllerStyle)style title:(NSString *)title message:(NSString *)message actions:(NSArray *)actions targetController:(UIViewController *)targetController { 14 | return [self alertControllerWithStyle:style title:title message:message actions:actions configurationHandler:nil targetController:targetController]; 15 | } 16 | 17 | + (UIAlertController *)alertControllerWithStyle:(UIAlertControllerStyle)style title:(NSString *)title message:(NSString *)message actions:(NSArray *)actions configurationHandler:(void (^)(UITextField *))configurationHandler targetController:(UIViewController *)targetController { 18 | 19 | if (!targetController || actions.count == 0) return nil; 20 | 21 | UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:style]; 22 | for (UIAlertAction *action in actions) { 23 | [alertController addAction:action]; 24 | } 25 | if (configurationHandler) [alertController addTextFieldWithConfigurationHandler:configurationHandler]; 26 | [targetController presentViewController:alertController animated:YES completion:nil]; 27 | 28 | return alertController; 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/JPBasic/Classes/JPTool/JPDeviceTool.h: -------------------------------------------------------------------------------- 1 | // 2 | // JPDeviceTool.h 3 | // WoLive 4 | // 5 | // Created by 周健平 on 2018/10/9. 6 | // Copyright © 2018 zhanglinan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JPDeviceTool : NSObject 12 | + (NSString *)deviceName; 13 | + (NSString *)systemVersion; 14 | 15 | + (BOOL)isPortrait; 16 | + (UIDeviceOrientation)currentOrientation; 17 | + (void)switchDeviceOrientation:(UIDeviceOrientation)orientation; 18 | 19 | + (int)getSignalIntensity:(BOOL)isWiFi; 20 | 21 | + (BOOL)goApplicationOpenSettings; 22 | @end 23 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020 zhoujianping24@hotmail.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 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 | -------------------------------------------------------------------------------- /Example/Pods/JPBasic/README.md: -------------------------------------------------------------------------------- 1 | # JPBasic 2 | 3 | [![Version](https://img.shields.io/cocoapods/v/JPBasic.svg?style=flat)](https://cocoapods.org/pods/JPBasic) 4 | [![License](https://img.shields.io/cocoapods/l/JPBasic.svg?style=flat)](https://cocoapods.org/pods/JPBasic) 5 | [![Platform](https://img.shields.io/cocoapods/p/JPBasic.svg?style=flat)](https://cocoapods.org/pods/JPBasic) 6 | 7 | ##### 开发常用的分类、工具类、宏、常量。 8 | 9 | ## Installation 10 | 11 | JPBasic is available through [CocoaPods](https://cocoapods.org). To install 12 | it, simply add the following line to your Podfile: 13 | 14 | ```ruby 15 | pod 'JPBasic' 16 | ``` 17 | 18 | ## Author 19 | 20 | Email: zhoujianping24@hotmail.com, Blog: https://www.jianshu.com/u/2edfbadd451c 21 | 22 | ## License 23 | 24 | JPBasic is available under the MIT license. See the LICENSE file for more info. 25 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/FirstLineHeadIndentAnimation.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FirstLineHeadIndentAnimation", 3 | "version": "0.1.0", 4 | "summary": "A short description of FirstLineHeadIndentAnimation.", 5 | "description": "TODO: Add long description of the pod here.", 6 | "homepage": "https://github.com/zhoujianping24@hotmail.com/FirstLineHeadIndentAnimation", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "zhoujianping24@hotmail.com": "zhoujianping24@hotmail.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/zhoujianping24@hotmail.com/FirstLineHeadIndentAnimation.git", 16 | "tag": "0.1.0" 17 | }, 18 | "platforms": { 19 | "ios": "8.0" 20 | }, 21 | "source_files": "FirstLineHeadIndentAnimation/Classes/**/*" 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/MJExtension/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013-2019 MJExtension (https://github.com/CoderMJLee/MJExtension) 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 | -------------------------------------------------------------------------------- /Example/Pods/MJExtension/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 | // 8 | 9 | #import 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" 16 | 17 | #import "MJFoundation.h" 18 | 19 | //! Project version number for MJExtension. 20 | FOUNDATION_EXPORT double MJExtensionVersionNumber; 21 | 22 | //! Project version string for MJExtension. 23 | FOUNDATION_EXPORT const unsigned char MJExtensionVersionString[]; 24 | 25 | // In this header, you should import all the public headers of your framework using statements like #import 26 | 27 | 28 | -------------------------------------------------------------------------------- /Example/Pods/MJExtension/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 -------------------------------------------------------------------------------- /Example/Pods/MJExtension/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 | 13 | + (BOOL)isClassFromFoundation:(Class)c; 14 | + (BOOL)isFromNSObjectProtocolProperty:(NSString *)propertyName; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/MJExtension/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 | -------------------------------------------------------------------------------- /Example/Pods/MJExtension/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 | -------------------------------------------------------------------------------- /Example/Pods/MJExtension/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 | -------------------------------------------------------------------------------- /Example/Pods/MJExtension/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 -------------------------------------------------------------------------------- /Example/Pods/MJExtension/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 -------------------------------------------------------------------------------- /Example/Pods/MJExtension/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 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshAutoFooter : MJRefreshFooter 14 | /** 是否自动刷新(默认为YES) */ 15 | @property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh; 16 | 17 | /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ 18 | @property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用triggerAutomaticallyRefreshPercent属性"); 19 | 20 | /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ 21 | @property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent; 22 | 23 | /** 自动触发次数, 默认为 1, 仅在拖拽 ScrollView 时才生效, 24 | 25 | 如果为 -1, 则为无限触发 26 | */ 27 | @property (nonatomic) NSInteger autoTriggerTimes; 28 | @end 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshBackFooter : MJRefreshFooter 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // MJRefreshFooter.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/5. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 上拉刷新控件 9 | 10 | #import "MJRefreshComponent.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface MJRefreshFooter : MJRefreshComponent 15 | /** 创建footer */ 16 | + (instancetype)footerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock; 17 | /** 创建footer */ 18 | + (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; 19 | 20 | /** 提示没有更多的数据 */ 21 | - (void)endRefreshingWithNoMoreData; 22 | - (void)noticeNoMoreData MJRefreshDeprecated("使用endRefreshingWithNoMoreData"); 23 | 24 | /** 重置没有更多的数据(消除没有更多数据的状态) */ 25 | - (void)resetNoMoreData; 26 | 27 | /** 忽略多少scrollView的contentInset的bottom */ 28 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom; 29 | 30 | /** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏。默认是NO) */ 31 | @property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden MJRefreshDeprecated("已废弃此属性,开发者请自行控制footer的显示和隐藏"); 32 | @end 33 | 34 | NS_ASSUME_NONNULL_END 35 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.m: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // MJRefreshFooter.m 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/5. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 9 | 10 | #import "MJRefreshFooter.h" 11 | #include "UIScrollView+MJRefresh.h" 12 | 13 | @interface MJRefreshFooter() 14 | 15 | @end 16 | 17 | @implementation MJRefreshFooter 18 | #pragma mark - 构造方法 19 | + (instancetype)footerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock 20 | { 21 | MJRefreshFooter *cmp = [[self alloc] init]; 22 | cmp.refreshingBlock = refreshingBlock; 23 | return cmp; 24 | } 25 | + (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action 26 | { 27 | MJRefreshFooter *cmp = [[self alloc] init]; 28 | [cmp setRefreshingTarget:target refreshingAction:action]; 29 | return cmp; 30 | } 31 | 32 | #pragma mark - 重写父类的方法 33 | - (void)prepare 34 | { 35 | [super prepare]; 36 | 37 | // 设置自己的高度 38 | self.mj_h = MJRefreshFooterHeight; 39 | 40 | // 默认不会自动隐藏 41 | // self.automaticallyHidden = NO; 42 | } 43 | 44 | #pragma mark - 公共方法 45 | - (void)endRefreshingWithNoMoreData 46 | { 47 | MJRefreshDispatchAsyncOnMainQueue(self.state = MJRefreshStateNoMoreData;) 48 | } 49 | 50 | - (void)noticeNoMoreData 51 | { 52 | [self endRefreshingWithNoMoreData]; 53 | } 54 | 55 | - (void)resetNoMoreData 56 | { 57 | MJRefreshDispatchAsyncOnMainQueue(self.state = MJRefreshStateIdle;) 58 | } 59 | 60 | - (void)setAutomaticallyHidden:(BOOL)automaticallyHidden 61 | { 62 | _automaticallyHidden = automaticallyHidden; 63 | } 64 | @end 65 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // MJRefreshHeader.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/4. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 下拉刷新控件:负责监控用户下拉的状态 9 | 10 | #import "MJRefreshComponent.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface MJRefreshHeader : MJRefreshComponent 15 | /** 创建header */ 16 | + (instancetype)headerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock; 17 | /** 创建header */ 18 | + (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; 19 | 20 | /** 这个key用来存储上一次下拉刷新成功的时间 */ 21 | @property (copy, nonatomic) NSString *lastUpdatedTimeKey; 22 | /** 上一次下拉刷新成功的时间 */ 23 | @property (strong, nonatomic, readonly, nullable) NSDate *lastUpdatedTime; 24 | 25 | /** 忽略多少scrollView的contentInset的top */ 26 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop; 27 | 28 | /** 默认是关闭状态, 如果遇到 CollectionView 的动画异常问题可以尝试打开 */ 29 | @property (nonatomic) BOOL isCollectionViewAnimationBug; 30 | @end 31 | 32 | NS_ASSUME_NONNULL_END 33 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoGifFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoStateFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter 14 | @property (weak, nonatomic, readonly) UIImageView *gifView; 15 | 16 | /** 设置state状态下的动画图片images 动画持续时间duration*/ 17 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; 18 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoNormalFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoStateFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshAutoNormalFooter : MJRefreshAutoStateFooter 14 | @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; 15 | 16 | /** 菊花的样式 */ 17 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property"); 18 | @end 19 | 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoStateFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/6/13. 6 | // Copyright © 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshAutoStateFooter : MJRefreshAutoFooter 14 | /** 文字距离圈圈、箭头的距离 */ 15 | @property (assign, nonatomic) CGFloat labelLeftInset; 16 | /** 显示刷新状态的label */ 17 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 18 | 19 | /** 设置state状态下的文字 */ 20 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 21 | 22 | /** 隐藏刷新状态的文字 */ 23 | @property (assign, nonatomic, getter=isRefreshingTitleHidden) BOOL refreshingTitleHidden; 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackGifFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackStateFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshBackGifFooter : MJRefreshBackStateFooter 14 | @property (weak, nonatomic, readonly) UIImageView *gifView; 15 | 16 | /** 设置state状态下的动画图片images 动画持续时间duration*/ 17 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; 18 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackNormalFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackStateFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshBackNormalFooter : MJRefreshBackStateFooter 14 | @property (weak, nonatomic, readonly) UIImageView *arrowView; 15 | @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; 16 | 17 | /** 菊花的样式 */ 18 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property"); 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackStateFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/6/13. 6 | // Copyright © 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshBackStateFooter : MJRefreshBackFooter 14 | /** 文字距离圈圈、箭头的距离 */ 15 | @property (assign, nonatomic) CGFloat labelLeftInset; 16 | /** 显示刷新状态的label */ 17 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 18 | /** 设置state状态下的文字 */ 19 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 20 | 21 | /** 获取state状态下的title */ 22 | - (NSString *)titleForState:(MJRefreshState)state; 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshGifHeader.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshStateHeader.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshGifHeader : MJRefreshStateHeader 14 | @property (weak, nonatomic, readonly) UIImageView *gifView; 15 | 16 | /** 设置state状态下的动画图片images 动画持续时间duration*/ 17 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; 18 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshNormalHeader.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshStateHeader.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshNormalHeader : MJRefreshStateHeader 14 | @property (weak, nonatomic, readonly) UIImageView *arrowView; 15 | @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; 16 | 17 | 18 | /** 菊花的样式 */ 19 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property"); 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshStateHeader.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshHeader.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshStateHeader : MJRefreshHeader 14 | #pragma mark - 刷新时间相关 15 | /** 利用这个block来决定显示的更新时间文字 */ 16 | @property (copy, nonatomic, nullable) NSString *(^lastUpdatedTimeText)(NSDate * _Nullable lastUpdatedTime); 17 | /** 显示上一次刷新时间的label */ 18 | @property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel; 19 | 20 | #pragma mark - 状态相关 21 | /** 文字距离圈圈、箭头的距离 */ 22 | @property (assign, nonatomic) CGFloat labelLeftInset; 23 | /** 显示刷新状态的label */ 24 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 25 | /** 设置state状态下的文字 */ 26 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 27 | @end 28 | 29 | NS_ASSUME_NONNULL_END 30 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/ko.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 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/ru.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/ru.lproj/Localizable.strings -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/uk.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/uk.lproj/Localizable.strings -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings -------------------------------------------------------------------------------- /Example/Pods/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 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | 4 | #import "UIScrollView+MJRefresh.h" 5 | #import "UIScrollView+MJExtension.h" 6 | #import "UIView+MJExtension.h" 7 | 8 | #import "MJRefreshNormalHeader.h" 9 | #import "MJRefreshGifHeader.h" 10 | 11 | #import "MJRefreshBackNormalFooter.h" 12 | #import "MJRefreshBackGifFooter.h" 13 | #import "MJRefreshAutoNormalFooter.h" 14 | #import "MJRefreshAutoGifFooter.h" -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/MJRefreshConfig.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshConfig.h 3 | // 4 | // Created by Frank on 2018/11/27. 5 | // Copyright © 2018 小码哥. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface MJRefreshConfig : NSObject 13 | 14 | /** 默认使用的语言版本, 默认为 nil. 将随系统的语言自动改变 */ 15 | @property (copy, nonatomic, nullable) NSString *languageCode; 16 | 17 | /** @return Singleton Config instance */ 18 | + (instancetype)defaultConfig; 19 | 20 | - (instancetype)init NS_UNAVAILABLE; 21 | + (instancetype)new NS_UNAVAILABLE; 22 | 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/MJRefreshConfig.m: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshConfig.m 3 | // 4 | // Created by Frank on 2018/11/27. 5 | // Copyright © 2018 小码哥. All rights reserved. 6 | // 7 | 8 | #import "MJRefreshConfig.h" 9 | 10 | @implementation MJRefreshConfig 11 | 12 | static MJRefreshConfig *mj_RefreshConfig = nil; 13 | 14 | + (instancetype)defaultConfig { 15 | static dispatch_once_t onceToken; 16 | dispatch_once(&onceToken, ^{ 17 | mj_RefreshConfig = [[self alloc] init]; 18 | }); 19 | return mj_RefreshConfig; 20 | } 21 | 22 | 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/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 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSBundle (MJRefresh) 14 | + (instancetype)mj_refreshBundle; 15 | + (UIImage *)mj_arrowImage; 16 | + (NSString *)mj_localizedStringForKey:(NSString *)key value:(nullable NSString *)value; 17 | + (NSString *)mj_localizedStringForKey:(NSString *)key; 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // UIScrollView+Extension.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 14-5-28. 7 | // Copyright (c) 2014年 小码哥. All rights reserved. 8 | // 9 | 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface UIScrollView (MJExtension) 15 | @property (readonly, nonatomic) UIEdgeInsets mj_inset; 16 | 17 | @property (assign, nonatomic) CGFloat mj_insetT; 18 | @property (assign, nonatomic) CGFloat mj_insetB; 19 | @property (assign, nonatomic) CGFloat mj_insetL; 20 | @property (assign, nonatomic) CGFloat mj_insetR; 21 | 22 | @property (assign, nonatomic) CGFloat mj_offsetX; 23 | @property (assign, nonatomic) CGFloat mj_offsetY; 24 | 25 | @property (assign, nonatomic) CGFloat mj_contentW; 26 | @property (assign, nonatomic) CGFloat mj_contentH; 27 | @end 28 | 29 | NS_ASSUME_NONNULL_END 30 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // UIScrollView+MJRefresh.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/4. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 给ScrollView增加下拉刷新、上拉刷新的功能 9 | 10 | #import 11 | #import "MJRefreshConst.h" 12 | 13 | @class MJRefreshHeader, MJRefreshFooter; 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | @interface UIScrollView (MJRefresh) 18 | /** 下拉刷新控件 */ 19 | @property (strong, nonatomic, nullable) MJRefreshHeader *mj_header; 20 | @property (strong, nonatomic, nullable) MJRefreshHeader *header MJRefreshDeprecated("使用mj_header"); 21 | /** 上拉刷新控件 */ 22 | @property (strong, nonatomic, nullable) MJRefreshFooter *mj_footer; 23 | @property (strong, nonatomic, nullable) MJRefreshFooter *footer MJRefreshDeprecated("使用mj_footer"); 24 | 25 | #pragma mark - other 26 | - (NSInteger)mj_totalDataCount; 27 | 28 | @end 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /Example/Pods/MJRefresh/MJRefresh/UIView+MJExtension.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // UIView+Extension.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 14-5-28. 7 | // Copyright (c) 2014年 小码哥. All rights reserved. 8 | // 9 | 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface UIView (MJExtension) 15 | @property (assign, nonatomic) CGFloat mj_x; 16 | @property (assign, nonatomic) CGFloat mj_y; 17 | @property (assign, nonatomic) CGFloat mj_w; 18 | @property (assign, nonatomic) CGFloat mj_h; 19 | @property (assign, nonatomic) CGSize mj_size; 20 | @property (assign, nonatomic) CGPoint mj_origin; 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /Example/Pods/Masonry/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-2012 Masonry Team - https://github.com/Masonry 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. -------------------------------------------------------------------------------- /Example/Pods/Masonry/Masonry/MASCompositeConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASCompositeConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASConstraint.h" 10 | #import "MASUtilities.h" 11 | 12 | /** 13 | * A group of MASConstraint objects 14 | */ 15 | @interface MASCompositeConstraint : MASConstraint 16 | 17 | /** 18 | * Creates a composite with a predefined array of children 19 | * 20 | * @param children child MASConstraints 21 | * 22 | * @return a composite constraint 23 | */ 24 | - (id)initWithChildren:(NSArray *)children; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Example/Pods/Masonry/Masonry/MASLayoutConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * When you are debugging or printing the constraints attached to a view this subclass 13 | * makes it easier to identify which constraints have been created via Masonry 14 | */ 15 | @interface MASLayoutConstraint : NSLayoutConstraint 16 | 17 | /** 18 | * a key to associate with this constraint 19 | */ 20 | @property (nonatomic, strong) id mas_key; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Example/Pods/Masonry/Masonry/MASLayoutConstraint.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.m 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASLayoutConstraint.h" 10 | 11 | @implementation MASLayoutConstraint 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Pods/Masonry/Masonry/MASViewAttribute.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASViewAttribute.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 | -------------------------------------------------------------------------------- /Example/Pods/Masonry/Masonry/MASViewAttribute.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASViewAttribute.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 | -------------------------------------------------------------------------------- /Example/Pods/Masonry/Masonry/MASViewConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASViewConstraint.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 | -------------------------------------------------------------------------------- /Example/Pods/Masonry/Masonry/Masonry.h: -------------------------------------------------------------------------------- 1 | // 2 | // Masonry.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 20/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Masonry. 12 | FOUNDATION_EXPORT double MasonryVersionNumber; 13 | 14 | //! Project version string for Masonry. 15 | FOUNDATION_EXPORT const unsigned char MasonryVersionString[]; 16 | 17 | #import "MASUtilities.h" 18 | #import "View+MASAdditions.h" 19 | #import "View+MASShorthandAdditions.h" 20 | #import "ViewController+MASAdditions.h" 21 | #import "NSArray+MASAdditions.h" 22 | #import "NSArray+MASShorthandAdditions.h" 23 | #import "MASConstraint.h" 24 | #import "MASCompositeConstraint.h" 25 | #import "MASViewAttribute.h" 26 | #import "MASViewConstraint.h" 27 | #import "MASConstraintMaker.h" 28 | #import "MASLayoutConstraint.h" 29 | #import "NSLayoutConstraint+MASDebugAdditions.h" 30 | -------------------------------------------------------------------------------- /Example/Pods/Masonry/Masonry/NSArray+MASShorthandAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+MASShorthandAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 22/07/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "NSArray+MASAdditions.h" 10 | 11 | #ifdef MAS_SHORTHAND 12 | 13 | /** 14 | * Shorthand array additions without the 'mas_' prefixes, 15 | * only enabled if MAS_SHORTHAND is defined 16 | */ 17 | @interface NSArray (MASShorthandAdditions) 18 | 19 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; 20 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; 21 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; 22 | 23 | @end 24 | 25 | @implementation NSArray (MASShorthandAdditions) 26 | 27 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { 28 | return [self mas_makeConstraints:block]; 29 | } 30 | 31 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { 32 | return [self mas_updateConstraints:block]; 33 | } 34 | 35 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { 36 | return [self mas_remakeConstraints:block]; 37 | } 38 | 39 | @end 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /Example/Pods/Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSLayoutConstraint+MASDebugAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * makes debug and log output of NSLayoutConstraints more readable 13 | */ 14 | @interface NSLayoutConstraint (MASDebugAdditions) 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Masonry/Masonry/ViewController+MASAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MASAdditions.h 3 | // Masonry 4 | // 5 | // Created by Craig Siemens on 2015-06-23. 6 | // 7 | // 8 | 9 | #import "MASUtilities.h" 10 | #import "MASConstraintMaker.h" 11 | #import "MASViewAttribute.h" 12 | 13 | #ifdef MAS_VIEW_CONTROLLER 14 | 15 | @interface MAS_VIEW_CONTROLLER (MASAdditions) 16 | 17 | /** 18 | * following properties return a new MASViewAttribute with appropriate UILayoutGuide and NSLayoutAttribute 19 | */ 20 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuide; 21 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuide; 22 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideTop; 23 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideBottom; 24 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideTop; 25 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideBottom; 26 | 27 | 28 | @end 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /Example/Pods/Masonry/Masonry/ViewController+MASAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MASAdditions.m 3 | // Masonry 4 | // 5 | // Created by Craig Siemens on 2015-06-23. 6 | // 7 | // 8 | 9 | #import "ViewController+MASAdditions.h" 10 | 11 | #ifdef MAS_VIEW_CONTROLLER 12 | 13 | @implementation MAS_VIEW_CONTROLLER (MASAdditions) 14 | 15 | - (MASViewAttribute *)mas_topLayoutGuide { 16 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 17 | } 18 | - (MASViewAttribute *)mas_topLayoutGuideTop { 19 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 20 | } 21 | - (MASViewAttribute *)mas_topLayoutGuideBottom { 22 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 23 | } 24 | 25 | - (MASViewAttribute *)mas_bottomLayoutGuide { 26 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 27 | } 28 | - (MASViewAttribute *)mas_bottomLayoutGuideTop { 29 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 30 | } 31 | - (MASViewAttribute *)mas_bottomLayoutGuideBottom { 32 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 33 | } 34 | 35 | 36 | 37 | @end 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2011-2018 Sam Vermette, Tobias Tiemerding and contributors. 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 | -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.h: -------------------------------------------------------------------------------- 1 | // 2 | // SVIndefiniteAnimatedView.h 3 | // SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD 4 | // 5 | // Copyright (c) 2014-2018 Guillaume Campagna. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | @interface SVIndefiniteAnimatedView : UIView 11 | 12 | @property (nonatomic, assign) CGFloat strokeThickness; 13 | @property (nonatomic, assign) CGFloat radius; 14 | @property (nonatomic, strong) UIColor *strokeColor; 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressAnimatedView.h: -------------------------------------------------------------------------------- 1 | // 2 | // SVProgressAnimatedView.h 3 | // SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD 4 | // 5 | // Copyright (c) 2017-2018 Tobias Tiemerding. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | @interface SVProgressAnimatedView : UIView 11 | 12 | @property (nonatomic, assign) CGFloat radius; 13 | @property (nonatomic, assign) CGFloat strokeThickness; 14 | @property (nonatomic, strong) UIColor *strokeColor; 15 | @property (nonatomic, assign) CGFloat strokeEnd; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask.png -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@2x.png -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/angle-mask@3x.png -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error.png -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@2x.png -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/error@3x.png -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info.png -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@2x.png -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/info@3x.png -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success.png -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@2x.png -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rogue24/FirstLineHeadIndentAnimation/d6ad560f9287e5e39b9502693753fcc26d3fbc13/Example/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle/success@3x.png -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.h: -------------------------------------------------------------------------------- 1 | // 2 | // SVRadialGradientLayer.h 3 | // SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD 4 | // 5 | // Copyright (c) 2014-2018 Tobias Tiemerding. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | @interface SVRadialGradientLayer : CALayer 11 | 12 | @property (nonatomic) CGPoint gradientCenter; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Example/Pods/SVProgressHUD/SVProgressHUD/SVRadialGradientLayer.m: -------------------------------------------------------------------------------- 1 | // 2 | // SVRadialGradientLayer.m 3 | // SVProgressHUD, https://github.com/SVProgressHUD/SVProgressHUD 4 | // 5 | // Copyright (c) 2014-2018 Tobias Tiemerding. All rights reserved. 6 | // 7 | 8 | #import "SVRadialGradientLayer.h" 9 | 10 | @implementation SVRadialGradientLayer 11 | 12 | - (void)drawInContext:(CGContextRef)context { 13 | size_t locationsCount = 2; 14 | CGFloat locations[2] = {0.0f, 1.0f}; 15 | CGFloat colors[8] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.75f}; 16 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 17 | CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, locations, locationsCount); 18 | CGColorSpaceRelease(colorSpace); 19 | 20 | float radius = MIN(self.bounds.size.width , self.bounds.size.height); 21 | CGContextDrawRadialGradient (context, gradient, self.gradientCenter, 0, self.gradientCenter, radius, kCGGradientDrawsAfterEndLocation); 22 | CGGradientRelease(gradient); 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JPBasic/JPBasic-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 | 0.1.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JPBasic/JPBasic-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_JPBasic : NSObject 3 | @end 4 | @implementation PodsDummy_JPBasic 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JPBasic/JPBasic-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JPBasic/JPBasic.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JPBasic 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/YYText" "${PODS_CONFIGURATION_BUILD_DIR}/pop" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/JPBasic 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JPBasic/JPBasic.modulemap: -------------------------------------------------------------------------------- 1 | framework module JPBasic { 2 | umbrella header "JPBasic-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/JPBasic/JPBasic.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JPBasic 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/YYText" "${PODS_CONFIGURATION_BUILD_DIR}/pop" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/JPBasic 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJExtension/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 | 3.2.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJExtension/MJExtension-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_MJExtension : NSObject 3 | @end 4 | @implementation PodsDummy_MJExtension 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJExtension/MJExtension-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJExtension/MJExtension-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "MJExtension.h" 14 | #import "MJExtensionConst.h" 15 | #import "MJFoundation.h" 16 | #import "MJProperty.h" 17 | #import "MJPropertyKey.h" 18 | #import "MJPropertyType.h" 19 | #import "NSObject+MJClass.h" 20 | #import "NSObject+MJCoding.h" 21 | #import "NSObject+MJKeyValue.h" 22 | #import "NSObject+MJProperty.h" 23 | #import "NSString+MJExtension.h" 24 | 25 | FOUNDATION_EXPORT double MJExtensionVersionNumber; 26 | FOUNDATION_EXPORT const unsigned char MJExtensionVersionString[]; 27 | 28 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJExtension/MJExtension.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MJExtension 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/MJExtension 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJExtension/MJExtension.modulemap: -------------------------------------------------------------------------------- 1 | framework module MJExtension { 2 | umbrella header "MJExtension-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJExtension/MJExtension.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MJExtension 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/MJExtension 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJRefresh/MJRefresh-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 | 3.4.3 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJRefresh/MJRefresh-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_MJRefresh : NSObject 3 | @end 4 | @implementation PodsDummy_MJRefresh 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJRefresh/MJRefresh-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJRefresh/MJRefresh-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "MJRefreshAutoFooter.h" 14 | #import "MJRefreshBackFooter.h" 15 | #import "MJRefreshComponent.h" 16 | #import "MJRefreshFooter.h" 17 | #import "MJRefreshHeader.h" 18 | #import "MJRefreshAutoGifFooter.h" 19 | #import "MJRefreshAutoNormalFooter.h" 20 | #import "MJRefreshAutoStateFooter.h" 21 | #import "MJRefreshBackGifFooter.h" 22 | #import "MJRefreshBackNormalFooter.h" 23 | #import "MJRefreshBackStateFooter.h" 24 | #import "MJRefreshGifHeader.h" 25 | #import "MJRefreshNormalHeader.h" 26 | #import "MJRefreshStateHeader.h" 27 | #import "MJRefresh.h" 28 | #import "MJRefreshConfig.h" 29 | #import "MJRefreshConst.h" 30 | #import "NSBundle+MJRefresh.h" 31 | #import "UIScrollView+MJExtension.h" 32 | #import "UIScrollView+MJRefresh.h" 33 | #import "UIView+MJExtension.h" 34 | 35 | FOUNDATION_EXPORT double MJRefreshVersionNumber; 36 | FOUNDATION_EXPORT const unsigned char MJRefreshVersionString[]; 37 | 38 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJRefresh/MJRefresh.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/MJRefresh 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJRefresh/MJRefresh.modulemap: -------------------------------------------------------------------------------- 1 | framework module MJRefresh { 2 | umbrella header "MJRefresh-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MJRefresh/MJRefresh.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/MJRefresh 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Masonry/Masonry-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.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Masonry/Masonry-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Masonry : NSObject 3 | @end 4 | @implementation PodsDummy_Masonry 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Masonry/Masonry-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Masonry/Masonry-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "MASCompositeConstraint.h" 14 | #import "MASConstraint+Private.h" 15 | #import "MASConstraint.h" 16 | #import "MASConstraintMaker.h" 17 | #import "MASLayoutConstraint.h" 18 | #import "Masonry.h" 19 | #import "MASUtilities.h" 20 | #import "MASViewAttribute.h" 21 | #import "MASViewConstraint.h" 22 | #import "NSArray+MASAdditions.h" 23 | #import "NSArray+MASShorthandAdditions.h" 24 | #import "NSLayoutConstraint+MASDebugAdditions.h" 25 | #import "View+MASAdditions.h" 26 | #import "View+MASShorthandAdditions.h" 27 | #import "ViewController+MASAdditions.h" 28 | 29 | FOUNDATION_EXPORT double MasonryVersionNumber; 30 | FOUNDATION_EXPORT const unsigned char MasonryVersionString[]; 31 | 32 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Masonry/Masonry.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Masonry 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "UIKit" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Masonry 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Masonry/Masonry.modulemap: -------------------------------------------------------------------------------- 1 | framework module Masonry { 2 | umbrella header "Masonry-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Masonry/Masonry.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Masonry 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "UIKit" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Masonry 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-FirstLineHeadIndentAnimation_Example/Pods-FirstLineHeadIndentAnimation_Example-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.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-FirstLineHeadIndentAnimation_Example/Pods-FirstLineHeadIndentAnimation_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_FirstLineHeadIndentAnimation_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_FirstLineHeadIndentAnimation_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-FirstLineHeadIndentAnimation_Example/Pods-FirstLineHeadIndentAnimation_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_FirstLineHeadIndentAnimation_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_FirstLineHeadIndentAnimation_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-FirstLineHeadIndentAnimation_Example/Pods-FirstLineHeadIndentAnimation_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_FirstLineHeadIndentAnimation_Example { 2 | umbrella header "Pods-FirstLineHeadIndentAnimation_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-FirstLineHeadIndentAnimation_Tests/Pods-FirstLineHeadIndentAnimation_Tests-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.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-FirstLineHeadIndentAnimation_Tests/Pods-FirstLineHeadIndentAnimation_Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-FirstLineHeadIndentAnimation_Tests/Pods-FirstLineHeadIndentAnimation_Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-FirstLineHeadIndentAnimation_Tests/Pods-FirstLineHeadIndentAnimation_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_FirstLineHeadIndentAnimation_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_FirstLineHeadIndentAnimation_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-FirstLineHeadIndentAnimation_Tests/Pods-FirstLineHeadIndentAnimation_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_FirstLineHeadIndentAnimation_TestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_FirstLineHeadIndentAnimation_TestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-FirstLineHeadIndentAnimation_Tests/Pods-FirstLineHeadIndentAnimation_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_FirstLineHeadIndentAnimation_Tests { 2 | umbrella header "Pods-FirstLineHeadIndentAnimation_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-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 | 2.2.5 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SVProgressHUD : NSObject 3 | @end 4 | @implementation PodsDummy_SVProgressHUD 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "SVIndefiniteAnimatedView.h" 14 | #import "SVProgressAnimatedView.h" 15 | #import "SVProgressHUD.h" 16 | #import "SVRadialGradientLayer.h" 17 | 18 | FOUNDATION_EXPORT double SVProgressHUDVersionNumber; 19 | FOUNDATION_EXPORT const unsigned char SVProgressHUDVersionString[]; 20 | 21 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SVProgressHUD 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.modulemap: -------------------------------------------------------------------------------- 1 | framework module SVProgressHUD { 2 | umbrella header "SVProgressHUD-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/SVProgressHUD/SVProgressHUD.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -framework "QuartzCore" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SVProgressHUD 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYCache/YYCache-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.4 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYCache/YYCache-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_YYCache : NSObject 3 | @end 4 | @implementation PodsDummy_YYCache 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYCache/YYCache-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYCache/YYCache-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "YYCache.h" 14 | #import "YYDiskCache.h" 15 | #import "YYKVStorage.h" 16 | #import "YYMemoryCache.h" 17 | 18 | FOUNDATION_EXPORT double YYCacheVersionNumber; 19 | FOUNDATION_EXPORT const unsigned char YYCacheVersionString[]; 20 | 21 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYCache/YYCache.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYCache 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CoreFoundation" -framework "QuartzCore" -framework "UIKit" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYCache 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYCache/YYCache.modulemap: -------------------------------------------------------------------------------- 1 | framework module YYCache { 2 | umbrella header "YYCache-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYCache/YYCache.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYCache 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -l"sqlite3" -framework "CoreFoundation" -framework "QuartzCore" -framework "UIKit" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYCache 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYImage/YYImage-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.4 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYImage/YYImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_YYImage : NSObject 3 | @end 4 | @implementation PodsDummy_YYImage 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYImage/YYImage-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYImage/YYImage-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "YYAnimatedImageView.h" 14 | #import "YYFrameImage.h" 15 | #import "YYImage.h" 16 | #import "YYImageCoder.h" 17 | #import "YYSpriteSheetImage.h" 18 | 19 | FOUNDATION_EXPORT double YYImageVersionNumber; 20 | FOUNDATION_EXPORT const unsigned char YYImageVersionString[]; 21 | 22 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYImage/YYImage.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYImage 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "UIKit" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYImage 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYImage/YYImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module YYImage { 2 | umbrella header "YYImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYImage/YYImage.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYImage 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -l"z" -framework "Accelerate" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "UIKit" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYImage 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYText/YYText-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.7 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYText/YYText-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_YYText : NSObject 3 | @end 4 | @implementation PodsDummy_YYText 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYText/YYText-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYText/YYText-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "YYTextContainerView.h" 14 | #import "YYTextDebugOption.h" 15 | #import "YYTextEffectWindow.h" 16 | #import "YYTextInput.h" 17 | #import "YYTextKeyboardManager.h" 18 | #import "YYTextLayout.h" 19 | #import "YYTextLine.h" 20 | #import "YYTextMagnifier.h" 21 | #import "YYTextSelectionView.h" 22 | #import "YYTextArchiver.h" 23 | #import "YYTextAttribute.h" 24 | #import "YYTextParser.h" 25 | #import "YYTextRubyAnnotation.h" 26 | #import "YYTextRunDelegate.h" 27 | #import "NSAttributedString+YYText.h" 28 | #import "NSParagraphStyle+YYText.h" 29 | #import "UIPasteboard+YYText.h" 30 | #import "UIView+YYText.h" 31 | #import "YYTextAsyncLayer.h" 32 | #import "YYTextTransaction.h" 33 | #import "YYTextUtilities.h" 34 | #import "YYTextWeakProxy.h" 35 | #import "YYLabel.h" 36 | #import "YYText.h" 37 | #import "YYTextView.h" 38 | 39 | FOUNDATION_EXPORT double YYTextVersionNumber; 40 | FOUNDATION_EXPORT const unsigned char YYTextVersionString[]; 41 | 42 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYText/YYText.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYText 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "CoreFoundation" -framework "CoreText" -framework "MobileCoreServices" -framework "QuartzCore" -framework "UIKit" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYText 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYText/YYText.modulemap: -------------------------------------------------------------------------------- 1 | framework module YYText { 2 | umbrella header "YYText-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYText/YYText.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYText 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "CoreFoundation" -framework "CoreText" -framework "MobileCoreServices" -framework "QuartzCore" -framework "UIKit" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYText 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYWebImage/YYWebImage-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.5 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYWebImage/YYWebImage-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_YYWebImage : NSObject 3 | @end 4 | @implementation PodsDummy_YYWebImage 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYWebImage/YYWebImage-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYWebImage/YYWebImage-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "YYImageCache.h" 14 | #import "YYWebImage.h" 15 | #import "YYWebImageManager.h" 16 | #import "YYWebImageOperation.h" 17 | #import "CALayer+YYWebImage.h" 18 | #import "MKAnnotationView+YYWebImage.h" 19 | #import "UIButton+YYWebImage.h" 20 | #import "UIImage+YYWebImage.h" 21 | #import "UIImageView+YYWebImage.h" 22 | 23 | FOUNDATION_EXPORT double YYWebImageVersionNumber; 24 | FOUNDATION_EXPORT const unsigned char YYWebImageVersionString[]; 25 | 26 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYWebImage/YYWebImage.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYWebImage 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/YYCache" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYWebImage 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYWebImage/YYWebImage.modulemap: -------------------------------------------------------------------------------- 1 | framework module YYWebImage { 2 | umbrella header "YYWebImage-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/YYWebImage/YYWebImage.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYWebImage 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/YYCache" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "AssetsLibrary" -framework "CoreFoundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/YYWebImage 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/pop/pop-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.12 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/pop/pop-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_pop : NSObject 3 | @end 4 | @implementation PodsDummy_pop 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/pop/pop-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/pop/pop-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "POP.h" 14 | #import "POPAnimatableProperty.h" 15 | #import "POPAnimatablePropertyTypes.h" 16 | #import "POPAnimation.h" 17 | #import "POPAnimationEvent.h" 18 | #import "POPAnimationExtras.h" 19 | #import "POPAnimationTracer.h" 20 | #import "POPAnimator.h" 21 | #import "POPBasicAnimation.h" 22 | #import "POPCustomAnimation.h" 23 | #import "POPDecayAnimation.h" 24 | #import "POPDefines.h" 25 | #import "POPGeometry.h" 26 | #import "POPLayerExtras.h" 27 | #import "POPPropertyAnimation.h" 28 | #import "POPSpringAnimation.h" 29 | #import "POPVector.h" 30 | 31 | FOUNDATION_EXPORT double popVersionNumber; 32 | FOUNDATION_EXPORT const unsigned char popVersionString[]; 33 | 34 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/pop/pop.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_CXX_LANGUAGE_STANDARD = c++11 2 | CLANG_CXX_LIBRARY = libc++ 3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/pop 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | OTHER_LDFLAGS = $(inherited) -l"c++" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/pop 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/pop/pop.modulemap: -------------------------------------------------------------------------------- 1 | framework module pop { 2 | umbrella header "pop-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/pop/pop.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_CXX_LANGUAGE_STANDARD = c++11 2 | CLANG_CXX_LIBRARY = libc++ 3 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/pop 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | OTHER_LDFLAGS = $(inherited) -l"c++" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/pop 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Example/Pods/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 | -------------------------------------------------------------------------------- /Example/Pods/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 | -------------------------------------------------------------------------------- /Example/Pods/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 | -------------------------------------------------------------------------------- /Example/Pods/YYText/YYText/String/YYTextArchiver.h: -------------------------------------------------------------------------------- 1 | // 2 | // YYTextArchiver.h 3 | // YYText 4 | // 5 | // Created by ibireme on 15/3/16. 6 | // Copyright (c) 2015 ibireme. 7 | // 8 | // This source code is licensed under the MIT-style license found in the 9 | // LICENSE file in the root directory of this source tree. 10 | // 11 | 12 | #import 13 | 14 | NS_ASSUME_NONNULL_BEGIN 15 | 16 | /** 17 | A subclass of `NSKeyedArchiver` which implement `NSKeyedArchiverDelegate` protocol. 18 | 19 | The archiver can encode the object which contains 20 | CGColor/CGImage/CTRunDelegateRef/.. (such as NSAttributedString). 21 | */ 22 | @interface YYTextArchiver : NSKeyedArchiver 23 | @end 24 | 25 | /** 26 | A subclass of `NSKeyedUnarchiver` which implement `NSKeyedUnarchiverDelegate` 27 | protocol. The unarchiver can decode the data which is encoded by 28 | `YYTextArchiver` or `NSKeyedArchiver`. 29 | */ 30 | @interface YYTextUnarchiver : NSKeyedUnarchiver 31 | @end 32 | 33 | NS_ASSUME_NONNULL_END 34 | -------------------------------------------------------------------------------- /Example/Pods/YYText/YYText/Utility/NSParagraphStyle+YYText.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSParagraphStyle+YYText.h 3 | // YYText 4 | // 5 | // Created by ibireme on 14/10/7. 6 | // Copyright (c) 2015 ibireme. 7 | // 8 | // This source code is licensed under the MIT-style license found in the 9 | // LICENSE file in the root directory of this source tree. 10 | // 11 | 12 | #import 13 | 14 | NS_ASSUME_NONNULL_BEGIN 15 | 16 | /** 17 | Provides extensions for `NSParagraphStyle` to work with CoreText. 18 | */ 19 | @interface NSParagraphStyle (YYText) 20 | 21 | /** 22 | Creates a new NSParagraphStyle object from the CoreText Style. 23 | 24 | @param CTStyle CoreText Paragraph Style. 25 | 26 | @return a new NSParagraphStyle 27 | */ 28 | + (nullable NSParagraphStyle *)yy_styleWithCTStyle:(CTParagraphStyleRef)CTStyle; 29 | 30 | /** 31 | Creates and returns a CoreText Paragraph Style. (need call CFRelease() after used) 32 | */ 33 | - (nullable CTParagraphStyleRef)yy_CTStyle CF_RETURNS_RETAINED; 34 | 35 | @end 36 | 37 | NS_ASSUME_NONNULL_END 38 | -------------------------------------------------------------------------------- /Example/Pods/YYText/YYText/Utility/UIPasteboard+YYText.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIPasteboard+YYText.h 3 | // YYText 4 | // 5 | // Created by ibireme on 15/4/2. 6 | // Copyright (c) 2015 ibireme. 7 | // 8 | // This source code is licensed under the MIT-style license found in the 9 | // LICENSE file in the root directory of this source tree. 10 | // 11 | 12 | #import 13 | 14 | NS_ASSUME_NONNULL_BEGIN 15 | 16 | /** 17 | Extend UIPasteboard to support image and attributed string. 18 | */ 19 | @interface UIPasteboard (YYText) 20 | 21 | @property (nullable, nonatomic, copy) NSData *yy_PNGData; ///< PNG file data 22 | @property (nullable, nonatomic, copy) NSData *yy_JPEGData; ///< JPEG file data 23 | @property (nullable, nonatomic, copy) NSData *yy_GIFData; ///< GIF file data 24 | @property (nullable, nonatomic, copy) NSData *yy_WEBPData; ///< WebP file data 25 | @property (nullable, nonatomic, copy) NSData *yy_ImageData; ///< image file data 26 | 27 | /// Attributed string, 28 | /// Set this attributed will also set the string property which is copy from the attributed string. 29 | /// If the attributed string contains one or more image, it will also set the `images` property. 30 | @property (nullable, nonatomic, copy) NSAttributedString *yy_AttributedString; 31 | 32 | @end 33 | 34 | 35 | /// The name identifying the attributed string in pasteboard. 36 | UIKIT_EXTERN NSString *const YYTextPasteboardTypeAttributedString; 37 | 38 | /// The UTI Type identifying WebP data in pasteboard. 39 | UIKIT_EXTERN NSString *const YYTextUTTypeWEBP; 40 | 41 | NS_ASSUME_NONNULL_END 42 | -------------------------------------------------------------------------------- /Example/Pods/YYText/YYText/Utility/YYTextTransaction.h: -------------------------------------------------------------------------------- 1 | // 2 | // YYTextTransaction.h 3 | // YYText 4 | // 5 | // Created by ibireme on 15/4/18. 6 | // Copyright (c) 2015 ibireme. 7 | // 8 | // This source code is licensed under the MIT-style license found in the 9 | // LICENSE file in the root directory of this source tree. 10 | // 11 | 12 | #import 13 | 14 | NS_ASSUME_NONNULL_BEGIN 15 | 16 | /** 17 | YYTextTransaction let you perform a selector once before current runloop sleep. 18 | */ 19 | @interface YYTextTransaction : NSObject 20 | 21 | /** 22 | Creates and returns a transaction with a specified target and selector. 23 | 24 | @param target A specified target, the target is retained until runloop end. 25 | @param selector A selector for target. 26 | 27 | @return A new transaction, or nil if an error occurs. 28 | */ 29 | + (YYTextTransaction *)transactionWithTarget:(id)target selector:(SEL)selector; 30 | 31 | /** 32 | Commit the trancaction to main runloop. 33 | 34 | @discussion It will perform the selector on the target once before main runloop's 35 | current loop sleep. If the same transaction (same target and same selector) has 36 | already commit to runloop in this loop, this method do nothing. 37 | */ 38 | - (void)commit; 39 | 40 | @end 41 | 42 | NS_ASSUME_NONNULL_END 43 | -------------------------------------------------------------------------------- /Example/Pods/YYText/YYText/Utility/YYTextWeakProxy.h: -------------------------------------------------------------------------------- 1 | // 2 | // YYTextWeakProxy.h 3 | // YYText 4 | // 5 | // Created by ibireme on 14/10/18. 6 | // Copyright (c) 2015 ibireme. 7 | // 8 | // This source code is licensed under the MIT-style license found in the 9 | // LICENSE file in the root directory of this source tree. 10 | // 11 | 12 | #import 13 | 14 | NS_ASSUME_NONNULL_BEGIN 15 | 16 | /** 17 | A proxy used to hold a weak object. 18 | It can be used to avoid retain cycles, such as the target in NSTimer or CADisplayLink. 19 | 20 | sample code: 21 | 22 | @implementation MyView { 23 | NSTimer *_timer; 24 | } 25 | 26 | - (void)initTimer { 27 | YYTextWeakProxy *proxy = [YYTextWeakProxy proxyWithTarget:self]; 28 | _timer = [NSTimer timerWithTimeInterval:0.1 target:proxy selector:@selector(tick:) userInfo:nil repeats:YES]; 29 | } 30 | 31 | - (void)tick:(NSTimer *)timer {...} 32 | @end 33 | */ 34 | @interface YYTextWeakProxy : NSProxy 35 | 36 | /** 37 | The proxy target. 38 | */ 39 | @property (nullable, nonatomic, weak, readonly) id target; 40 | 41 | /** 42 | Creates a new weak proxy for target. 43 | 44 | @param target Target object. 45 | 46 | @return A new proxy object. 47 | */ 48 | - (instancetype)initWithTarget:(id)target; 49 | 50 | /** 51 | Creates a new weak proxy for target. 52 | 53 | @param target Target object. 54 | 55 | @return A new proxy object. 56 | */ 57 | + (instancetype)proxyWithTarget:(id)target; 58 | 59 | @end 60 | 61 | NS_ASSUME_NONNULL_END 62 | -------------------------------------------------------------------------------- /Example/Pods/YYText/YYText/YYText.h: -------------------------------------------------------------------------------- 1 | // 2 | // YYText.h 3 | // YYText 4 | // 5 | // Created by ibireme on 15/2/25. 6 | // Copyright (c) 2015 ibireme. 7 | // 8 | // This source code is licensed under the MIT-style license found in the 9 | // LICENSE file in the root directory of this source tree. 10 | // 11 | 12 | #import 13 | 14 | #if __has_include() 15 | FOUNDATION_EXPORT double YYTextVersionNumber; 16 | FOUNDATION_EXPORT const unsigned char YYTextVersionString[]; 17 | #import 18 | #import 19 | #import 20 | #import 21 | #import 22 | #import 23 | #import 24 | #import 25 | #import 26 | #import 27 | #import 28 | #import 29 | #import 30 | #import 31 | #import 32 | #import 33 | #else 34 | #import "YYLabel.h" 35 | #import "YYTextView.h" 36 | #import "YYTextAttribute.h" 37 | #import "YYTextArchiver.h" 38 | #import "YYTextParser.h" 39 | #import "YYTextRunDelegate.h" 40 | #import "YYTextRubyAnnotation.h" 41 | #import "YYTextLayout.h" 42 | #import "YYTextLine.h" 43 | #import "YYTextInput.h" 44 | #import "YYTextDebugOption.h" 45 | #import "YYTextKeyboardManager.h" 46 | #import "YYTextUtilities.h" 47 | #import "NSAttributedString+YYText.h" 48 | #import "NSParagraphStyle+YYText.h" 49 | #import "UIPasteboard+YYText.h" 50 | #endif 51 | -------------------------------------------------------------------------------- /Example/Pods/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 | -------------------------------------------------------------------------------- /Example/Pods/pop/LICENSE: -------------------------------------------------------------------------------- 1 | BSD License 2 | 3 | For Pop software 4 | 5 | Copyright (c) 2014, Facebook, Inc. All rights reserved. 6 | 7 | Redistribution and use in source and binary forms, with or without modification, 8 | are permitted provided that the following conditions are met: 9 | 10 | * Redistributions of source code must retain the above copyright notice, this 11 | list of conditions and the following disclaimer. 12 | 13 | * Redistributions in binary form must reproduce the above copyright notice, 14 | this list of conditions and the following disclaimer in the documentation 15 | and/or other materials provided with the distribution. 16 | 17 | * Neither the name Facebook nor the names of its contributors may be used to 18 | endorse or promote products derived from this software without specific 19 | prior written permission. 20 | 21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 22 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 25 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 28 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | -------------------------------------------------------------------------------- /Example/Pods/pop/pop/POP.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #ifndef POP_POP_H 11 | #define POP_POP_H 12 | 13 | #import 14 | 15 | #import 16 | #import 17 | #import 18 | #import 19 | #import 20 | #import 21 | #import 22 | #import 23 | #import 24 | #import 25 | #import 26 | #import 27 | #import 28 | #import 29 | 30 | #endif /* POP_POP_H */ 31 | -------------------------------------------------------------------------------- /Example/Pods/pop/pop/POPAction.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #ifndef POPACTION_H 11 | #define POPACTION_H 12 | 13 | #import 14 | 15 | #import 16 | 17 | #ifdef __cplusplus 18 | 19 | namespace POP { 20 | 21 | /** 22 | @abstract Disables Core Animation actions using RAII. 23 | @discussion The disablement of actions is scoped to the current transaction. 24 | */ 25 | class ActionDisabler 26 | { 27 | BOOL state; 28 | 29 | public: 30 | ActionDisabler() POP_NOTHROW 31 | { 32 | state = [CATransaction disableActions]; 33 | [CATransaction setDisableActions:YES]; 34 | } 35 | 36 | ~ActionDisabler() 37 | { 38 | [CATransaction setDisableActions:state]; 39 | } 40 | }; 41 | 42 | /** 43 | @abstract Enables Core Animation actions using RAII. 44 | @discussion The enablement of actions is scoped to the current transaction. 45 | */ 46 | class ActionEnabler 47 | { 48 | BOOL state; 49 | 50 | public: 51 | ActionEnabler() POP_NOTHROW 52 | { 53 | state = [CATransaction disableActions]; 54 | [CATransaction setDisableActions:NO]; 55 | } 56 | 57 | ~ActionEnabler() 58 | { 59 | [CATransaction setDisableActions:state]; 60 | } 61 | }; 62 | 63 | } 64 | 65 | #endif /* __cplusplus */ 66 | 67 | #endif /* POPACTION_H */ 68 | -------------------------------------------------------------------------------- /Example/Pods/pop/pop/POPAnimatablePropertyTypes.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | typedef void (^POPAnimatablePropertyReadBlock)(id obj, CGFloat values[]); 11 | typedef void (^POPAnimatablePropertyWriteBlock)(id obj, const CGFloat values[]); 12 | -------------------------------------------------------------------------------- /Example/Pods/pop/pop/POPAnimationEventInternal.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import "POPAnimationEvent.h" 13 | 14 | @interface POPAnimationEvent () 15 | 16 | /** 17 | @abstract Default initializer. 18 | */ 19 | - (instancetype)initWithType:(POPAnimationEventType)type time:(CFTimeInterval)time; 20 | 21 | /** 22 | @abstract Readwrite redefinition of public property. 23 | */ 24 | @property (readwrite, nonatomic, copy) NSString *animationDescription; 25 | 26 | @end 27 | 28 | @interface POPAnimationValueEvent () 29 | 30 | /** 31 | @abstract Default initializer. 32 | */ 33 | - (instancetype)initWithType:(POPAnimationEventType)type time:(CFTimeInterval)time value:(id)value; 34 | 35 | /** 36 | @abstract Readwrite redefinition of public property. 37 | */ 38 | @property (readwrite, nonatomic, strong) id velocity; 39 | 40 | @end 41 | 42 | -------------------------------------------------------------------------------- /Example/Pods/pop/pop/POPAnimationExtras.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import 13 | #import 14 | 15 | /** 16 | @abstract The current drag coefficient. 17 | @discussion A value greater than 1.0 indicates Simulator slow-motion animations are enabled. Defaults to 1.0. 18 | */ 19 | extern CGFloat POPAnimationDragCoefficient(void); 20 | 21 | @interface CAAnimation (POPAnimationExtras) 22 | 23 | /** 24 | @abstract Apply the current drag coefficient to animation speed. 25 | @discussion Convenience utility to respect Simulator slow-motion animation settings. 26 | */ 27 | - (void)pop_applyDragCoefficient; 28 | 29 | @end 30 | 31 | @interface POPSpringAnimation (POPAnimationExtras) 32 | 33 | /** 34 | @abstract Converts from spring bounciness and speed to tension, friction and mass dynamics values. 35 | */ 36 | + (void)convertBounciness:(CGFloat)bounciness speed:(CGFloat)speed toTension:(CGFloat *)outTension friction:(CGFloat *)outFriction mass:(CGFloat *)outMass; 37 | 38 | /** 39 | @abstract Converts from dynamics tension, friction and mass to spring bounciness and speed values. 40 | */ 41 | + (void)convertTension:(CGFloat)tension friction:(CGFloat)friction toBounciness:(CGFloat *)outBounciness speed:(CGFloat *)outSpeed; 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /Example/Pods/pop/pop/POPAnimationPrivate.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #define POP_ANIMATION_FRICTION_FOR_QC_FRICTION(qcFriction) (25.0 + (((qcFriction - 8.0) / 2.0) * (25.0 - 19.0))) 13 | #define POP_ANIMATION_TENSION_FOR_QC_TENSION(qcTension) (194.0 + (((qcTension - 30.0) / 50.0) * (375.0 - 194.0))) 14 | 15 | #define QC_FRICTION_FOR_POP_ANIMATION_FRICTION(fbFriction) (8.0 + 2.0 * ((fbFriction - 25.0)/(25.0 - 19.0))) 16 | #define QC_TENSION_FOR_POP_ANIMATION_TENSION(fbTension) (30.0 + 50.0 * ((fbTension - 194.0)/(375.0 - 194.0))) 17 | -------------------------------------------------------------------------------- /Example/Pods/pop/pop/POPAnimator.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | @protocol POPAnimatorDelegate; 13 | 14 | /** 15 | @abstract The animator class renders animations. 16 | */ 17 | @interface POPAnimator : NSObject 18 | 19 | /** 20 | @abstract The shared animator instance. 21 | @discussion Consumers should generally use the shared instance in lieu of creating new instances. 22 | */ 23 | + (instancetype)sharedAnimator; 24 | 25 | #if !TARGET_OS_IPHONE 26 | /** 27 | @abstract Allows to select display to bind. Returns nil if failed to create the display link. 28 | */ 29 | - (instancetype)initWithDisplayID:(CGDirectDisplayID)displayID; 30 | #endif 31 | 32 | /** 33 | @abstract The optional animator delegate. 34 | */ 35 | @property (weak, nonatomic) id delegate; 36 | 37 | /** 38 | @abstract Retrieves the nominal refresh period of a display link. Returns zero if unavailable. 39 | */ 40 | @property (readonly, nonatomic) CFTimeInterval refreshPeriod; 41 | 42 | @end 43 | 44 | /** 45 | @abstract The animator delegate. 46 | */ 47 | @protocol POPAnimatorDelegate 48 | 49 | /** 50 | @abstract Called on each frame before animation application. 51 | */ 52 | - (void)animatorWillAnimate:(POPAnimator *)animator; 53 | 54 | /** 55 | @abstract Called on each frame after animation application. 56 | */ 57 | - (void)animatorDidAnimate:(POPAnimator *)animator; 58 | 59 | @end 60 | -------------------------------------------------------------------------------- /Example/Pods/pop/pop/POPDefines.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #ifndef POP_POPDefines_h 11 | #define POP_POPDefines_h 12 | 13 | #import 14 | 15 | #ifdef __cplusplus 16 | # define POP_EXTERN_C_BEGIN extern "C" { 17 | # define POP_EXTERN_C_END } 18 | #else 19 | # define POP_EXTERN_C_BEGIN 20 | # define POP_EXTERN_C_END 21 | #endif 22 | 23 | #define POP_ARRAY_COUNT(x) sizeof(x) / sizeof(x[0]) 24 | 25 | #if defined (__cplusplus) && defined (__GNUC__) 26 | # define POP_NOTHROW __attribute__ ((nothrow)) 27 | #else 28 | # define POP_NOTHROW 29 | #endif 30 | 31 | #if defined(POP_USE_SCENEKIT) 32 | # if TARGET_OS_MAC || TARGET_OS_IPHONE 33 | # define SCENEKIT_SDK_AVAILABLE 1 34 | # endif 35 | #endif 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /Example/Tests/Tests-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 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Example/Tests/Tests-Prefix.pch: -------------------------------------------------------------------------------- 1 | // The contents of this file are implicitly included at the beginning of every test case source file. 2 | 3 | #ifdef __OBJC__ 4 | 5 | 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /Example/Tests/Tests.m: -------------------------------------------------------------------------------- 1 | // 2 | // FirstLineHeadIndentAnimationTests.m 3 | // FirstLineHeadIndentAnimationTests 4 | // 5 | // Created by zhoujianping24@hotmail.com on 05/15/2020. 6 | // Copyright (c) 2020 zhoujianping24@hotmail.com. All rights reserved. 7 | // 8 | 9 | @import XCTest; 10 | 11 | @interface Tests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation Tests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 32 | } 33 | 34 | @end 35 | 36 | -------------------------------------------------------------------------------- /Example/Tests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020 zhoujianping24@hotmail.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 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 使用YYLabel+CADisplayLink实现文本首行缩进的动画效果 2 | 3 | 实现原理:[使用YYLabel+CADisplayLink实现文本首行缩进的动画效果](https://www.jianshu.com/p/3d8cc8b45965) 4 | 5 | > 这是从项目抽取出来的小模块,体量可能有点大,另外数据是从json文件提取的(服务器返回的字段名称有点奇葩),使用的是MVVM开发模式,仅供参考。 6 | 7 | **1. ``WTVPUGCProfileCellModel``,ViewModel,负责UI布局属性的存储和计算,另外由控制器调用其API改变状态(更新、调用动画):** 8 | 9 | ![explain1](https://github.com/Rogue24/JPCover/raw/master/FirstLineHeadIndentAnimation/explain1.jpg) 10 | 11 | **2. UI布局、动画代码都在 ``WTVPUGCProfilePlayView.m`` 里面实现:** 12 | 13 | ![explain2](https://github.com/Rogue24/JPCover/raw/master/FirstLineHeadIndentAnimation/explain2.jpg) 14 | 15 | **3. 点击头像更改直播状态(单个),点击关注按钮更改关注状态(全局)** 16 | 17 | ![实现效果](https://github.com/Rogue24/JPCover/raw/master/FirstLineHeadIndentAnimation/cover.gif) 18 | 19 | ## 反馈地址 20 | 21 | 扣扣:184669029 22 | 博客:https://www.jianshu.com/u/2edfbadd451c 23 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj --------------------------------------------------------------------------------