├── .gitignore ├── .travis.yml ├── Keep.gif ├── KeepGuidePage.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ ├── Michael.xcuserdatad │ │ └── UserInterfaceState.xcuserstate │ │ └── sunjinshuai.xcuserdatad │ │ └── UserInterfaceState.xcuserstate ├── xcshareddata │ └── xcschemes │ │ └── KeepGuidePage.xcscheme └── xcuserdata │ ├── Michael.xcuserdatad │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ │ ├── KeepGuidePage.xcscheme │ │ └── xcschememanagement.plist │ └── sunjinshuai.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── KeepGuidePage ├── Account(账号) │ └── Controller │ │ ├── LoginViewController.h │ │ ├── LoginViewController.m │ │ ├── RegisterViewController.h │ │ └── RegisterViewController.m ├── AppDelegate.h ├── AppDelegate.m ├── Find(发现) │ └── Controller │ │ ├── KeepFindViewController.h │ │ └── KeepFindViewController.m ├── Follow(关注) │ └── Controller │ │ ├── KeepFollowViewController.h │ │ └── KeepFollowViewController.m ├── Images.xcassets │ ├── 3DTouch │ │ ├── .svn │ │ │ ├── all-wcprops │ │ │ ├── entries │ │ │ └── text-base │ │ │ │ └── Contents.json.svn-base │ │ ├── Contents.json │ │ ├── fx_3DTouch_AdorableStar.imageset │ │ │ ├── Contents.json │ │ │ ├── fx_3DTouch_AdorableStar@2x.png │ │ │ └── fx_3DTouch_AdorableStar@3x.png │ │ ├── fx_3DTouch_Receipt_of_goods.imageset │ │ │ ├── Contents.json │ │ │ ├── fx_3DTouch_Receipt_of_goods@2x.png │ │ │ └── fx_3DTouch_Receipt_of_goods@3x.png │ │ ├── fx_3DTouch_Search_brand.imageset │ │ │ ├── Contents.json │ │ │ ├── fx_3DTouch_Search_brand@2x.png │ │ │ └── fx_3DTouch_Search_brand@3x.png │ │ └── fx_3DTouch_Star_Ticket.imageset │ │ │ ├── Contents.json │ │ │ ├── fx_3DTouch_Star_Ticket@2x.png │ │ │ └── fx_3DTouch_Star_Ticket@3x.png │ ├── Account │ │ ├── Contents.json │ │ ├── qq.imageset │ │ │ ├── Contents.json │ │ │ ├── qq.png │ │ │ ├── qq@2x.png │ │ │ └── qq@3x.png │ │ ├── qq_light.imageset │ │ │ ├── Contents.json │ │ │ ├── qq_light.png │ │ │ ├── qq_light@2x.png │ │ │ └── qq_light@3x.png │ │ ├── wechat.imageset │ │ │ ├── Contents.json │ │ │ ├── wechat.png │ │ │ ├── wechat@2x.png │ │ │ └── wechat@3x.png │ │ ├── wechat_light.imageset │ │ │ ├── Contents.json │ │ │ ├── wechat_light.png │ │ │ ├── wechat_light@2x.png │ │ │ └── wechat_light@3x.png │ │ ├── weico.imageset │ │ │ ├── Contents.json │ │ │ ├── weico.png │ │ │ ├── weico@2x.png │ │ │ └── weico@3x.png │ │ └── weico_light.imageset │ │ │ ├── Contents.json │ │ │ ├── weico_light.png │ │ │ ├── weico_light@2x.png │ │ │ └── weico_light@3x.png │ ├── AppIcon.appiconset │ │ ├── AppIcon29x29@2x.png │ │ ├── AppIcon29x29@3x.png │ │ ├── AppIcon40x40@2x.png │ │ ├── AppIcon40x40@3x.png │ │ ├── AppIcon60x60@2x.png │ │ ├── AppIcon60x60@3x.png │ │ └── Contents.json │ ├── Brand Assets.launchimage │ │ ├── Contents.json │ │ ├── LaunchImage-700-568h@2x.png │ │ ├── LaunchImage-700@2x.png │ │ ├── LaunchImage-800-667h@2x.png │ │ └── LaunchImage-800-Portrait-736h@3x.png │ ├── Contents.json │ ├── Find │ │ ├── Contents.json │ │ ├── discovery.imageset │ │ │ ├── Contents.json │ │ │ ├── discovery.png │ │ │ ├── discovery@2x.png │ │ │ └── discovery@3x.png │ │ └── discovery_on.imageset │ │ │ ├── Contents.json │ │ │ ├── discovery_on.png │ │ │ ├── discovery_on@2x.png │ │ │ └── discovery_on@3x.png │ ├── Follow │ │ ├── Contents.json │ │ ├── trends.imageset │ │ │ ├── Contents.json │ │ │ ├── trends.png │ │ │ ├── trends@2x.png │ │ │ └── trends@3x.png │ │ └── trends_on.imageset │ │ │ ├── Contents.json │ │ │ ├── trends_on.png │ │ │ ├── trends_on@2x.png │ │ │ └── trends_on@3x.png │ ├── Navigation │ │ ├── Contents.json │ │ ├── back.imageset │ │ │ ├── Contents.json │ │ │ ├── back.png │ │ │ ├── back@2x.png │ │ │ └── back@3x.png │ │ └── backbtn.imageset │ │ │ ├── Contents.json │ │ │ ├── backbtn.png │ │ │ ├── backbtn@2x.png │ │ │ └── backbtn@3x.png │ ├── NewFeature │ │ ├── Contents.json │ │ └── keep.imageset │ │ │ ├── Contents.json │ │ │ ├── keep6.png │ │ │ ├── keep6@2x.png │ │ │ └── keep6plus@3x.png │ ├── PersonalCenter │ │ ├── Contents.json │ │ ├── personal.imageset │ │ │ ├── Contents.json │ │ │ ├── personal.png │ │ │ ├── personal@2x.png │ │ │ └── personal@3x.png │ │ └── personal_on.imageset │ │ │ ├── Contents.json │ │ │ ├── personal_on.png │ │ │ ├── personal_on@2x.png │ │ │ └── personal_on@3x.png │ └── Train │ │ ├── Contents.json │ │ ├── train.imageset │ │ ├── Contents.json │ │ ├── train.png │ │ ├── train@2x.png │ │ └── train@3x.png │ │ └── train_on.imageset │ │ ├── Contents.json │ │ ├── train_on.png │ │ ├── train_on@2x.png │ │ └── train_on@3x.png ├── Info.plist ├── Main(主要) │ └── Controller │ │ ├── KeepNavigationViewController.h │ │ ├── KeepNavigationViewController.m │ │ ├── KeepNewFeatureViewController.h │ │ ├── KeepNewFeatureViewController.m │ │ ├── KeepTabBarViewController.h │ │ └── KeepTabBarViewController.m ├── NewFeatrue(新特性) │ └── View │ │ ├── KeepAdLabel.h │ │ ├── KeepAdLabel.m │ │ ├── KeepAdScrollView.h │ │ ├── KeepAdScrollView.m │ │ ├── KeepNewFeatrueView.h │ │ └── KeepNewFeatrueView.m ├── PersonalCenter(个人中心) │ └── Controller │ │ ├── KeepPersonalViewController.h │ │ └── KeepPersonalViewController.m ├── Public(公共库) │ ├── Category │ │ ├── NSString+Extension.h │ │ ├── NSString+Extension.m │ │ ├── UIBarButtonItem+Extension.h │ │ ├── UIBarButtonItem+Extension.m │ │ ├── UIColor+Extension.h │ │ ├── UIColor+Extension.m │ │ ├── UILabel+Extension.h │ │ ├── UILabel+Extension.m │ │ ├── UIView+Extension.h │ │ └── UIView+Extension.m │ ├── CustomView │ │ ├── KeepCancelHighlightButton.h │ │ └── KeepCancelHighlightButton.m │ ├── MYCollectionViewStreamLineFlowLayout │ │ ├── MYCollectionViewStreamLineFlowLayout.h │ │ ├── MYCollectionViewStreamLineFlowLayout.m │ │ ├── MYGroupIssueLabelCell.h │ │ └── MYGroupIssueLabelCell.m │ └── Other │ │ ├── Constant.h │ │ └── Constant.m ├── Train(训练) │ └── Controller │ │ ├── KeepTrainViewController.h │ │ └── KeepTrainViewController.m ├── keep.mp4 └── main.m ├── KeepGuidePageTests ├── Info.plist └── KeepGuidePageTests.m ├── KeepGuidePageUITests ├── Info.plist └── KeepGuidePageUITests.m └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | .DS_Store 20 | */.DS_Store 21 | 22 | ## Other 23 | *.moved-aside 24 | *.xccheckout 25 | *.xcscmblueprint 26 | 27 | ## Obj-C/Swift specific 28 | *.hmap 29 | *.ipa 30 | *.dSYM.zip 31 | *.dSYM 32 | 33 | # CocoaPods 34 | # 35 | # We recommend against adding the Pods directory to your .gitignore. However 36 | # you should judge for yourself, the pros and cons are mentioned at: 37 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 38 | # 39 | # Pods/ 40 | 41 | # Carthage 42 | # 43 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 44 | # Carthage/Checkouts 45 | 46 | Carthage/Build 47 | 48 | # fastlane 49 | # 50 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 51 | # screenshots whenever they are needed. 52 | # For more information about the recommended setup visit: 53 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 54 | 55 | fastlane/report.xml 56 | fastlane/Preview.html 57 | fastlane/screenshots 58 | fastlane/test_output 59 | 60 | # Code Injection 61 | # 62 | # After new code Injection tools there's a generated folder /iOSInjectionProject 63 | # https://github.com/johnno1962/injectionforxcode 64 | 65 | iOSInjectionProject/ 66 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | osx_image: xcode9 2 | language: objective-c 3 | 4 | env: 5 | global: 6 | - LANG=en_US.UTF-8 7 | - LC_ALL=en_US.UTF-8 8 | - XCODE_PROJECT=Keep/KeepGuidePage.xcodeproj 9 | matrix: 10 | - SCHEME="KeepGuidePage" 11 | 12 | after_success: 13 | - sleep 5 14 | -------------------------------------------------------------------------------- /Keep.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/Keep.gif -------------------------------------------------------------------------------- /KeepGuidePage.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 4C670B4B1E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C670B4A1E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.m */; }; 11 | 4C670B4E1E5347C200281698 /* MYGroupIssueLabelCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C670B4D1E5347C200281698 /* MYGroupIssueLabelCell.m */; }; 12 | 4C670B531E53483800281698 /* UIColor+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C670B501E53483800281698 /* UIColor+Extension.m */; }; 13 | 4C670B541E53483800281698 /* UILabel+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C670B521E53483800281698 /* UILabel+Extension.m */; }; 14 | 4C670B571E53498200281698 /* NSString+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C670B561E53498200281698 /* NSString+Extension.m */; }; 15 | 4CCB2DD71D42714E007BAE45 /* KeepTabBarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DD61D42714E007BAE45 /* KeepTabBarViewController.m */; }; 16 | 4CCB2DDA1D427188007BAE45 /* KeepNewFeatureViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DD91D427188007BAE45 /* KeepNewFeatureViewController.m */; }; 17 | 4CCB2DED1D427676007BAE45 /* KeepNavigationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DEC1D427676007BAE45 /* KeepNavigationViewController.m */; }; 18 | 4CCB2DF01D427705007BAE45 /* KeepTrainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DEF1D427705007BAE45 /* KeepTrainViewController.m */; }; 19 | 4CCB2DF31D427715007BAE45 /* KeepFindViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DF21D427715007BAE45 /* KeepFindViewController.m */; }; 20 | 4CCB2DF61D427724007BAE45 /* KeepFollowViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DF51D427724007BAE45 /* KeepFollowViewController.m */; }; 21 | 4CCB2DF91D427736007BAE45 /* KeepPersonalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CCB2DF81D427736007BAE45 /* KeepPersonalViewController.m */; }; 22 | 4CE9CDDF1D4B506E00132928 /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9CDDE1D4B506E00132928 /* LoginViewController.m */; }; 23 | 4CE9CDE21D4B508E00132928 /* RegisterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9CDE11D4B508E00132928 /* RegisterViewController.m */; }; 24 | 4CE9CDE71D4B5E6200132928 /* UIBarButtonItem+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9CDE61D4B5E6200132928 /* UIBarButtonItem+Extension.m */; }; 25 | 4CE9CDEA1D4B5E7800132928 /* UIView+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9CDE91D4B5E7800132928 /* UIView+Extension.m */; }; 26 | 4CE9CDEE1D4B5ED800132928 /* KeepCancelHighlightButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9CDED1D4B5ED800132928 /* KeepCancelHighlightButton.m */; }; 27 | 4CE9CDF21D4B608B00132928 /* Constant.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9CDF11D4B608B00132928 /* Constant.m */; }; 28 | 4CFC68081D25082E00BD60F8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC68071D25082E00BD60F8 /* main.m */; }; 29 | 4CFC680B1D25082E00BD60F8 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC680A1D25082E00BD60F8 /* AppDelegate.m */; }; 30 | 4CFC68211D25082F00BD60F8 /* KeepGuidePageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC68201D25082F00BD60F8 /* KeepGuidePageTests.m */; }; 31 | 4CFC682C1D25082F00BD60F8 /* KeepGuidePageUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC682B1D25082F00BD60F8 /* KeepGuidePageUITests.m */; }; 32 | 4CFC683A1D2508A700BD60F8 /* keep.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 4CFC68391D2508A700BD60F8 /* keep.mp4 */; }; 33 | 4CFC683C1D251A7B00BD60F8 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4CFC683B1D251A7B00BD60F8 /* Images.xcassets */; }; 34 | 4CFC68481D251C9E00BD60F8 /* KeepNewFeatrueView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC68471D251C9E00BD60F8 /* KeepNewFeatrueView.m */; }; 35 | 4CFC684B1D25258200BD60F8 /* KeepAdScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC684A1D25258200BD60F8 /* KeepAdScrollView.m */; }; 36 | 4CFC684E1D252B0C00BD60F8 /* KeepAdLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CFC684D1D252B0C00BD60F8 /* KeepAdLabel.m */; }; 37 | /* End PBXBuildFile section */ 38 | 39 | /* Begin PBXContainerItemProxy section */ 40 | 4CFC681D1D25082F00BD60F8 /* PBXContainerItemProxy */ = { 41 | isa = PBXContainerItemProxy; 42 | containerPortal = 4CFC67FB1D25082E00BD60F8 /* Project object */; 43 | proxyType = 1; 44 | remoteGlobalIDString = 4CFC68021D25082E00BD60F8; 45 | remoteInfo = KeepGuidePage; 46 | }; 47 | 4CFC68281D25082F00BD60F8 /* PBXContainerItemProxy */ = { 48 | isa = PBXContainerItemProxy; 49 | containerPortal = 4CFC67FB1D25082E00BD60F8 /* Project object */; 50 | proxyType = 1; 51 | remoteGlobalIDString = 4CFC68021D25082E00BD60F8; 52 | remoteInfo = KeepGuidePage; 53 | }; 54 | /* End PBXContainerItemProxy section */ 55 | 56 | /* Begin PBXFileReference section */ 57 | 4C670B491E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MYCollectionViewStreamLineFlowLayout.h; sourceTree = ""; }; 58 | 4C670B4A1E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MYCollectionViewStreamLineFlowLayout.m; sourceTree = ""; }; 59 | 4C670B4C1E5347C200281698 /* MYGroupIssueLabelCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MYGroupIssueLabelCell.h; path = "KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYGroupIssueLabelCell.h"; sourceTree = SOURCE_ROOT; }; 60 | 4C670B4D1E5347C200281698 /* MYGroupIssueLabelCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MYGroupIssueLabelCell.m; path = "KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYGroupIssueLabelCell.m"; sourceTree = SOURCE_ROOT; }; 61 | 4C670B4F1E53483800281698 /* UIColor+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+Extension.h"; sourceTree = ""; }; 62 | 4C670B501E53483800281698 /* UIColor+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Extension.m"; sourceTree = ""; }; 63 | 4C670B511E53483800281698 /* UILabel+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UILabel+Extension.h"; sourceTree = ""; }; 64 | 4C670B521E53483800281698 /* UILabel+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UILabel+Extension.m"; sourceTree = ""; }; 65 | 4C670B551E53498200281698 /* NSString+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Extension.h"; sourceTree = ""; }; 66 | 4C670B561E53498200281698 /* NSString+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Extension.m"; sourceTree = ""; }; 67 | 4CCB2DD51D42714E007BAE45 /* KeepTabBarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepTabBarViewController.h; sourceTree = ""; }; 68 | 4CCB2DD61D42714E007BAE45 /* KeepTabBarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepTabBarViewController.m; sourceTree = ""; }; 69 | 4CCB2DD81D427188007BAE45 /* KeepNewFeatureViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KeepNewFeatureViewController.h; path = "KeepGuidePage/Main(主要)/Controller/KeepNewFeatureViewController.h"; sourceTree = SOURCE_ROOT; }; 70 | 4CCB2DD91D427188007BAE45 /* KeepNewFeatureViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = KeepNewFeatureViewController.m; path = "KeepGuidePage/Main(主要)/Controller/KeepNewFeatureViewController.m"; sourceTree = SOURCE_ROOT; }; 71 | 4CCB2DEB1D427676007BAE45 /* KeepNavigationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepNavigationViewController.h; sourceTree = ""; }; 72 | 4CCB2DEC1D427676007BAE45 /* KeepNavigationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepNavigationViewController.m; sourceTree = ""; }; 73 | 4CCB2DEE1D427705007BAE45 /* KeepTrainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepTrainViewController.h; sourceTree = ""; }; 74 | 4CCB2DEF1D427705007BAE45 /* KeepTrainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepTrainViewController.m; sourceTree = ""; }; 75 | 4CCB2DF11D427715007BAE45 /* KeepFindViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepFindViewController.h; sourceTree = ""; }; 76 | 4CCB2DF21D427715007BAE45 /* KeepFindViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepFindViewController.m; sourceTree = ""; }; 77 | 4CCB2DF41D427724007BAE45 /* KeepFollowViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepFollowViewController.h; sourceTree = ""; }; 78 | 4CCB2DF51D427724007BAE45 /* KeepFollowViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepFollowViewController.m; sourceTree = ""; }; 79 | 4CCB2DF71D427736007BAE45 /* KeepPersonalViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepPersonalViewController.h; sourceTree = ""; }; 80 | 4CCB2DF81D427736007BAE45 /* KeepPersonalViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepPersonalViewController.m; sourceTree = ""; }; 81 | 4CE9CDDD1D4B506E00132928 /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = ""; }; 82 | 4CE9CDDE1D4B506E00132928 /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = ""; }; 83 | 4CE9CDE01D4B508E00132928 /* RegisterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterViewController.h; sourceTree = ""; }; 84 | 4CE9CDE11D4B508E00132928 /* RegisterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RegisterViewController.m; sourceTree = ""; }; 85 | 4CE9CDE51D4B5E6200132928 /* UIBarButtonItem+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIBarButtonItem+Extension.h"; sourceTree = ""; }; 86 | 4CE9CDE61D4B5E6200132928 /* UIBarButtonItem+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIBarButtonItem+Extension.m"; sourceTree = ""; }; 87 | 4CE9CDE81D4B5E7800132928 /* UIView+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Extension.h"; sourceTree = ""; }; 88 | 4CE9CDE91D4B5E7800132928 /* UIView+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Extension.m"; sourceTree = ""; }; 89 | 4CE9CDEC1D4B5ED800132928 /* KeepCancelHighlightButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepCancelHighlightButton.h; sourceTree = ""; }; 90 | 4CE9CDED1D4B5ED800132928 /* KeepCancelHighlightButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepCancelHighlightButton.m; sourceTree = ""; }; 91 | 4CE9CDF01D4B608B00132928 /* Constant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constant.h; sourceTree = ""; }; 92 | 4CE9CDF11D4B608B00132928 /* Constant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Constant.m; sourceTree = ""; }; 93 | 4CFC68031D25082E00BD60F8 /* KeepGuidePage.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KeepGuidePage.app; sourceTree = BUILT_PRODUCTS_DIR; }; 94 | 4CFC68071D25082E00BD60F8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 95 | 4CFC68091D25082E00BD60F8 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 96 | 4CFC680A1D25082E00BD60F8 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 97 | 4CFC68171D25082E00BD60F8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 98 | 4CFC681C1D25082F00BD60F8 /* KeepGuidePageTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KeepGuidePageTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 99 | 4CFC68201D25082F00BD60F8 /* KeepGuidePageTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KeepGuidePageTests.m; sourceTree = ""; }; 100 | 4CFC68221D25082F00BD60F8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 101 | 4CFC68271D25082F00BD60F8 /* KeepGuidePageUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KeepGuidePageUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 102 | 4CFC682B1D25082F00BD60F8 /* KeepGuidePageUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KeepGuidePageUITests.m; sourceTree = ""; }; 103 | 4CFC682D1D25082F00BD60F8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 104 | 4CFC68391D2508A700BD60F8 /* keep.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = keep.mp4; sourceTree = ""; }; 105 | 4CFC683B1D251A7B00BD60F8 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 106 | 4CFC68461D251C9E00BD60F8 /* KeepNewFeatrueView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepNewFeatrueView.h; sourceTree = ""; }; 107 | 4CFC68471D251C9E00BD60F8 /* KeepNewFeatrueView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepNewFeatrueView.m; sourceTree = ""; }; 108 | 4CFC68491D25258200BD60F8 /* KeepAdScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepAdScrollView.h; sourceTree = ""; }; 109 | 4CFC684A1D25258200BD60F8 /* KeepAdScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepAdScrollView.m; sourceTree = ""; }; 110 | 4CFC684C1D252B0C00BD60F8 /* KeepAdLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeepAdLabel.h; sourceTree = ""; }; 111 | 4CFC684D1D252B0C00BD60F8 /* KeepAdLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeepAdLabel.m; sourceTree = ""; }; 112 | /* End PBXFileReference section */ 113 | 114 | /* Begin PBXFrameworksBuildPhase section */ 115 | 4CFC68001D25082E00BD60F8 /* Frameworks */ = { 116 | isa = PBXFrameworksBuildPhase; 117 | buildActionMask = 2147483647; 118 | files = ( 119 | ); 120 | runOnlyForDeploymentPostprocessing = 0; 121 | }; 122 | 4CFC68191D25082F00BD60F8 /* Frameworks */ = { 123 | isa = PBXFrameworksBuildPhase; 124 | buildActionMask = 2147483647; 125 | files = ( 126 | ); 127 | runOnlyForDeploymentPostprocessing = 0; 128 | }; 129 | 4CFC68241D25082F00BD60F8 /* Frameworks */ = { 130 | isa = PBXFrameworksBuildPhase; 131 | buildActionMask = 2147483647; 132 | files = ( 133 | ); 134 | runOnlyForDeploymentPostprocessing = 0; 135 | }; 136 | /* End PBXFrameworksBuildPhase section */ 137 | 138 | /* Begin PBXGroup section */ 139 | 4C670B481E5346A600281698 /* MYCollectionViewStreamLineFlowLayout */ = { 140 | isa = PBXGroup; 141 | children = ( 142 | 4C670B491E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.h */, 143 | 4C670B4A1E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.m */, 144 | ); 145 | path = MYCollectionViewStreamLineFlowLayout; 146 | sourceTree = ""; 147 | }; 148 | 4CCB2DD21D42711C007BAE45 /* Main(主要) */ = { 149 | isa = PBXGroup; 150 | children = ( 151 | 4CCB2DD31D42711C007BAE45 /* Controller */, 152 | 4CCB2DD41D42711C007BAE45 /* View */, 153 | ); 154 | path = "Main(主要)"; 155 | sourceTree = ""; 156 | }; 157 | 4CCB2DD31D42711C007BAE45 /* Controller */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | 4CCB2DD51D42714E007BAE45 /* KeepTabBarViewController.h */, 161 | 4CCB2DD61D42714E007BAE45 /* KeepTabBarViewController.m */, 162 | 4CCB2DEB1D427676007BAE45 /* KeepNavigationViewController.h */, 163 | 4CCB2DEC1D427676007BAE45 /* KeepNavigationViewController.m */, 164 | ); 165 | path = Controller; 166 | sourceTree = ""; 167 | }; 168 | 4CCB2DD41D42711C007BAE45 /* View */ = { 169 | isa = PBXGroup; 170 | children = ( 171 | ); 172 | path = View; 173 | sourceTree = ""; 174 | }; 175 | 4CCB2DDB1D427337007BAE45 /* PersonalCenter(个人中心) */ = { 176 | isa = PBXGroup; 177 | children = ( 178 | 4CCB2DDC1D427337007BAE45 /* Controller */, 179 | 4CCB2DDD1D427337007BAE45 /* Model */, 180 | 4CCB2DDE1D427337007BAE45 /* View */, 181 | ); 182 | path = "PersonalCenter(个人中心)"; 183 | sourceTree = ""; 184 | }; 185 | 4CCB2DDC1D427337007BAE45 /* Controller */ = { 186 | isa = PBXGroup; 187 | children = ( 188 | 4CCB2DF71D427736007BAE45 /* KeepPersonalViewController.h */, 189 | 4CCB2DF81D427736007BAE45 /* KeepPersonalViewController.m */, 190 | ); 191 | path = Controller; 192 | sourceTree = ""; 193 | }; 194 | 4CCB2DDD1D427337007BAE45 /* Model */ = { 195 | isa = PBXGroup; 196 | children = ( 197 | ); 198 | path = Model; 199 | sourceTree = ""; 200 | }; 201 | 4CCB2DDE1D427337007BAE45 /* View */ = { 202 | isa = PBXGroup; 203 | children = ( 204 | ); 205 | path = View; 206 | sourceTree = ""; 207 | }; 208 | 4CCB2DDF1D427346007BAE45 /* Follow(关注) */ = { 209 | isa = PBXGroup; 210 | children = ( 211 | 4CCB2DE01D427346007BAE45 /* Controller */, 212 | 4CCB2DE11D427346007BAE45 /* Model */, 213 | 4CCB2DE21D427346007BAE45 /* View */, 214 | ); 215 | path = "Follow(关注)"; 216 | sourceTree = ""; 217 | }; 218 | 4CCB2DE01D427346007BAE45 /* Controller */ = { 219 | isa = PBXGroup; 220 | children = ( 221 | 4CCB2DF41D427724007BAE45 /* KeepFollowViewController.h */, 222 | 4CCB2DF51D427724007BAE45 /* KeepFollowViewController.m */, 223 | ); 224 | path = Controller; 225 | sourceTree = ""; 226 | }; 227 | 4CCB2DE11D427346007BAE45 /* Model */ = { 228 | isa = PBXGroup; 229 | children = ( 230 | ); 231 | path = Model; 232 | sourceTree = ""; 233 | }; 234 | 4CCB2DE21D427346007BAE45 /* View */ = { 235 | isa = PBXGroup; 236 | children = ( 237 | ); 238 | path = View; 239 | sourceTree = ""; 240 | }; 241 | 4CCB2DE31D42734D007BAE45 /* Find(发现) */ = { 242 | isa = PBXGroup; 243 | children = ( 244 | 4CCB2DE41D42734D007BAE45 /* Controller */, 245 | 4CCB2DE51D42734D007BAE45 /* Model */, 246 | 4CCB2DE61D42734D007BAE45 /* View */, 247 | ); 248 | path = "Find(发现)"; 249 | sourceTree = ""; 250 | }; 251 | 4CCB2DE41D42734D007BAE45 /* Controller */ = { 252 | isa = PBXGroup; 253 | children = ( 254 | 4CCB2DF11D427715007BAE45 /* KeepFindViewController.h */, 255 | 4CCB2DF21D427715007BAE45 /* KeepFindViewController.m */, 256 | ); 257 | path = Controller; 258 | sourceTree = ""; 259 | }; 260 | 4CCB2DE51D42734D007BAE45 /* Model */ = { 261 | isa = PBXGroup; 262 | children = ( 263 | ); 264 | path = Model; 265 | sourceTree = ""; 266 | }; 267 | 4CCB2DE61D42734D007BAE45 /* View */ = { 268 | isa = PBXGroup; 269 | children = ( 270 | 4C670B4C1E5347C200281698 /* MYGroupIssueLabelCell.h */, 271 | 4C670B4D1E5347C200281698 /* MYGroupIssueLabelCell.m */, 272 | ); 273 | path = View; 274 | sourceTree = ""; 275 | }; 276 | 4CCB2DE71D427353007BAE45 /* Train(训练) */ = { 277 | isa = PBXGroup; 278 | children = ( 279 | 4CCB2DE81D427353007BAE45 /* Controller */, 280 | 4CCB2DE91D427353007BAE45 /* Model */, 281 | 4CCB2DEA1D427353007BAE45 /* View */, 282 | ); 283 | path = "Train(训练)"; 284 | sourceTree = ""; 285 | }; 286 | 4CCB2DE81D427353007BAE45 /* Controller */ = { 287 | isa = PBXGroup; 288 | children = ( 289 | 4CCB2DEE1D427705007BAE45 /* KeepTrainViewController.h */, 290 | 4CCB2DEF1D427705007BAE45 /* KeepTrainViewController.m */, 291 | ); 292 | path = Controller; 293 | sourceTree = ""; 294 | }; 295 | 4CCB2DE91D427353007BAE45 /* Model */ = { 296 | isa = PBXGroup; 297 | children = ( 298 | ); 299 | path = Model; 300 | sourceTree = ""; 301 | }; 302 | 4CCB2DEA1D427353007BAE45 /* View */ = { 303 | isa = PBXGroup; 304 | children = ( 305 | ); 306 | path = View; 307 | sourceTree = ""; 308 | }; 309 | 4CE9CDD91D4B503C00132928 /* Account(账号) */ = { 310 | isa = PBXGroup; 311 | children = ( 312 | 4CE9CDDA1D4B503C00132928 /* Controller */, 313 | 4CE9CDDB1D4B503C00132928 /* Model */, 314 | 4CE9CDDC1D4B503C00132928 /* View */, 315 | ); 316 | path = "Account(账号)"; 317 | sourceTree = ""; 318 | }; 319 | 4CE9CDDA1D4B503C00132928 /* Controller */ = { 320 | isa = PBXGroup; 321 | children = ( 322 | 4CE9CDDD1D4B506E00132928 /* LoginViewController.h */, 323 | 4CE9CDDE1D4B506E00132928 /* LoginViewController.m */, 324 | 4CE9CDE01D4B508E00132928 /* RegisterViewController.h */, 325 | 4CE9CDE11D4B508E00132928 /* RegisterViewController.m */, 326 | ); 327 | path = Controller; 328 | sourceTree = ""; 329 | }; 330 | 4CE9CDDB1D4B503C00132928 /* Model */ = { 331 | isa = PBXGroup; 332 | children = ( 333 | ); 334 | path = Model; 335 | sourceTree = ""; 336 | }; 337 | 4CE9CDDC1D4B503C00132928 /* View */ = { 338 | isa = PBXGroup; 339 | children = ( 340 | ); 341 | path = View; 342 | sourceTree = ""; 343 | }; 344 | 4CE9CDE31D4B5E5700132928 /* Public(公共库) */ = { 345 | isa = PBXGroup; 346 | children = ( 347 | 4C670B481E5346A600281698 /* MYCollectionViewStreamLineFlowLayout */, 348 | 4CE9CDEF1D4B607F00132928 /* Other */, 349 | 4CE9CDEB1D4B5EBC00132928 /* CustomView */, 350 | 4CE9CDE41D4B5E5700132928 /* Category */, 351 | ); 352 | path = "Public(公共库)"; 353 | sourceTree = ""; 354 | }; 355 | 4CE9CDE41D4B5E5700132928 /* Category */ = { 356 | isa = PBXGroup; 357 | children = ( 358 | 4CE9CDE51D4B5E6200132928 /* UIBarButtonItem+Extension.h */, 359 | 4CE9CDE61D4B5E6200132928 /* UIBarButtonItem+Extension.m */, 360 | 4CE9CDE81D4B5E7800132928 /* UIView+Extension.h */, 361 | 4CE9CDE91D4B5E7800132928 /* UIView+Extension.m */, 362 | 4C670B4F1E53483800281698 /* UIColor+Extension.h */, 363 | 4C670B501E53483800281698 /* UIColor+Extension.m */, 364 | 4C670B511E53483800281698 /* UILabel+Extension.h */, 365 | 4C670B521E53483800281698 /* UILabel+Extension.m */, 366 | 4C670B551E53498200281698 /* NSString+Extension.h */, 367 | 4C670B561E53498200281698 /* NSString+Extension.m */, 368 | ); 369 | path = Category; 370 | sourceTree = ""; 371 | }; 372 | 4CE9CDEB1D4B5EBC00132928 /* CustomView */ = { 373 | isa = PBXGroup; 374 | children = ( 375 | 4CE9CDEC1D4B5ED800132928 /* KeepCancelHighlightButton.h */, 376 | 4CE9CDED1D4B5ED800132928 /* KeepCancelHighlightButton.m */, 377 | ); 378 | path = CustomView; 379 | sourceTree = ""; 380 | }; 381 | 4CE9CDEF1D4B607F00132928 /* Other */ = { 382 | isa = PBXGroup; 383 | children = ( 384 | 4CE9CDF01D4B608B00132928 /* Constant.h */, 385 | 4CE9CDF11D4B608B00132928 /* Constant.m */, 386 | ); 387 | path = Other; 388 | sourceTree = ""; 389 | }; 390 | 4CFC67FA1D25082E00BD60F8 = { 391 | isa = PBXGroup; 392 | children = ( 393 | 4CFC68051D25082E00BD60F8 /* KeepGuidePage */, 394 | 4CFC681F1D25082F00BD60F8 /* KeepGuidePageTests */, 395 | 4CFC682A1D25082F00BD60F8 /* KeepGuidePageUITests */, 396 | 4CFC68041D25082E00BD60F8 /* Products */, 397 | ); 398 | sourceTree = ""; 399 | }; 400 | 4CFC68041D25082E00BD60F8 /* Products */ = { 401 | isa = PBXGroup; 402 | children = ( 403 | 4CFC68031D25082E00BD60F8 /* KeepGuidePage.app */, 404 | 4CFC681C1D25082F00BD60F8 /* KeepGuidePageTests.xctest */, 405 | 4CFC68271D25082F00BD60F8 /* KeepGuidePageUITests.xctest */, 406 | ); 407 | name = Products; 408 | sourceTree = ""; 409 | }; 410 | 4CFC68051D25082E00BD60F8 /* KeepGuidePage */ = { 411 | isa = PBXGroup; 412 | children = ( 413 | 4CE9CDE31D4B5E5700132928 /* Public(公共库) */, 414 | 4CE9CDD91D4B503C00132928 /* Account(账号) */, 415 | 4CCB2DE71D427353007BAE45 /* Train(训练) */, 416 | 4CCB2DE31D42734D007BAE45 /* Find(发现) */, 417 | 4CCB2DDF1D427346007BAE45 /* Follow(关注) */, 418 | 4CCB2DDB1D427337007BAE45 /* PersonalCenter(个人中心) */, 419 | 4CCB2DD21D42711C007BAE45 /* Main(主要) */, 420 | 4CFC683D1D251BA200BD60F8 /* NewFeatrue(新特性) */, 421 | 4CFC68091D25082E00BD60F8 /* AppDelegate.h */, 422 | 4CFC680A1D25082E00BD60F8 /* AppDelegate.m */, 423 | 4CFC68171D25082E00BD60F8 /* Info.plist */, 424 | 4CFC683B1D251A7B00BD60F8 /* Images.xcassets */, 425 | 4CFC68061D25082E00BD60F8 /* Supporting Files */, 426 | ); 427 | path = KeepGuidePage; 428 | sourceTree = ""; 429 | }; 430 | 4CFC68061D25082E00BD60F8 /* Supporting Files */ = { 431 | isa = PBXGroup; 432 | children = ( 433 | 4CFC68391D2508A700BD60F8 /* keep.mp4 */, 434 | 4CFC68071D25082E00BD60F8 /* main.m */, 435 | ); 436 | name = "Supporting Files"; 437 | sourceTree = ""; 438 | }; 439 | 4CFC681F1D25082F00BD60F8 /* KeepGuidePageTests */ = { 440 | isa = PBXGroup; 441 | children = ( 442 | 4CFC68201D25082F00BD60F8 /* KeepGuidePageTests.m */, 443 | 4CFC68221D25082F00BD60F8 /* Info.plist */, 444 | ); 445 | path = KeepGuidePageTests; 446 | sourceTree = ""; 447 | }; 448 | 4CFC682A1D25082F00BD60F8 /* KeepGuidePageUITests */ = { 449 | isa = PBXGroup; 450 | children = ( 451 | 4CFC682B1D25082F00BD60F8 /* KeepGuidePageUITests.m */, 452 | 4CFC682D1D25082F00BD60F8 /* Info.plist */, 453 | ); 454 | path = KeepGuidePageUITests; 455 | sourceTree = ""; 456 | }; 457 | 4CFC683D1D251BA200BD60F8 /* NewFeatrue(新特性) */ = { 458 | isa = PBXGroup; 459 | children = ( 460 | 4CFC683E1D251BA200BD60F8 /* Controller */, 461 | 4CFC68411D251BA200BD60F8 /* View */, 462 | ); 463 | path = "NewFeatrue(新特性)"; 464 | sourceTree = ""; 465 | }; 466 | 4CFC683E1D251BA200BD60F8 /* Controller */ = { 467 | isa = PBXGroup; 468 | children = ( 469 | 4CCB2DD81D427188007BAE45 /* KeepNewFeatureViewController.h */, 470 | 4CCB2DD91D427188007BAE45 /* KeepNewFeatureViewController.m */, 471 | ); 472 | path = Controller; 473 | sourceTree = ""; 474 | }; 475 | 4CFC68411D251BA200BD60F8 /* View */ = { 476 | isa = PBXGroup; 477 | children = ( 478 | 4CFC68461D251C9E00BD60F8 /* KeepNewFeatrueView.h */, 479 | 4CFC68471D251C9E00BD60F8 /* KeepNewFeatrueView.m */, 480 | 4CFC68491D25258200BD60F8 /* KeepAdScrollView.h */, 481 | 4CFC684A1D25258200BD60F8 /* KeepAdScrollView.m */, 482 | 4CFC684C1D252B0C00BD60F8 /* KeepAdLabel.h */, 483 | 4CFC684D1D252B0C00BD60F8 /* KeepAdLabel.m */, 484 | ); 485 | path = View; 486 | sourceTree = ""; 487 | }; 488 | /* End PBXGroup section */ 489 | 490 | /* Begin PBXNativeTarget section */ 491 | 4CFC68021D25082E00BD60F8 /* KeepGuidePage */ = { 492 | isa = PBXNativeTarget; 493 | buildConfigurationList = 4CFC68301D25082F00BD60F8 /* Build configuration list for PBXNativeTarget "KeepGuidePage" */; 494 | buildPhases = ( 495 | 4CFC67FF1D25082E00BD60F8 /* Sources */, 496 | 4CFC68001D25082E00BD60F8 /* Frameworks */, 497 | 4CFC68011D25082E00BD60F8 /* Resources */, 498 | ); 499 | buildRules = ( 500 | ); 501 | dependencies = ( 502 | ); 503 | name = KeepGuidePage; 504 | productName = KeepGuidePage; 505 | productReference = 4CFC68031D25082E00BD60F8 /* KeepGuidePage.app */; 506 | productType = "com.apple.product-type.application"; 507 | }; 508 | 4CFC681B1D25082F00BD60F8 /* KeepGuidePageTests */ = { 509 | isa = PBXNativeTarget; 510 | buildConfigurationList = 4CFC68331D25082F00BD60F8 /* Build configuration list for PBXNativeTarget "KeepGuidePageTests" */; 511 | buildPhases = ( 512 | 4CFC68181D25082F00BD60F8 /* Sources */, 513 | 4CFC68191D25082F00BD60F8 /* Frameworks */, 514 | 4CFC681A1D25082F00BD60F8 /* Resources */, 515 | ); 516 | buildRules = ( 517 | ); 518 | dependencies = ( 519 | 4CFC681E1D25082F00BD60F8 /* PBXTargetDependency */, 520 | ); 521 | name = KeepGuidePageTests; 522 | productName = KeepGuidePageTests; 523 | productReference = 4CFC681C1D25082F00BD60F8 /* KeepGuidePageTests.xctest */; 524 | productType = "com.apple.product-type.bundle.unit-test"; 525 | }; 526 | 4CFC68261D25082F00BD60F8 /* KeepGuidePageUITests */ = { 527 | isa = PBXNativeTarget; 528 | buildConfigurationList = 4CFC68361D25082F00BD60F8 /* Build configuration list for PBXNativeTarget "KeepGuidePageUITests" */; 529 | buildPhases = ( 530 | 4CFC68231D25082F00BD60F8 /* Sources */, 531 | 4CFC68241D25082F00BD60F8 /* Frameworks */, 532 | 4CFC68251D25082F00BD60F8 /* Resources */, 533 | ); 534 | buildRules = ( 535 | ); 536 | dependencies = ( 537 | 4CFC68291D25082F00BD60F8 /* PBXTargetDependency */, 538 | ); 539 | name = KeepGuidePageUITests; 540 | productName = KeepGuidePageUITests; 541 | productReference = 4CFC68271D25082F00BD60F8 /* KeepGuidePageUITests.xctest */; 542 | productType = "com.apple.product-type.bundle.ui-testing"; 543 | }; 544 | /* End PBXNativeTarget section */ 545 | 546 | /* Begin PBXProject section */ 547 | 4CFC67FB1D25082E00BD60F8 /* Project object */ = { 548 | isa = PBXProject; 549 | attributes = { 550 | LastUpgradeCheck = 0730; 551 | ORGANIZATIONNAME = com.51fanxing.KeepGuidePage; 552 | TargetAttributes = { 553 | 4CFC68021D25082E00BD60F8 = { 554 | CreatedOnToolsVersion = 7.3.1; 555 | }; 556 | 4CFC681B1D25082F00BD60F8 = { 557 | CreatedOnToolsVersion = 7.3.1; 558 | TestTargetID = 4CFC68021D25082E00BD60F8; 559 | }; 560 | 4CFC68261D25082F00BD60F8 = { 561 | CreatedOnToolsVersion = 7.3.1; 562 | TestTargetID = 4CFC68021D25082E00BD60F8; 563 | }; 564 | }; 565 | }; 566 | buildConfigurationList = 4CFC67FE1D25082E00BD60F8 /* Build configuration list for PBXProject "KeepGuidePage" */; 567 | compatibilityVersion = "Xcode 3.2"; 568 | developmentRegion = English; 569 | hasScannedForEncodings = 0; 570 | knownRegions = ( 571 | en, 572 | Base, 573 | ); 574 | mainGroup = 4CFC67FA1D25082E00BD60F8; 575 | productRefGroup = 4CFC68041D25082E00BD60F8 /* Products */; 576 | projectDirPath = ""; 577 | projectRoot = ""; 578 | targets = ( 579 | 4CFC68021D25082E00BD60F8 /* KeepGuidePage */, 580 | 4CFC681B1D25082F00BD60F8 /* KeepGuidePageTests */, 581 | 4CFC68261D25082F00BD60F8 /* KeepGuidePageUITests */, 582 | ); 583 | }; 584 | /* End PBXProject section */ 585 | 586 | /* Begin PBXResourcesBuildPhase section */ 587 | 4CFC68011D25082E00BD60F8 /* Resources */ = { 588 | isa = PBXResourcesBuildPhase; 589 | buildActionMask = 2147483647; 590 | files = ( 591 | 4CFC683C1D251A7B00BD60F8 /* Images.xcassets in Resources */, 592 | 4CFC683A1D2508A700BD60F8 /* keep.mp4 in Resources */, 593 | ); 594 | runOnlyForDeploymentPostprocessing = 0; 595 | }; 596 | 4CFC681A1D25082F00BD60F8 /* Resources */ = { 597 | isa = PBXResourcesBuildPhase; 598 | buildActionMask = 2147483647; 599 | files = ( 600 | ); 601 | runOnlyForDeploymentPostprocessing = 0; 602 | }; 603 | 4CFC68251D25082F00BD60F8 /* Resources */ = { 604 | isa = PBXResourcesBuildPhase; 605 | buildActionMask = 2147483647; 606 | files = ( 607 | ); 608 | runOnlyForDeploymentPostprocessing = 0; 609 | }; 610 | /* End PBXResourcesBuildPhase section */ 611 | 612 | /* Begin PBXSourcesBuildPhase section */ 613 | 4CFC67FF1D25082E00BD60F8 /* Sources */ = { 614 | isa = PBXSourcesBuildPhase; 615 | buildActionMask = 2147483647; 616 | files = ( 617 | 4CCB2DF01D427705007BAE45 /* KeepTrainViewController.m in Sources */, 618 | 4CFC68481D251C9E00BD60F8 /* KeepNewFeatrueView.m in Sources */, 619 | 4CE9CDDF1D4B506E00132928 /* LoginViewController.m in Sources */, 620 | 4CFC684E1D252B0C00BD60F8 /* KeepAdLabel.m in Sources */, 621 | 4CCB2DDA1D427188007BAE45 /* KeepNewFeatureViewController.m in Sources */, 622 | 4CCB2DF31D427715007BAE45 /* KeepFindViewController.m in Sources */, 623 | 4C670B4E1E5347C200281698 /* MYGroupIssueLabelCell.m in Sources */, 624 | 4CFC680B1D25082E00BD60F8 /* AppDelegate.m in Sources */, 625 | 4CE9CDF21D4B608B00132928 /* Constant.m in Sources */, 626 | 4CFC684B1D25258200BD60F8 /* KeepAdScrollView.m in Sources */, 627 | 4C670B541E53483800281698 /* UILabel+Extension.m in Sources */, 628 | 4C670B531E53483800281698 /* UIColor+Extension.m in Sources */, 629 | 4CCB2DF91D427736007BAE45 /* KeepPersonalViewController.m in Sources */, 630 | 4C670B571E53498200281698 /* NSString+Extension.m in Sources */, 631 | 4CE9CDE71D4B5E6200132928 /* UIBarButtonItem+Extension.m in Sources */, 632 | 4CCB2DED1D427676007BAE45 /* KeepNavigationViewController.m in Sources */, 633 | 4CFC68081D25082E00BD60F8 /* main.m in Sources */, 634 | 4CE9CDE21D4B508E00132928 /* RegisterViewController.m in Sources */, 635 | 4CCB2DD71D42714E007BAE45 /* KeepTabBarViewController.m in Sources */, 636 | 4CE9CDEA1D4B5E7800132928 /* UIView+Extension.m in Sources */, 637 | 4CE9CDEE1D4B5ED800132928 /* KeepCancelHighlightButton.m in Sources */, 638 | 4CCB2DF61D427724007BAE45 /* KeepFollowViewController.m in Sources */, 639 | 4C670B4B1E5346B700281698 /* MYCollectionViewStreamLineFlowLayout.m in Sources */, 640 | ); 641 | runOnlyForDeploymentPostprocessing = 0; 642 | }; 643 | 4CFC68181D25082F00BD60F8 /* Sources */ = { 644 | isa = PBXSourcesBuildPhase; 645 | buildActionMask = 2147483647; 646 | files = ( 647 | 4CFC68211D25082F00BD60F8 /* KeepGuidePageTests.m in Sources */, 648 | ); 649 | runOnlyForDeploymentPostprocessing = 0; 650 | }; 651 | 4CFC68231D25082F00BD60F8 /* Sources */ = { 652 | isa = PBXSourcesBuildPhase; 653 | buildActionMask = 2147483647; 654 | files = ( 655 | 4CFC682C1D25082F00BD60F8 /* KeepGuidePageUITests.m in Sources */, 656 | ); 657 | runOnlyForDeploymentPostprocessing = 0; 658 | }; 659 | /* End PBXSourcesBuildPhase section */ 660 | 661 | /* Begin PBXTargetDependency section */ 662 | 4CFC681E1D25082F00BD60F8 /* PBXTargetDependency */ = { 663 | isa = PBXTargetDependency; 664 | target = 4CFC68021D25082E00BD60F8 /* KeepGuidePage */; 665 | targetProxy = 4CFC681D1D25082F00BD60F8 /* PBXContainerItemProxy */; 666 | }; 667 | 4CFC68291D25082F00BD60F8 /* PBXTargetDependency */ = { 668 | isa = PBXTargetDependency; 669 | target = 4CFC68021D25082E00BD60F8 /* KeepGuidePage */; 670 | targetProxy = 4CFC68281D25082F00BD60F8 /* PBXContainerItemProxy */; 671 | }; 672 | /* End PBXTargetDependency section */ 673 | 674 | /* Begin XCBuildConfiguration section */ 675 | 4CFC682E1D25082F00BD60F8 /* Debug */ = { 676 | isa = XCBuildConfiguration; 677 | buildSettings = { 678 | ALWAYS_SEARCH_USER_PATHS = NO; 679 | CLANG_ANALYZER_NONNULL = YES; 680 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 681 | CLANG_CXX_LIBRARY = "libc++"; 682 | CLANG_ENABLE_MODULES = YES; 683 | CLANG_ENABLE_OBJC_ARC = YES; 684 | CLANG_WARN_BOOL_CONVERSION = YES; 685 | CLANG_WARN_CONSTANT_CONVERSION = YES; 686 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 687 | CLANG_WARN_EMPTY_BODY = YES; 688 | CLANG_WARN_ENUM_CONVERSION = YES; 689 | CLANG_WARN_INT_CONVERSION = YES; 690 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 691 | CLANG_WARN_UNREACHABLE_CODE = YES; 692 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 693 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 694 | COPY_PHASE_STRIP = NO; 695 | DEBUG_INFORMATION_FORMAT = dwarf; 696 | ENABLE_STRICT_OBJC_MSGSEND = YES; 697 | ENABLE_TESTABILITY = YES; 698 | GCC_C_LANGUAGE_STANDARD = gnu99; 699 | GCC_DYNAMIC_NO_PIC = NO; 700 | GCC_NO_COMMON_BLOCKS = YES; 701 | GCC_OPTIMIZATION_LEVEL = 0; 702 | GCC_PREPROCESSOR_DEFINITIONS = ( 703 | "DEBUG=1", 704 | "$(inherited)", 705 | ); 706 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 707 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 708 | GCC_WARN_UNDECLARED_SELECTOR = YES; 709 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 710 | GCC_WARN_UNUSED_FUNCTION = YES; 711 | GCC_WARN_UNUSED_VARIABLE = YES; 712 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 713 | MTL_ENABLE_DEBUG_INFO = YES; 714 | ONLY_ACTIVE_ARCH = YES; 715 | SDKROOT = iphoneos; 716 | TARGETED_DEVICE_FAMILY = "1,2"; 717 | }; 718 | name = Debug; 719 | }; 720 | 4CFC682F1D25082F00BD60F8 /* Release */ = { 721 | isa = XCBuildConfiguration; 722 | buildSettings = { 723 | ALWAYS_SEARCH_USER_PATHS = NO; 724 | CLANG_ANALYZER_NONNULL = YES; 725 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 726 | CLANG_CXX_LIBRARY = "libc++"; 727 | CLANG_ENABLE_MODULES = YES; 728 | CLANG_ENABLE_OBJC_ARC = YES; 729 | CLANG_WARN_BOOL_CONVERSION = YES; 730 | CLANG_WARN_CONSTANT_CONVERSION = YES; 731 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 732 | CLANG_WARN_EMPTY_BODY = YES; 733 | CLANG_WARN_ENUM_CONVERSION = YES; 734 | CLANG_WARN_INT_CONVERSION = YES; 735 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 736 | CLANG_WARN_UNREACHABLE_CODE = YES; 737 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 738 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 739 | COPY_PHASE_STRIP = NO; 740 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 741 | ENABLE_NS_ASSERTIONS = NO; 742 | ENABLE_STRICT_OBJC_MSGSEND = YES; 743 | GCC_C_LANGUAGE_STANDARD = gnu99; 744 | GCC_NO_COMMON_BLOCKS = YES; 745 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 746 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 747 | GCC_WARN_UNDECLARED_SELECTOR = YES; 748 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 749 | GCC_WARN_UNUSED_FUNCTION = YES; 750 | GCC_WARN_UNUSED_VARIABLE = YES; 751 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 752 | MTL_ENABLE_DEBUG_INFO = NO; 753 | SDKROOT = iphoneos; 754 | TARGETED_DEVICE_FAMILY = "1,2"; 755 | VALIDATE_PRODUCT = YES; 756 | }; 757 | name = Release; 758 | }; 759 | 4CFC68311D25082F00BD60F8 /* Debug */ = { 760 | isa = XCBuildConfiguration; 761 | buildSettings = { 762 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 763 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "Brand Assets"; 764 | INFOPLIST_FILE = KeepGuidePage/Info.plist; 765 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 766 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 767 | PRODUCT_BUNDLE_IDENTIFIER = com.51fanxing.FXBEST; 768 | PRODUCT_NAME = "$(TARGET_NAME)"; 769 | }; 770 | name = Debug; 771 | }; 772 | 4CFC68321D25082F00BD60F8 /* Release */ = { 773 | isa = XCBuildConfiguration; 774 | buildSettings = { 775 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 776 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "Brand Assets"; 777 | INFOPLIST_FILE = KeepGuidePage/Info.plist; 778 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 779 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 780 | PRODUCT_BUNDLE_IDENTIFIER = com.51fanxing.FXBEST; 781 | PRODUCT_NAME = "$(TARGET_NAME)"; 782 | }; 783 | name = Release; 784 | }; 785 | 4CFC68341D25082F00BD60F8 /* Debug */ = { 786 | isa = XCBuildConfiguration; 787 | buildSettings = { 788 | BUNDLE_LOADER = "$(TEST_HOST)"; 789 | INFOPLIST_FILE = KeepGuidePageTests/Info.plist; 790 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 791 | PRODUCT_BUNDLE_IDENTIFIER = com.51fanxing.KeepGuidePageTests; 792 | PRODUCT_NAME = "$(TARGET_NAME)"; 793 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KeepGuidePage.app/KeepGuidePage"; 794 | }; 795 | name = Debug; 796 | }; 797 | 4CFC68351D25082F00BD60F8 /* Release */ = { 798 | isa = XCBuildConfiguration; 799 | buildSettings = { 800 | BUNDLE_LOADER = "$(TEST_HOST)"; 801 | INFOPLIST_FILE = KeepGuidePageTests/Info.plist; 802 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 803 | PRODUCT_BUNDLE_IDENTIFIER = com.51fanxing.KeepGuidePageTests; 804 | PRODUCT_NAME = "$(TARGET_NAME)"; 805 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KeepGuidePage.app/KeepGuidePage"; 806 | }; 807 | name = Release; 808 | }; 809 | 4CFC68371D25082F00BD60F8 /* Debug */ = { 810 | isa = XCBuildConfiguration; 811 | buildSettings = { 812 | INFOPLIST_FILE = KeepGuidePageUITests/Info.plist; 813 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 814 | PRODUCT_BUNDLE_IDENTIFIER = com.51fanxing.KeepGuidePageUITests; 815 | PRODUCT_NAME = "$(TARGET_NAME)"; 816 | TEST_TARGET_NAME = KeepGuidePage; 817 | }; 818 | name = Debug; 819 | }; 820 | 4CFC68381D25082F00BD60F8 /* Release */ = { 821 | isa = XCBuildConfiguration; 822 | buildSettings = { 823 | INFOPLIST_FILE = KeepGuidePageUITests/Info.plist; 824 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 825 | PRODUCT_BUNDLE_IDENTIFIER = com.51fanxing.KeepGuidePageUITests; 826 | PRODUCT_NAME = "$(TARGET_NAME)"; 827 | TEST_TARGET_NAME = KeepGuidePage; 828 | }; 829 | name = Release; 830 | }; 831 | /* End XCBuildConfiguration section */ 832 | 833 | /* Begin XCConfigurationList section */ 834 | 4CFC67FE1D25082E00BD60F8 /* Build configuration list for PBXProject "KeepGuidePage" */ = { 835 | isa = XCConfigurationList; 836 | buildConfigurations = ( 837 | 4CFC682E1D25082F00BD60F8 /* Debug */, 838 | 4CFC682F1D25082F00BD60F8 /* Release */, 839 | ); 840 | defaultConfigurationIsVisible = 0; 841 | defaultConfigurationName = Release; 842 | }; 843 | 4CFC68301D25082F00BD60F8 /* Build configuration list for PBXNativeTarget "KeepGuidePage" */ = { 844 | isa = XCConfigurationList; 845 | buildConfigurations = ( 846 | 4CFC68311D25082F00BD60F8 /* Debug */, 847 | 4CFC68321D25082F00BD60F8 /* Release */, 848 | ); 849 | defaultConfigurationIsVisible = 0; 850 | defaultConfigurationName = Release; 851 | }; 852 | 4CFC68331D25082F00BD60F8 /* Build configuration list for PBXNativeTarget "KeepGuidePageTests" */ = { 853 | isa = XCConfigurationList; 854 | buildConfigurations = ( 855 | 4CFC68341D25082F00BD60F8 /* Debug */, 856 | 4CFC68351D25082F00BD60F8 /* Release */, 857 | ); 858 | defaultConfigurationIsVisible = 0; 859 | defaultConfigurationName = Release; 860 | }; 861 | 4CFC68361D25082F00BD60F8 /* Build configuration list for PBXNativeTarget "KeepGuidePageUITests" */ = { 862 | isa = XCConfigurationList; 863 | buildConfigurations = ( 864 | 4CFC68371D25082F00BD60F8 /* Debug */, 865 | 4CFC68381D25082F00BD60F8 /* Release */, 866 | ); 867 | defaultConfigurationIsVisible = 0; 868 | defaultConfigurationName = Release; 869 | }; 870 | /* End XCConfigurationList section */ 871 | }; 872 | rootObject = 4CFC67FB1D25082E00BD60F8 /* Project object */; 873 | } 874 | -------------------------------------------------------------------------------- /KeepGuidePage.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /KeepGuidePage.xcodeproj/project.xcworkspace/xcuserdata/Michael.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage.xcodeproj/project.xcworkspace/xcuserdata/Michael.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /KeepGuidePage.xcodeproj/project.xcworkspace/xcuserdata/sunjinshuai.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage.xcodeproj/project.xcworkspace/xcuserdata/sunjinshuai.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /KeepGuidePage.xcodeproj/xcshareddata/xcschemes/KeepGuidePage.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 34 | 40 | 41 | 42 | 44 | 50 | 51 | 52 | 53 | 54 | 60 | 61 | 62 | 63 | 64 | 65 | 76 | 78 | 84 | 85 | 86 | 87 | 88 | 89 | 95 | 97 | 103 | 104 | 105 | 106 | 108 | 109 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /KeepGuidePage.xcodeproj/xcuserdata/Michael.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /KeepGuidePage.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/KeepGuidePage.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 74 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /KeepGuidePage.xcodeproj/xcuserdata/Michael.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | KeepGuidePage.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 4CFC68021D25082E00BD60F8 16 | 17 | primary 18 | 19 | 20 | 4CFC681B1D25082F00BD60F8 21 | 22 | primary 23 | 24 | 25 | 4CFC68261D25082F00BD60F8 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /KeepGuidePage.xcodeproj/xcuserdata/sunjinshuai.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | KeepGuidePage.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 4CFC68021D25082E00BD60F8 16 | 17 | primary 18 | 19 | 20 | 4CFC681B1D25082F00BD60F8 21 | 22 | primary 23 | 24 | 25 | 4CFC68261D25082F00BD60F8 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /KeepGuidePage/Account(账号)/Controller/LoginViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // LoginViewController.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/29. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface LoginViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /KeepGuidePage/Account(账号)/Controller/LoginViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // LoginViewController.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/29. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "LoginViewController.h" 10 | #import "Constant.h" 11 | 12 | @interface LoginViewController () 13 | 14 | @end 15 | 16 | @implementation LoginViewController 17 | 18 | - (void)viewWillAppear:(BOOL)animated 19 | { 20 | [super viewWillAppear:animated]; 21 | 22 | [self.navigationController setNavigationBarHidden:NO animated:YES]; 23 | } 24 | 25 | - (void)viewDidLoad { 26 | [super viewDidLoad]; 27 | 28 | self.view.backgroundColor = KeepNavigationThemeColor; 29 | self.title = @"登录"; 30 | // Do any additional setup after loading the view. 31 | } 32 | 33 | - (void)didReceiveMemoryWarning { 34 | [super didReceiveMemoryWarning]; 35 | // Dispose of any resources that can be recreated. 36 | } 37 | 38 | /* 39 | #pragma mark - Navigation 40 | 41 | // In a storyboard-based application, you will often want to do a little preparation before navigation 42 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 43 | // Get the new view controller using [segue destinationViewController]. 44 | // Pass the selected object to the new view controller. 45 | } 46 | */ 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /KeepGuidePage/Account(账号)/Controller/RegisterViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // RegisterViewController.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/29. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface RegisterViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /KeepGuidePage/Account(账号)/Controller/RegisterViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // RegisterViewController.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/29. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "RegisterViewController.h" 10 | #import "Constant.h" 11 | 12 | @interface RegisterViewController () 13 | 14 | @end 15 | 16 | @implementation RegisterViewController 17 | 18 | - (void)viewWillAppear:(BOOL)animated 19 | { 20 | [super viewWillAppear:animated]; 21 | 22 | [self.navigationController setNavigationBarHidden:NO animated:YES]; 23 | } 24 | 25 | - (void)viewDidLoad { 26 | [super viewDidLoad]; 27 | self.view.backgroundColor = KeepNavigationThemeColor; 28 | self.title = @"注册"; 29 | } 30 | 31 | - (void)didReceiveMemoryWarning { 32 | [super didReceiveMemoryWarning]; 33 | // Dispose of any resources that can be recreated. 34 | } 35 | 36 | /* 37 | #pragma mark - Navigation 38 | 39 | // In a storyboard-based application, you will often want to do a little preparation before navigation 40 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 41 | // Get the new view controller using [segue destinationViewController]. 42 | // Pass the selected object to the new view controller. 43 | } 44 | */ 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /KeepGuidePage/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/6/30. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /KeepGuidePage/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/6/30. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "KeepTabBarViewController.h" 11 | #import "KeepNewFeatureViewController.h" 12 | #import "KeepNavigationViewController.h" 13 | 14 | @interface AppDelegate () 15 | 16 | @end 17 | 18 | @implementation AppDelegate 19 | 20 | 21 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 22 | // Override point for customization after application launch. 23 | // 创建窗口 24 | self.window = [[UIWindow alloc] init]; 25 | self.window.frame = [UIScreen mainScreen].bounds; 26 | self.window.backgroundColor = [UIColor blackColor]; 27 | [self.window makeKeyAndVisible]; 28 | // self.window.rootViewController = [[KeepTabBarViewController alloc] init]; 29 | if ([[NSBundle mainBundle].infoDictionary[@"CFBundleVersion"] isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:@"CFBundleVersion"]]) { 30 | } else { 31 | KeepNewFeatureViewController *feature = [[KeepNewFeatureViewController alloc] init]; 32 | KeepNavigationViewController *navigation = [[KeepNavigationViewController alloc] initWithRootViewController:feature]; 33 | self.window.rootViewController = navigation; 34 | } 35 | [self setup3DTouch]; 36 | return YES; 37 | } 38 | 39 | - (void)setup3DTouch 40 | { 41 | UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"fx_3DTouch_AdorableStar"]; 42 | UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"fx_3DTouch_Search_brand"]; 43 | UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"fx_3DTouch_Receipt_of_goods"]; 44 | UIApplicationShortcutIcon *icon4 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"fx_3DTouch_Star_Ticket"]; 45 | 46 | UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc]initWithType:@"com.51fanxing.adorableStar" localizedTitle:@"萌星说" localizedSubtitle:nil icon:icon1 userInfo:nil]; 47 | UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItem alloc]initWithType:@"com.51fanxing.searchBrand" localizedTitle:@"搜品牌" localizedSubtitle:nil icon:icon2 userInfo:nil]; 48 | UIMutableApplicationShortcutItem *item3 = [[UIMutableApplicationShortcutItem alloc]initWithType:@"com.51fanxing.receiptOfGoods" localizedTitle:@"查物流" localizedSubtitle:nil icon:icon3 userInfo:nil]; 49 | UIMutableApplicationShortcutItem *item4 = [[UIMutableApplicationShortcutItem alloc]initWithType:@"com.51fanxing.starTicket" localizedTitle:@"摇星券" localizedSubtitle:nil icon:icon4 userInfo:nil]; 50 | 51 | NSArray *items = @[item1, item2, item3,item4]; 52 | NSArray *existingItems = [UIApplication sharedApplication].shortcutItems; 53 | NSArray *updatedItems = [existingItems arrayByAddingObjectsFromArray:items]; 54 | [UIApplication sharedApplication].shortcutItems = updatedItems; 55 | } 56 | 57 | - (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler 58 | { 59 | // 判断先前我们设置的唯一标识 60 | if([shortcutItem.type isEqualToString:@"com.51fanxing.adorableStar"]){ 61 | 62 | }else if ([shortcutItem.type isEqualToString:@"com.51fanxing.searchBrand"]){ 63 | 64 | 65 | }else if ([shortcutItem.type isEqualToString:@"com.51fanxing.receiptOfGoods"]){ 66 | 67 | }else if ([shortcutItem.type isEqualToString:@"com.51fanxing.starTicket"]){ 68 | 69 | 70 | } 71 | } 72 | 73 | 74 | - (void)applicationWillResignActive:(UIApplication *)application { 75 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 76 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 77 | } 78 | 79 | - (void)applicationDidEnterBackground:(UIApplication *)application { 80 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 81 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 82 | } 83 | 84 | - (void)applicationWillEnterForeground:(UIApplication *)application { 85 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 86 | } 87 | 88 | - (void)applicationDidBecomeActive:(UIApplication *)application { 89 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 90 | } 91 | 92 | - (void)applicationWillTerminate:(UIApplication *)application { 93 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 94 | } 95 | 96 | @end 97 | -------------------------------------------------------------------------------- /KeepGuidePage/Find(发现)/Controller/KeepFindViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // KeepFindViewController.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KeepFindViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /KeepGuidePage/Find(发现)/Controller/KeepFindViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepFindViewController.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "KeepFindViewController.h" 10 | #import "MYCollectionViewStreamLineFlowLayout.h" 11 | #import "MYGroupIssueLabelCell.h" 12 | #import "NSString+Extension.h" 13 | #import "Constant.h" 14 | 15 | @interface KeepFindViewController () 16 | 17 | @property (nonatomic, strong) UICollectionView *collectionView; 18 | @property (nonatomic, strong) NSArray *items; 19 | @property (nonatomic, assign) CGFloat horizontalSpacing; 20 | @property (nonatomic, assign) CGFloat verticalSpacing; 21 | 22 | @end 23 | 24 | @implementation KeepFindViewController 25 | 26 | static NSString * const reusableGroupIssueLabelCellIdentifier = @"MYGroupIssueLabelCell"; 27 | 28 | - (void)viewDidLoad { 29 | [super viewDidLoad]; 30 | 31 | self.view.backgroundColor = [UIColor whiteColor]; 32 | self.horizontalSpacing = 15.f; 33 | self.verticalSpacing = 10.f; 34 | self.items = @[@"asdfjkalsdf",@"asdfjkalsdf",@"asdfjkalsdf",@"asdfjkalsdf",@"asdfjkalsdf",@"asdfjkalsdf"]; 35 | [self.view addSubview:self.collectionView]; 36 | } 37 | 38 | #pragma mark - UICollectionViewDataSource 39 | - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 40 | return self.items.count; 41 | } 42 | 43 | - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 44 | { 45 | MYGroupIssueLabelCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reusableGroupIssueLabelCellIdentifier forIndexPath:indexPath]; 46 | cell.detailLabel.text = self.items[indexPath.row]; 47 | 48 | return cell; 49 | } 50 | 51 | #pragma mark - UICollectionViewDelegate 52 | 53 | #pragma mark - UICollectionViewDelegateFlowLayout 54 | - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 55 | NSString *textString = self.items[indexPath.row]; 56 | CGFloat width = [textString mySizeWithFont:[UIFont systemFontOfSize:13.f]].width + 24.f; 57 | return CGSizeMake(width, 33.f); 58 | } 59 | 60 | #pragma mark - Lazy Load 61 | - (UICollectionView *)collectionView { 62 | if (!_collectionView) { 63 | MYCollectionViewStreamLineFlowLayout *flowLayout = [[MYCollectionViewStreamLineFlowLayout alloc] init]; 64 | flowLayout.minimumInteritemSpacing = self.horizontalSpacing; 65 | flowLayout.minimumLineSpacing = self.verticalSpacing; 66 | flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical; 67 | _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 64, KeepScreenWidth, KeepScreenHeight) collectionViewLayout:flowLayout]; 68 | _collectionView.delegate = self; 69 | _collectionView.dataSource = self; 70 | _collectionView.backgroundColor = [UIColor clearColor]; 71 | [_collectionView registerClass:[MYGroupIssueLabelCell class] forCellWithReuseIdentifier:reusableGroupIssueLabelCellIdentifier]; 72 | } 73 | return _collectionView; 74 | } 75 | 76 | - (NSArray *)items { 77 | if (!_items) { 78 | _items = [NSArray array]; 79 | } 80 | return _items; 81 | } 82 | 83 | @end 84 | -------------------------------------------------------------------------------- /KeepGuidePage/Follow(关注)/Controller/KeepFollowViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // KeepFollowViewController.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KeepFollowViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /KeepGuidePage/Follow(关注)/Controller/KeepFollowViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepFollowViewController.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "KeepFollowViewController.h" 10 | 11 | @interface KeepFollowViewController () 12 | 13 | @end 14 | 15 | @implementation KeepFollowViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | /* 28 | #pragma mark - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 32 | // Get the new view controller using [segue destinationViewController]. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/.svn/all-wcprops: -------------------------------------------------------------------------------- 1 | K 25 2 | svn:wc:ra_dav:version-url 3 | V 116 4 | /svn/FXBest/!svn/ver/12661/05%20%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0/IOS/trunk/FXBEST/FXBEST/Images.xcassets/3DTouch 5 | END 6 | Contents.json 7 | K 25 8 | svn:wc:ra_dav:version-url 9 | V 130 10 | /svn/FXBest/!svn/ver/12661/05%20%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0/IOS/trunk/FXBEST/FXBEST/Images.xcassets/3DTouch/Contents.json 11 | END 12 | -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/.svn/entries: -------------------------------------------------------------------------------- 1 | 10 2 | 3 | dir 4 | 12661 5 | https://michael@192.168.1.11:443/svn/FXBest/05%20%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0/IOS/trunk/FXBEST/FXBEST/Images.xcassets/3DTouch 6 | https://michael@192.168.1.11:443/svn/FXBest 7 | 8 | 9 | 10 | 2016-07-13T10:00:53.690397Z 11 | 12661 12 | michael 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 51e9eb06-2f80-6248-b57d-47c989ba8145 28 | 29 | fx_3DTouch_Star_Ticket.imageset 30 | dir 31 | 32 | Contents.json 33 | file 34 | 35 | 36 | 37 | 38 | 2016-07-13T09:29:54.000000Z 39 | 31cc68f34934a99c0b0c1bebde56309c 40 | 2016-07-13T10:00:53.690397Z 41 | 12661 42 | michael 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 62 65 | 66 | fx_3DTouch_AdorableStar.imageset 67 | dir 68 | 69 | fx_3DTouch_Receipt_of_goods.imageset 70 | dir 71 | 72 | fx_3DTouch_Search_brand.imageset 73 | dir 74 | 75 | -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/.svn/text-base/Contents.json.svn-base: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_AdorableStar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "fx_3DTouch_AdorableStar@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "fx_3DTouch_AdorableStar@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_AdorableStar.imageset/fx_3DTouch_AdorableStar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_AdorableStar.imageset/fx_3DTouch_AdorableStar@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_AdorableStar.imageset/fx_3DTouch_AdorableStar@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_AdorableStar.imageset/fx_3DTouch_AdorableStar@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Receipt_of_goods.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "fx_3DTouch_Receipt_of_goods@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "fx_3DTouch_Receipt_of_goods@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Receipt_of_goods.imageset/fx_3DTouch_Receipt_of_goods@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Receipt_of_goods.imageset/fx_3DTouch_Receipt_of_goods@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Receipt_of_goods.imageset/fx_3DTouch_Receipt_of_goods@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Receipt_of_goods.imageset/fx_3DTouch_Receipt_of_goods@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Search_brand.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "fx_3DTouch_Search_brand@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "fx_3DTouch_Search_brand@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Search_brand.imageset/fx_3DTouch_Search_brand@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Search_brand.imageset/fx_3DTouch_Search_brand@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Search_brand.imageset/fx_3DTouch_Search_brand@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Search_brand.imageset/fx_3DTouch_Search_brand@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Star_Ticket.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "fx_3DTouch_Star_Ticket@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "fx_3DTouch_Star_Ticket@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Star_Ticket.imageset/fx_3DTouch_Star_Ticket@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Star_Ticket.imageset/fx_3DTouch_Star_Ticket@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Star_Ticket.imageset/fx_3DTouch_Star_Ticket@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/3DTouch/fx_3DTouch_Star_Ticket.imageset/fx_3DTouch_Star_Ticket@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/qq.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "qq.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "qq@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "qq@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/qq.imageset/qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/qq.imageset/qq.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/qq.imageset/qq@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/qq.imageset/qq@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/qq.imageset/qq@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/qq.imageset/qq@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/qq_light.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "qq_light.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "qq_light@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "qq_light@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/qq_light.imageset/qq_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/qq_light.imageset/qq_light.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/qq_light.imageset/qq_light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/qq_light.imageset/qq_light@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/qq_light.imageset/qq_light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/qq_light.imageset/qq_light@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/wechat.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "wechat.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "wechat@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "wechat@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/wechat.imageset/wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/wechat.imageset/wechat.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/wechat.imageset/wechat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/wechat.imageset/wechat@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/wechat.imageset/wechat@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/wechat.imageset/wechat@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/wechat_light.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "wechat_light.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "wechat_light@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "wechat_light@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/wechat_light.imageset/wechat_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/wechat_light.imageset/wechat_light.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/wechat_light.imageset/wechat_light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/wechat_light.imageset/wechat_light@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/wechat_light.imageset/wechat_light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/wechat_light.imageset/wechat_light@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/weico.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "weico.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "weico@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "weico@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/weico.imageset/weico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/weico.imageset/weico.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/weico.imageset/weico@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/weico.imageset/weico@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/weico.imageset/weico@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/weico.imageset/weico@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/weico_light.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "weico_light.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "weico_light@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "weico_light@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/weico_light.imageset/weico_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/weico_light.imageset/weico_light.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/weico_light.imageset/weico_light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/weico_light.imageset/weico_light@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Account/weico_light.imageset/weico_light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Account/weico_light.imageset/weico_light@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/AppIcon.appiconset/AppIcon29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/AppIcon.appiconset/AppIcon29x29@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/AppIcon.appiconset/AppIcon29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/AppIcon.appiconset/AppIcon29x29@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/AppIcon.appiconset/AppIcon40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/AppIcon.appiconset/AppIcon40x40@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/AppIcon.appiconset/AppIcon40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/AppIcon.appiconset/AppIcon40x40@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/AppIcon.appiconset/AppIcon60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/AppIcon.appiconset/AppIcon60x60@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/AppIcon.appiconset/AppIcon60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/AppIcon.appiconset/AppIcon60x60@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "29x29", 5 | "idiom" : "iphone", 6 | "filename" : "AppIcon29x29@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "29x29", 11 | "idiom" : "iphone", 12 | "filename" : "AppIcon29x29@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "40x40", 17 | "idiom" : "iphone", 18 | "filename" : "AppIcon40x40@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "40x40", 23 | "idiom" : "iphone", 24 | "filename" : "AppIcon40x40@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "60x60", 29 | "idiom" : "iphone", 30 | "filename" : "AppIcon60x60@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "60x60", 35 | "idiom" : "iphone", 36 | "filename" : "AppIcon60x60@3x.png", 37 | "scale" : "3x" 38 | } 39 | ], 40 | "info" : { 41 | "version" : 1, 42 | "author" : "xcode" 43 | } 44 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Brand Assets.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "extent" : "full-screen", 5 | "idiom" : "iphone", 6 | "subtype" : "736h", 7 | "filename" : "LaunchImage-800-Portrait-736h@3x.png", 8 | "minimum-system-version" : "8.0", 9 | "orientation" : "portrait", 10 | "scale" : "3x" 11 | }, 12 | { 13 | "extent" : "full-screen", 14 | "idiom" : "iphone", 15 | "subtype" : "667h", 16 | "filename" : "LaunchImage-800-667h@2x.png", 17 | "minimum-system-version" : "8.0", 18 | "orientation" : "portrait", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "orientation" : "portrait", 23 | "idiom" : "iphone", 24 | "filename" : "LaunchImage-700@2x.png", 25 | "extent" : "full-screen", 26 | "minimum-system-version" : "7.0", 27 | "scale" : "2x" 28 | }, 29 | { 30 | "extent" : "full-screen", 31 | "idiom" : "iphone", 32 | "subtype" : "retina4", 33 | "filename" : "LaunchImage-700-568h@2x.png", 34 | "minimum-system-version" : "7.0", 35 | "orientation" : "portrait", 36 | "scale" : "2x" 37 | } 38 | ], 39 | "info" : { 40 | "version" : 1, 41 | "author" : "xcode" 42 | } 43 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Brand Assets.launchimage/LaunchImage-700-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Brand Assets.launchimage/LaunchImage-700-568h@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Brand Assets.launchimage/LaunchImage-700@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Brand Assets.launchimage/LaunchImage-700@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Brand Assets.launchimage/LaunchImage-800-667h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Brand Assets.launchimage/LaunchImage-800-667h@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Brand Assets.launchimage/LaunchImage-800-Portrait-736h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Brand Assets.launchimage/LaunchImage-800-Portrait-736h@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Find/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Find/discovery.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "discovery.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "discovery@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "discovery@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Find/discovery.imageset/discovery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Find/discovery.imageset/discovery.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Find/discovery.imageset/discovery@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Find/discovery.imageset/discovery@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Find/discovery.imageset/discovery@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Find/discovery.imageset/discovery@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Find/discovery_on.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "discovery_on.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "discovery_on@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "discovery_on@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Find/discovery_on.imageset/discovery_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Find/discovery_on.imageset/discovery_on.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Find/discovery_on.imageset/discovery_on@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Find/discovery_on.imageset/discovery_on@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Find/discovery_on.imageset/discovery_on@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Find/discovery_on.imageset/discovery_on@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Follow/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Follow/trends.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "trends.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "trends@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "trends@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Follow/trends.imageset/trends.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Follow/trends.imageset/trends.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Follow/trends.imageset/trends@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Follow/trends.imageset/trends@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Follow/trends.imageset/trends@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Follow/trends.imageset/trends@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Follow/trends_on.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "trends_on.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "trends_on@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "trends_on@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Follow/trends_on.imageset/trends_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Follow/trends_on.imageset/trends_on.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Follow/trends_on.imageset/trends_on@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Follow/trends_on.imageset/trends_on@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Follow/trends_on.imageset/trends_on@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Follow/trends_on.imageset/trends_on@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Navigation/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Navigation/back.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "back.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "back@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "back@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Navigation/back.imageset/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Navigation/back.imageset/back.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Navigation/back.imageset/back@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Navigation/back.imageset/back@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Navigation/back.imageset/back@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Navigation/back.imageset/back@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Navigation/backbtn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "backbtn.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "backbtn@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "backbtn@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Navigation/backbtn.imageset/backbtn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Navigation/backbtn.imageset/backbtn.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Navigation/backbtn.imageset/backbtn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Navigation/backbtn.imageset/backbtn@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Navigation/backbtn.imageset/backbtn@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Navigation/backbtn.imageset/backbtn@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/NewFeature/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/NewFeature/keep.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "keep6.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "keep6@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "keep6plus@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/NewFeature/keep.imageset/keep6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/NewFeature/keep.imageset/keep6.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/NewFeature/keep.imageset/keep6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/NewFeature/keep.imageset/keep6@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/NewFeature/keep.imageset/keep6plus@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/NewFeature/keep.imageset/keep6plus@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/PersonalCenter/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/PersonalCenter/personal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "personal.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "personal@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "personal@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/PersonalCenter/personal.imageset/personal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/PersonalCenter/personal.imageset/personal.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/PersonalCenter/personal.imageset/personal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/PersonalCenter/personal.imageset/personal@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/PersonalCenter/personal.imageset/personal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/PersonalCenter/personal.imageset/personal@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/PersonalCenter/personal_on.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "personal_on.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "personal_on@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "personal_on@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/PersonalCenter/personal_on.imageset/personal_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/PersonalCenter/personal_on.imageset/personal_on.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/PersonalCenter/personal_on.imageset/personal_on@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/PersonalCenter/personal_on.imageset/personal_on@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/PersonalCenter/personal_on.imageset/personal_on@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/PersonalCenter/personal_on.imageset/personal_on@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Train/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Train/train.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "train.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "train@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "train@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Train/train.imageset/train.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Train/train.imageset/train.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Train/train.imageset/train@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Train/train.imageset/train@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Train/train.imageset/train@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Train/train.imageset/train@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Train/train_on.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "train_on.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "train_on@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "train_on@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Train/train_on.imageset/train_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Train/train_on.imageset/train_on.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Train/train_on.imageset/train_on@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Train/train_on.imageset/train_on@2x.png -------------------------------------------------------------------------------- /KeepGuidePage/Images.xcassets/Train/train_on.imageset/train_on@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/Images.xcassets/Train/train_on.imageset/train_on@3x.png -------------------------------------------------------------------------------- /KeepGuidePage/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIcons 10 | 11 | CFBundleIcons~ipad 12 | 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | Keep 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | 1.0 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | 1 27 | LSRequiresIPhoneOS 28 | 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /KeepGuidePage/Main(主要)/Controller/KeepNavigationViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // KeepNavigationViewController.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KeepNavigationViewController : UINavigationController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /KeepGuidePage/Main(主要)/Controller/KeepNavigationViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepNavigationViewController.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "KeepNavigationViewController.h" 10 | #import "UIBarButtonItem+Extension.h" 11 | #import "Constant.h" 12 | 13 | @interface KeepNavigationViewController () 14 | 15 | @end 16 | 17 | @implementation KeepNavigationViewController 18 | 19 | + (void)initialize 20 | { 21 | // // 设置整个项目barButtonItem中的主题样式 22 | // UIBarButtonItem *barButtonItem = [UIBarButtonItem appearance]; 23 | // // 设置普通状态 24 | // NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary]; 25 | // textAttrs[NSForegroundColorAttributeName] = FXRGBColor(7, 170, 153); 26 | // textAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:15]; 27 | // [barButtonItem setTitleTextAttributes:textAttrs forState:UIControlStateNormal]; 28 | // 29 | // // 设置不可用状态 30 | // NSMutableDictionary *selectedTextAttrs = [NSMutableDictionary dictionary]; 31 | // selectedTextAttrs[NSForegroundColorAttributeName] = FXRGBColor(7, 170, 153); 32 | // 33 | // selectedTextAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:15]; 34 | // [barButtonItem setTitleTextAttributes:selectedTextAttrs forState:UIControlStateSelected]; 35 | 36 | // 设置UINavigationBar的背景色 37 | [[UINavigationBar appearance] setBarTintColor:KeepNavigationThemeColor]; 38 | [[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor],NSFontAttributeName:[UIFont systemFontOfSize:17]}]; 39 | } 40 | 41 | - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 42 | { 43 | if (self.viewControllers.count >= 1) { 44 | viewController.hidesBottomBarWhenPushed = YES; 45 | viewController.navigationItem.leftBarButtonItem = [UIBarButtonItem barButtonItemWithImage:@"back" target:self action:@selector(back)]; 46 | } 47 | [super pushViewController:viewController animated:animated]; 48 | } 49 | 50 | - (void)back 51 | { 52 | [self popViewControllerAnimated:YES]; 53 | } 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /KeepGuidePage/Main(主要)/Controller/KeepNewFeatureViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // KeepNewFeatureViewController.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KeepNewFeatureViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /KeepGuidePage/Main(主要)/Controller/KeepNewFeatureViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepNewFeatureViewController.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "KeepNewFeatureViewController.h" 10 | #import 11 | #import "KeepNewFeatrueView.h" 12 | #import "LoginViewController.h" 13 | #import "RegisterViewController.h" 14 | 15 | @interface KeepNewFeatureViewController () 16 | 17 | @property (nonatomic, strong) MPMoviePlayerController *moviePlayerController; 18 | @property (nonatomic, strong) KeepNewFeatrueView *keepView; 19 | 20 | @end 21 | 22 | @implementation KeepNewFeatureViewController 23 | 24 | - (void)viewWillAppear:(BOOL)animated 25 | { 26 | [super viewWillAppear:animated]; 27 | 28 | [self.navigationController setNavigationBarHidden:YES animated:YES]; 29 | } 30 | 31 | - (void)viewDidLoad 32 | { 33 | [super viewDidLoad]; 34 | 35 | NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"keep" ofType:@"mp4"]; 36 | 37 | self.moviePlayerController.contentURL = [[NSURL alloc] initFileURLWithPath:moviePath]; 38 | 39 | [self.moviePlayerController play]; 40 | 41 | [self.moviePlayerController.view bringSubviewToFront:self.keepView]; 42 | } 43 | 44 | #pragma mark - NSNotificationCenter 45 | - (void)playbackStateChanged 46 | { 47 | MPMoviePlaybackState playbackState = [self.moviePlayerController playbackState]; 48 | if (playbackState == MPMoviePlaybackStateStopped || playbackState == MPMoviePlaybackStatePaused) { 49 | [self.moviePlayerController play]; 50 | } 51 | } 52 | 53 | #pragma mark - KeepNewFeatrueViewDelegate 54 | // 登录 55 | - (void)keepNewFeatrueView:(nullable KeepNewFeatrueView *)keepNewFeatrueView didLogin:(nullable UIButton *)loginButton 56 | { 57 | LoginViewController *login = [[LoginViewController alloc] init]; 58 | [self.navigationController pushViewController:login animated:YES]; 59 | } 60 | // 注册 61 | - (void)keepNewFeatrueView:(nullable KeepNewFeatrueView *)keepNewFeatrueView didRegister:(nullable UIButton *)registerButton 62 | { 63 | RegisterViewController *registerController = [[RegisterViewController alloc] init]; 64 | [self.navigationController pushViewController:registerController animated:YES]; 65 | } 66 | 67 | #pragma mark - setter and getter 68 | - (MPMoviePlayerController *)moviePlayerController 69 | { 70 | if (!_moviePlayerController) { 71 | _moviePlayerController = [[MPMoviePlayerController alloc] init]; 72 | _moviePlayerController.movieSourceType = MPMovieSourceTypeFile; 73 | _moviePlayerController.controlStyle = MPMovieControlStyleNone; 74 | _moviePlayerController.view.frame = [UIScreen mainScreen].bounds; 75 | [_moviePlayerController setFullscreen:YES]; 76 | [_moviePlayerController setShouldAutoplay:YES]; 77 | [_moviePlayerController setRepeatMode:MPMovieRepeatModeOne]; 78 | [self.view addSubview:self.moviePlayerController.view]; 79 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackStateChanged) name:MPMoviePlayerLoadStateDidChangeNotification object:nil]; 80 | 81 | } 82 | return _moviePlayerController; 83 | } 84 | 85 | - (KeepNewFeatrueView *)keepView 86 | { 87 | if (!_keepView) { 88 | _keepView = [[KeepNewFeatrueView alloc] init]; 89 | _keepView.delegate = self; 90 | _keepView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height); 91 | [self.moviePlayerController.view addSubview:_keepView]; 92 | } 93 | return _keepView; 94 | } 95 | 96 | @end 97 | -------------------------------------------------------------------------------- /KeepGuidePage/Main(主要)/Controller/KeepTabBarViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // KeepTabBarViewController.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KeepTabBarViewController : UITabBarController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /KeepGuidePage/Main(主要)/Controller/KeepTabBarViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepTabBarViewController.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "KeepTabBarViewController.h" 10 | #import "KeepNavigationViewController.h" 11 | #import "KeepTrainViewController.h" 12 | #import "KeepFindViewController.h" 13 | #import "KeepFollowViewController.h" 14 | #import "KeepPersonalViewController.h" 15 | 16 | @interface KeepTabBarViewController () 17 | 18 | @end 19 | 20 | @implementation KeepTabBarViewController 21 | 22 | - (void)viewDidLoad 23 | { 24 | [super viewDidLoad]; 25 | 26 | KeepTrainViewController *train = [[KeepTrainViewController alloc] init]; 27 | 28 | [self addChildViewController:train andWithTitle:@"训练" andWithImage:@"train" andWithSelectedImage:@"train_on"]; 29 | 30 | KeepFindViewController *find = [[KeepFindViewController alloc] init]; 31 | [self addChildViewController:find andWithTitle:@"发现" andWithImage:@"discovery" andWithSelectedImage:@"discovery_on"]; 32 | 33 | KeepFollowViewController *follow = [[KeepFollowViewController alloc] init]; 34 | [self addChildViewController:follow andWithTitle:@"关注" andWithImage:@"trends" andWithSelectedImage:@"trends_on"]; 35 | 36 | KeepPersonalViewController *personal = [[KeepPersonalViewController alloc] init]; 37 | [self addChildViewController:personal andWithTitle:@"我" andWithImage:@"personal" andWithSelectedImage:@"personal_on"]; 38 | } 39 | 40 | - (void)addChildViewController:(UIViewController *)childViewController andWithTitle:(NSString *)title andWithImage:(NSString *)image andWithSelectedImage:(NSString *)selectedImage; 41 | { 42 | childViewController.title = title; 43 | NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary]; 44 | textAttrs[NSForegroundColorAttributeName] = [UIColor grayColor]; 45 | textAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:10.0]; 46 | [childViewController.tabBarItem setTitleTextAttributes:textAttrs forState:UIControlStateNormal]; 47 | NSMutableDictionary *textSelectAttrs = [NSMutableDictionary dictionary]; 48 | textSelectAttrs[NSForegroundColorAttributeName] = [[UIColor alloc]initWithRed:70/255.0 green:61/255.0 blue:78/255.0 alpha:1.0]; 49 | [childViewController.tabBarItem setTitleTextAttributes:textSelectAttrs forState:UIControlStateSelected]; 50 | childViewController.tabBarItem.image = [UIImage imageNamed:image]; 51 | childViewController.tabBarItem.selectedImage = [[UIImage imageNamed:selectedImage] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 52 | KeepNavigationViewController *navController = [[KeepNavigationViewController alloc] initWithRootViewController:childViewController]; 53 | [self addChildViewController:navController]; 54 | } 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /KeepGuidePage/NewFeatrue(新特性)/View/KeepAdLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // KeepAdLabel.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/6/30. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KeepAdLabel : UILabel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /KeepGuidePage/NewFeatrue(新特性)/View/KeepAdLabel.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepAdLabel.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/6/30. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "KeepAdLabel.h" 10 | 11 | @implementation KeepAdLabel 12 | 13 | - (instancetype)initWithFrame:(CGRect)frame 14 | { 15 | if (self = [super initWithFrame:frame]) { 16 | 17 | self.font = [UIFont fontWithName:@"Helvetica" size:23.0]; 18 | self.textAlignment = NSTextAlignmentCenter; 19 | self.textColor = [UIColor whiteColor]; 20 | } 21 | return self; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /KeepGuidePage/NewFeatrue(新特性)/View/KeepAdScrollView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KeepAdScrollView.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/6/30. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KeepAdScrollView : UIScrollView 12 | 13 | @property (nonatomic, strong) NSArray *titles; 14 | @property (nonatomic, strong) UIPageControl *pageControl; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /KeepGuidePage/NewFeatrue(新特性)/View/KeepAdScrollView.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepAdScrollView.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/6/30. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "KeepAdScrollView.h" 10 | #import "KeepAdLabel.h" 11 | 12 | @interface KeepAdScrollView () 13 | 14 | @property (nonatomic, strong) NSTimer *timer; 15 | 16 | @end 17 | @implementation KeepAdScrollView 18 | 19 | - (instancetype)initWithFrame:(CGRect)frame 20 | { 21 | self = [super initWithFrame:frame]; 22 | if (self) { 23 | self.delegate = self; 24 | self.scrollsToTop = NO; 25 | } 26 | return self; 27 | } 28 | 29 | #pragma mark - UIScrollViewDelegate 30 | - (void)scrollViewDidScroll:(UIScrollView *)scrollView 31 | { 32 | CGFloat scrollW = self.bounds.size.width; 33 | int page = (scrollView.contentOffset.x + scrollW * 0.5) / scrollW; 34 | page --; 35 | self.pageControl.currentPage = page; 36 | 37 | } 38 | 39 | - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 40 | { 41 | [self removeTimer]; 42 | } 43 | 44 | - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 45 | { 46 | [self addTimer]; 47 | } 48 | 49 | - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{ 50 | [self scrollViewDidStop:scrollView]; 51 | } 52 | 53 | - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ 54 | [self scrollViewDidStop:scrollView]; 55 | } 56 | 57 | 58 | - (void)scrollViewDidStop:(UIScrollView *)scrollView 59 | { 60 | CGFloat scrollW = [UIScreen mainScreen].bounds.size.width; 61 | int page = (self.contentOffset.x + 0.5 * scrollW) / scrollW; 62 | if (page == 0){ 63 | [self setContentOffset:CGPointMake(scrollW * self.titles.count, 0)]; 64 | } else if (page == (self.titles.count + 1)) { 65 | [self setContentOffset:CGPointMake(scrollW , 0)]; 66 | } 67 | } 68 | 69 | #pragma mark - Private method 70 | - (void)setTitles:(NSArray *)titles 71 | { 72 | _titles = titles; 73 | self.pageControl.numberOfPages = self.titles.count; 74 | [self setbanner]; 75 | } 76 | 77 | - (void)setbanner 78 | { 79 | [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 80 | 81 | CGFloat W = [UIScreen mainScreen].bounds.size.width; 82 | CGFloat H = 30; 83 | CGFloat Y = self.bounds.size.height - H; 84 | 85 | KeepAdLabel *lastLabel = [[KeepAdLabel alloc] init]; 86 | 87 | KeepAdLabel *firstLabel = [[KeepAdLabel alloc] init]; 88 | 89 | for (int i = 0; i < self.titles.count; i++) { 90 | 91 | KeepAdLabel *advertLabel = [[KeepAdLabel alloc] init]; 92 | 93 | CGFloat X = i * W + W; 94 | advertLabel.frame = CGRectMake(X , Y, W, H); 95 | advertLabel.text = self.titles[i]; 96 | 97 | if (i == 0) { 98 | firstLabel.text = self.titles[i]; 99 | } 100 | if (i == self.titles.count - 1) { 101 | lastLabel.text = self.titles[i]; 102 | } 103 | [self addSubview:advertLabel]; 104 | } 105 | 106 | lastLabel.frame = CGRectMake(0, Y, W, H); 107 | [self addSubview:lastLabel]; 108 | 109 | firstLabel.frame = CGRectMake((self.titles.count + 1) * W, Y, W, H); 110 | [self addSubview:firstLabel]; 111 | 112 | CGFloat contentW = (self.titles.count + 2) * W; 113 | self.contentSize = CGSizeMake(contentW, 0); 114 | 115 | self.showsHorizontalScrollIndicator = NO; 116 | 117 | self.pagingEnabled = YES; 118 | 119 | self.pageControl.currentPage = 0; 120 | 121 | [self setContentOffset:CGPointMake(W, 0)]; 122 | 123 | [self addTimer]; 124 | } 125 | 126 | - (void)addTimer 127 | { 128 | self.timer = [NSTimer timerWithTimeInterval:3.0f target:self selector:@selector(nextImage) userInfo:nil repeats:YES]; 129 | 130 | [[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes]; 131 | } 132 | 133 | - (void)nextImage 134 | { 135 | NSInteger page = 0; 136 | if (self.pageControl.currentPage == self.titles.count) { 137 | page = 0; 138 | } else { 139 | page = self.pageControl.currentPage + 1; 140 | } 141 | CGFloat offsetX = (page + 1) * self.bounds.size.width; 142 | CGPoint offset = CGPointMake(offsetX, 0); 143 | 144 | [self setContentOffset:offset animated:YES]; 145 | 146 | } 147 | 148 | - (void)removeTimer 149 | { 150 | [self.timer invalidate]; 151 | self.timer = nil; 152 | } 153 | 154 | - (void)dealloc 155 | { 156 | [self removeTimer]; 157 | } 158 | 159 | 160 | @end 161 | -------------------------------------------------------------------------------- /KeepGuidePage/NewFeatrue(新特性)/View/KeepNewFeatrueView.h: -------------------------------------------------------------------------------- 1 | // 2 | // KeepNewFeatrueView.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/6/30. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | @class KeepNewFeatrueView; 11 | 12 | @protocol KeepNewFeatrueViewDelegate 13 | 14 | // 登录 15 | - (void)keepNewFeatrueView:(nullable KeepNewFeatrueView *)keepNewFeatrueView didLogin:(nullable UIButton *)loginButton; 16 | // 注册 17 | - (void)keepNewFeatrueView:(nullable KeepNewFeatrueView *)keepNewFeatrueView didRegister:(nullable UIButton *)registerButton; 18 | 19 | @end 20 | 21 | @interface KeepNewFeatrueView : UIView 22 | 23 | @property (nonatomic, weak, nullable) id delegate; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /KeepGuidePage/NewFeatrue(新特性)/View/KeepNewFeatrueView.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepNewFeatrueView.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/6/30. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "KeepNewFeatrueView.h" 10 | #import "KeepAdScrollView.h" 11 | 12 | @interface KeepNewFeatrueView () 13 | 14 | @property (nonatomic, strong) UIImageView *imageView; 15 | @property (nonatomic, strong) UIButton *registerButton; 16 | @property (nonatomic, strong) UIButton *loginButton; 17 | @property (nonatomic, strong) KeepAdScrollView *adScrollView; 18 | @property (nonatomic, strong) UIPageControl *pageControl; 19 | 20 | @end 21 | 22 | @implementation KeepNewFeatrueView 23 | 24 | - (instancetype)initWithFrame:(CGRect)frame 25 | { 26 | if (self = [super initWithFrame:frame]) { 27 | 28 | [self addSubview:self.imageView]; 29 | 30 | [self addSubview:self.registerButton]; 31 | 32 | [self addSubview:self.loginButton]; 33 | 34 | [self addSubview:self.adScrollView]; 35 | 36 | self.adScrollView.titles = @[@"全程记录你的健身数据",@"规范你的训练过程",@"陪伴你迈出跑步的第一步",@"分享汗水后你的性感"]; 37 | 38 | self.pageControl.numberOfPages = self.adScrollView.titles.count; 39 | } 40 | return self; 41 | } 42 | 43 | - (void)registerClick:(UIButton *)registerButton 44 | { 45 | if ([self.delegate respondsToSelector:@selector(keepNewFeatrueView:didRegister:)]) { 46 | [self.delegate keepNewFeatrueView:self didRegister:registerButton]; 47 | } 48 | } 49 | 50 | - (void)login:(UIButton *)loginButton 51 | { 52 | if ([self.delegate respondsToSelector:@selector(keepNewFeatrueView:didLogin:)]) { 53 | [self.delegate keepNewFeatrueView:self didLogin:loginButton]; 54 | } 55 | } 56 | 57 | #pragma mark - setter and getter 58 | - (UIImageView *)imageView 59 | { 60 | if (!_imageView) { 61 | UIImage *image = [UIImage imageNamed:@"keep"]; 62 | _imageView = [[UIImageView alloc] initWithImage:image]; 63 | CGFloat X = ([UIScreen mainScreen].bounds.size.width - image.size.width) * 0.5; 64 | CGFloat Y = [UIScreen mainScreen].bounds.size.height * 0.25; 65 | _imageView.frame = CGRectMake(X, Y, image.size.width, image.size.height); 66 | [self addSubview:_imageView]; 67 | } 68 | return _imageView; 69 | } 70 | 71 | - (UIButton *)registerButton 72 | { 73 | if (!_registerButton) { 74 | _registerButton = [UIButton buttonWithType:UIButtonTypeCustom]; 75 | CGFloat margin = 20; 76 | CGFloat X = margin; 77 | CGFloat H = 50; 78 | CGFloat W = ([UIScreen mainScreen].bounds.size.width - 3 * margin) * 0.5; 79 | CGFloat Y = [UIScreen mainScreen].bounds.size.height - H - 15; 80 | _registerButton.frame = CGRectMake(X, Y, W, H); 81 | [_registerButton setTitle:@"注册" forState:UIControlStateNormal]; 82 | [_registerButton setBackgroundColor:[UIColor blackColor]]; 83 | _registerButton.titleLabel.font = [UIFont systemFontOfSize:18]; 84 | [_registerButton addTarget:self action:@selector(registerClick:) forControlEvents:UIControlEventTouchUpInside]; 85 | _registerButton.layer.cornerRadius = 3.0f; 86 | _registerButton.alpha = 0.4f; 87 | } 88 | return _registerButton; 89 | } 90 | 91 | - (UIButton *)loginButton 92 | { 93 | if (!_loginButton) { 94 | _loginButton = [UIButton buttonWithType:UIButtonTypeCustom]; 95 | CGFloat margin = 20; 96 | CGFloat X = CGRectGetMaxX(self.registerButton.frame) + margin; 97 | CGFloat H = 50; 98 | CGFloat W = ([UIScreen mainScreen].bounds.size.width - 3 * margin) * 0.5; 99 | CGFloat Y = [UIScreen mainScreen].bounds.size.height - H - 15; 100 | _loginButton.frame = CGRectMake(X, Y, W, H); 101 | [_loginButton setTitle:@"登录" forState:UIControlStateNormal]; 102 | [_loginButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 103 | [_loginButton setBackgroundColor:[UIColor whiteColor]]; 104 | [_loginButton addTarget:self action:@selector(login:) forControlEvents:UIControlEventTouchUpInside]; 105 | _loginButton.titleLabel.font = [UIFont systemFontOfSize:18]; 106 | _loginButton.layer.cornerRadius = 3.0f; 107 | _loginButton.alpha = 0.4f; 108 | } 109 | return _loginButton; 110 | } 111 | 112 | - (KeepAdScrollView *)adScrollView 113 | { 114 | if (!_adScrollView) { 115 | _adScrollView = [[KeepAdScrollView alloc] init]; 116 | _adScrollView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 105); 117 | _adScrollView.pageControl = self.pageControl; 118 | } 119 | return _adScrollView; 120 | } 121 | 122 | - (UIPageControl *)pageControl 123 | { 124 | if (!_pageControl) { 125 | _pageControl = [[UIPageControl alloc] init]; 126 | CGFloat W = self.adScrollView.titles.count * 5; 127 | _pageControl.frame = CGRectMake(0, CGRectGetMaxY(self.adScrollView.frame) + 10, W, 10); 128 | _pageControl.currentPage = 0; 129 | [self addSubview:_pageControl]; 130 | } 131 | return _pageControl; 132 | } 133 | 134 | @end 135 | -------------------------------------------------------------------------------- /KeepGuidePage/PersonalCenter(个人中心)/Controller/KeepPersonalViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // KeepPersonalViewController.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KeepPersonalViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /KeepGuidePage/PersonalCenter(个人中心)/Controller/KeepPersonalViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepPersonalViewController.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "KeepPersonalViewController.h" 10 | 11 | @interface KeepPersonalViewController () 12 | 13 | @end 14 | 15 | @implementation KeepPersonalViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | /* 28 | #pragma mark - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 32 | // Get the new view controller using [segue destinationViewController]. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/Category/NSString+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Extension.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 2017/2/14. 6 | // Copyright © 2017年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (Extension) 12 | 13 | - (CGSize)mySizeWithFont:(UIFont *)font maxSize:(CGSize)size lineBreakMode:(NSLineBreakMode)mode; 14 | - (CGSize)mySizeWithFont:(UIFont *)font; 15 | - (CGSize)mySizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size; 16 | - (CGSize)mySizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/Category/NSString+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Extension.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 2017/2/14. 6 | // Copyright © 2017年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "NSString+Extension.h" 10 | 11 | @implementation NSString (Extension) 12 | 13 | - (CGSize)mySizeWithFont:(UIFont *)font maxSize:(CGSize)size lineBreakMode:(NSLineBreakMode)mode 14 | { 15 | CGSize realSize = CGSizeZero; 16 | CGRect textRect = [self boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil]; 17 | realSize = textRect.size; 18 | realSize.width = ceilf(realSize.width); 19 | realSize.height = ceilf(realSize.height); 20 | return realSize; 21 | } 22 | 23 | - (CGSize)mySizeWithFont:(UIFont *)font 24 | { 25 | CGSize resultSize = [self mySizeWithFont:font constrainedToSize:CGSizeMake(MAXFLOAT, font.lineHeight)]; 26 | 27 | return resultSize; 28 | } 29 | 30 | - (CGSize)mySizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size 31 | { 32 | CGSize resultSize = [self mySizeWithFont:font constrainedToSize:size lineBreakMode:NSLineBreakByWordWrapping]; 33 | 34 | return resultSize; 35 | } 36 | 37 | - (CGSize)mySizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode 38 | { 39 | CGSize resultSize = [self mySizeWithFont:font maxSize:size lineBreakMode:lineBreakMode]; 40 | 41 | return resultSize; 42 | } 43 | 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/Category/UIBarButtonItem+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIBarButtonItem+Extension.h 3 | // LdleFishGuidePage 4 | // 5 | // Created by Michael on 16/7/26. 6 | // Copyright © 2016年 com.51fanxing.searchController. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIBarButtonItem (Extension) 12 | 13 | + (nullable UIBarButtonItem *)barButtonItemWithImage:(nullable NSString *)imageName highlightImage:(nullable NSString *)highlightImageName target:(nullable id)target action:(nullable SEL)action; 14 | 15 | + (nullable UIBarButtonItem *)barButtonItemWithImage:(nullable NSString *)imageName target:(nullable id)target action:(nullable SEL)action; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/Category/UIBarButtonItem+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIBarButtonItem+Extension.m 3 | // LdleFishGuidePage 4 | // 5 | // Created by Michael on 16/7/26. 6 | // Copyright © 2016年 com.51fanxing.searchController. All rights reserved. 7 | // 8 | 9 | #import "UIBarButtonItem+Extension.h" 10 | #import "UIView+Extension.h" 11 | #import "KeepCancelHighlightButton.h" 12 | 13 | @implementation UIBarButtonItem (Extension) 14 | 15 | + (nullable UIBarButtonItem *)barButtonItemWithImage:(nullable NSString *)imageName highlightImage:(nullable NSString *)highlightImageName target:(nullable id)target action:(nullable SEL)action 16 | { 17 | UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 18 | [button setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; 19 | [button setBackgroundImage:[UIImage imageNamed:highlightImageName] forState:UIControlStateHighlighted]; 20 | [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; 21 | button.size = button.currentBackgroundImage.size; 22 | return [[UIBarButtonItem alloc] initWithCustomView:button]; 23 | } 24 | 25 | + (nullable UIBarButtonItem *)barButtonItemWithImage:(nullable NSString *)imageName target:(nullable id)target action:(nullable SEL)action 26 | { 27 | KeepCancelHighlightButton *button = [KeepCancelHighlightButton buttonWithType:UIButtonTypeCustom]; 28 | [button setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; 29 | [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; 30 | button.size = button.currentBackgroundImage.size; 31 | return [[UIBarButtonItem alloc] initWithCustomView:button]; 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/Category/UIColor+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+Extension.h 3 | // MYAlertView 4 | // 5 | // Created by Michael on 2017/2/14. 6 | // Copyright © 2017年 com.chinabidding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIColor (Extension) 12 | 13 | + (UIColor *)colorWithHexString:(NSString *)color; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/Category/UIColor+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+Extension.m 3 | // MYAlertView 4 | // 5 | // Created by Michael on 2017/2/14. 6 | // Copyright © 2017年 com.chinabidding. All rights reserved. 7 | // 8 | 9 | #import "UIColor+Extension.h" 10 | 11 | @implementation UIColor (Extension) 12 | 13 | //将十六进至的方法转化为UIColor对象 14 | + (UIColor *)colorWithHexString:(NSString *)color 15 | { 16 | NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; 17 | 18 | // String should be 6 or 8 characters 19 | if ([cString length] < 6) { 20 | return [UIColor clearColor]; 21 | } 22 | 23 | // strip 0X if it appears 24 | if ([cString hasPrefix:@"0X"]) 25 | cString = [cString substringFromIndex:2]; 26 | if ([cString hasPrefix:@"#"]) 27 | cString = [cString substringFromIndex:1]; 28 | if ([cString length] != 6) 29 | return [UIColor clearColor]; 30 | 31 | // Separate into r, g, b substrings 32 | NSRange range; 33 | range.location = 0; 34 | range.length = 2; 35 | 36 | //r 37 | NSString *rString = [cString substringWithRange:range]; 38 | 39 | //g 40 | range.location = 2; 41 | NSString *gString = [cString substringWithRange:range]; 42 | 43 | //b 44 | range.location = 4; 45 | NSString *bString = [cString substringWithRange:range]; 46 | 47 | // Scan values 48 | unsigned int r, g, b; 49 | [[NSScanner scannerWithString:rString] scanHexInt:&r]; 50 | [[NSScanner scannerWithString:gString] scanHexInt:&g]; 51 | [[NSScanner scannerWithString:bString] scanHexInt:&b]; 52 | 53 | return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f]; 54 | } 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/Category/UILabel+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UILabel+Extension.h 3 | // MYAlertView 4 | // 5 | // Created by Michael on 2017/2/14. 6 | // Copyright © 2017年 com.chinabidding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UILabel (Extension) 12 | 13 | - (void)sizeToFitWidth:(float)width; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/Category/UILabel+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UILabel+Extension.m 3 | // MYAlertView 4 | // 5 | // Created by Michael on 2017/2/14. 6 | // Copyright © 2017年 com.chinabidding. All rights reserved. 7 | // 8 | 9 | #import "UILabel+Extension.h" 10 | #import "UIView+Extension.h" 11 | 12 | @implementation UILabel (Extension) 13 | 14 | - (void)sizeToFitWidth:(float)width { 15 | self.numberOfLines = 0; 16 | self.lineBreakMode = NSLineBreakByCharWrapping; 17 | self.size = [self sizeThatFits:CGSizeMake(width, 0)]; 18 | } 19 | 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/Category/UIView+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Extension.h 3 | // FXBEST 4 | // 5 | // Created by fanxing on 16/6/16. 6 | // Copyright © 2016年 51fanxing. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIView (Extension) 12 | 13 | @property (nonatomic, assign) CGFloat x; 14 | @property (nonatomic, assign) CGFloat y; 15 | @property (nonatomic, assign) CGFloat width; 16 | @property (nonatomic, assign) CGFloat height; 17 | @property (nonatomic, assign) CGSize size; 18 | @property (nonatomic, assign) CGPoint origin; 19 | @property (nonatomic, assign) CGFloat centerX; 20 | @property (nonatomic, assign) CGFloat centerY; 21 | @property (nonatomic, assign) CGFloat left; 22 | @property (nonatomic, assign) CGFloat top; 23 | @property (nonatomic, assign) CGFloat right; 24 | @property (nonatomic, assign) CGFloat bottom; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/Category/UIView+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Extension.m 3 | // FXBEST 4 | // 5 | // Created by fanxing on 16/6/16. 6 | // Copyright © 2016年 51fanxing. All rights reserved. 7 | // 8 | 9 | #import "UIView+Extension.h" 10 | 11 | @implementation UIView (Extension) 12 | 13 | - (void)setX:(CGFloat)x 14 | { 15 | CGRect frame = self.frame; 16 | frame.origin.x = x; 17 | self.frame = frame; 18 | } 19 | 20 | - (CGFloat)x 21 | { 22 | return self.frame.origin.x; 23 | } 24 | 25 | - (void)setY:(CGFloat)y 26 | { 27 | CGRect frame = self.frame; 28 | frame.origin.y = y; 29 | self.frame = frame; 30 | } 31 | 32 | - (CGFloat)y 33 | { 34 | return self.frame.origin.y; 35 | } 36 | 37 | - (void)setWidth:(CGFloat)width 38 | { 39 | CGRect frame = self.frame; 40 | frame.size.width = width; 41 | self.frame = frame; 42 | } 43 | 44 | - (CGFloat)width 45 | { 46 | return self.frame.size.width; 47 | } 48 | 49 | - (void)setHeight:(CGFloat)height 50 | { 51 | CGRect frame = self.frame; 52 | frame.size.height = height; 53 | self.frame = frame; 54 | } 55 | 56 | - (CGFloat)height 57 | { 58 | return self.frame.size.height; 59 | } 60 | 61 | - (void)setSize:(CGSize)size 62 | { 63 | CGRect frame = self.frame; 64 | frame.size = size; 65 | self.frame = frame; 66 | } 67 | 68 | - (CGFloat)left 69 | { 70 | return self.frame.origin.x; 71 | } 72 | 73 | - (void)setLeft:(CGFloat)x 74 | { 75 | CGRect frame = self.frame; 76 | frame.origin.x = x; 77 | self.frame = frame; 78 | } 79 | 80 | - (CGFloat)top 81 | { 82 | return self.frame.origin.y; 83 | } 84 | 85 | - (void)setTop:(CGFloat)y 86 | { 87 | CGRect frame = self.frame; 88 | frame.origin.y = y; 89 | self.frame = frame; 90 | } 91 | 92 | - (CGFloat)right 93 | { 94 | return self.frame.origin.x + self.frame.size.width; 95 | } 96 | 97 | - (void)setRight:(CGFloat)right 98 | { 99 | CGRect frame = self.frame; 100 | frame.origin.x = right - frame.size.width; 101 | self.frame = frame; 102 | } 103 | 104 | - (CGFloat)bottom 105 | { 106 | return self.frame.origin.y + self.frame.size.height; 107 | } 108 | 109 | - (void)setBottom:(CGFloat)bottom 110 | { 111 | CGRect frame = self.frame; 112 | frame.origin.y = bottom - frame.size.height; 113 | self.frame = frame; 114 | } 115 | 116 | 117 | - (CGSize)size 118 | { 119 | return self.frame.size; 120 | } 121 | 122 | - (void)setOrigin:(CGPoint)origin 123 | { 124 | CGRect frame = self.frame; 125 | frame.origin = origin; 126 | self.frame = frame; 127 | } 128 | 129 | - (CGPoint)origin 130 | { 131 | return self.frame.origin; 132 | } 133 | 134 | - (void)setCenterX:(CGFloat)centerX 135 | { 136 | CGPoint center = self.center; 137 | center.x = centerX; 138 | self.center = center; 139 | } 140 | 141 | - (CGFloat)centerX 142 | { 143 | return self.center.x; 144 | } 145 | 146 | - (void)setCenterY:(CGFloat)centerY 147 | { 148 | CGPoint center = self.center; 149 | center.y = centerY; 150 | self.center = center; 151 | } 152 | 153 | - (CGFloat)centerY 154 | { 155 | return self.center.y; 156 | } 157 | 158 | @end 159 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/CustomView/KeepCancelHighlightButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // KeepCancelHighlightButton.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/29. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KeepCancelHighlightButton : UIButton 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/CustomView/KeepCancelHighlightButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepCancelHighlightButton.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/29. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "KeepCancelHighlightButton.h" 10 | 11 | @implementation KeepCancelHighlightButton 12 | 13 | - (void)setHighlighted:(BOOL)highlighted 14 | { 15 | 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYCollectionViewStreamLineFlowLayout.h: -------------------------------------------------------------------------------- 1 | // 2 | // MYCollectionViewStreamLineFlowLayout.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 2017/2/14. 6 | // Copyright © 2017年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MYCollectionViewStreamLineFlowLayout : UICollectionViewFlowLayout 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYCollectionViewStreamLineFlowLayout.m: -------------------------------------------------------------------------------- 1 | // 2 | // MYCollectionViewStreamLineFlowLayout.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 2017/2/14. 6 | // Copyright © 2017年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "MYCollectionViewStreamLineFlowLayout.h" 10 | 11 | @implementation MYCollectionViewStreamLineFlowLayout 12 | 13 | - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { 14 | NSMutableArray *attributes = [[NSMutableArray alloc] initWithArray:[super layoutAttributesForElementsInRect:rect]]; 15 | 16 | CGFloat xOffset = 0.0f; 17 | CGFloat lastCenterY = 0.0f, newCenterY; 18 | CGRect frame; 19 | 20 | for (UICollectionViewLayoutAttributes *attribute in attributes) { 21 | frame = attribute.frame; 22 | newCenterY = frame.origin.y + frame.size.height / 2; 23 | 24 | if (frame.origin.x == self.sectionInset.left || abs((int) (newCenterY - lastCenterY)) > 1) { 25 | xOffset = self.sectionInset.left; 26 | lastCenterY = newCenterY; 27 | } 28 | 29 | frame.origin.x = xOffset; 30 | attribute.frame = frame; 31 | 32 | xOffset += CGRectGetWidth(frame) + self.minimumInteritemSpacing; 33 | } 34 | 35 | return attributes; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYGroupIssueLabelCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // MYGroupIssueLabelCell.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 2017/2/14. 6 | // Copyright © 2017年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MYGroupIssueLabelCell : UICollectionViewCell 12 | 13 | @property (nonatomic, strong) UILabel *detailLabel; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/MYCollectionViewStreamLineFlowLayout/MYGroupIssueLabelCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // MYGroupIssueLabelCell.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 2017/2/14. 6 | // Copyright © 2017年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "MYGroupIssueLabelCell.h" 10 | #import "UIColor+Extension.h" 11 | 12 | @interface MYGroupIssueLabelCell() 13 | 14 | @end 15 | 16 | @implementation MYGroupIssueLabelCell 17 | 18 | - (instancetype)initWithFrame:(CGRect)frame 19 | { 20 | if (self = [super initWithFrame:frame]) { 21 | [self setup]; 22 | } 23 | return self; 24 | } 25 | 26 | - (void)setup 27 | { 28 | self.layer.borderColor = [UIColor colorWithHexString:@"#e5e5e5"].CGColor; 29 | self.layer.borderWidth = 0.5f; 30 | self.detailLabel.frame = self.contentView.bounds; 31 | [self.contentView addSubview:self.detailLabel]; 32 | } 33 | 34 | - (void)layoutSubviews 35 | { 36 | [super layoutSubviews]; 37 | 38 | self.layer.cornerRadius = self.bounds.size.height / 2; 39 | self.clipsToBounds = YES; 40 | } 41 | 42 | - (void)prepareForReuse 43 | { 44 | [super prepareForReuse]; 45 | self.layer.borderColor = [UIColor colorWithHexString:@"#e5e5e5"].CGColor; 46 | self.detailLabel.textColor = [UIColor colorWithHexString:@"#333333"]; 47 | } 48 | 49 | - (UILabel *)detailLabel 50 | { 51 | if (_detailLabel == nil) { 52 | _detailLabel = [[UILabel alloc] init]; 53 | _detailLabel.font = [UIFont systemFontOfSize:13.f]; 54 | _detailLabel.textAlignment = NSTextAlignmentCenter; 55 | _detailLabel.textColor = [UIColor colorWithHexString:@"#333333"]; 56 | _detailLabel.text = @"标签"; 57 | } 58 | return _detailLabel; 59 | } 60 | 61 | - (void)setSelected:(BOOL)selected 62 | { 63 | [super setSelected:selected]; 64 | if (selected) { 65 | self.layer.borderColor = [UIColor colorWithHexString:@"#fa4b9b"].CGColor; 66 | self.detailLabel.textColor = [UIColor colorWithHexString:@"#fa4b9b"]; 67 | } else { 68 | self.layer.borderColor = [UIColor colorWithHexString:@"#e5e5e5"].CGColor; 69 | self.detailLabel.textColor = [UIColor colorWithHexString:@"#333333"]; 70 | } 71 | } 72 | 73 | @end 74 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/Other/Constant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Constant.h 3 | // LdleFishGuidePage 4 | // 5 | // Created by Michael on 16/7/26. 6 | // Copyright © 2016年 com.51fanxing.searchController. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | // 屏幕尺寸 12 | #define KeepScreenBounds [UIScreen mainScreen].bounds 13 | #define KeepScreenSize [UIScreen mainScreen].bounds.size 14 | #define KeepScreenWidth [UIScreen mainScreen].bounds.size.width 15 | #define KeepScreenHeight [UIScreen mainScreen].bounds.size.height 16 | 17 | // RGB颜色 18 | #define KeepRGBColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0] 19 | #define KeepRGBA(R, G, B, A) [UIColor colorWithRed:(R)/255.f green:(G)/255.f blue:(B)/255.f alpha:(A)] 20 | // 主题颜色 21 | #define KeepNavigationBarYellowColor KeepRGBColor(254.0, 212.0, 53.0) 22 | #define KeepNavigationThemeColor KeepRGBColor(89.0, 79.0, 95.0) 23 | -------------------------------------------------------------------------------- /KeepGuidePage/Public(公共库)/Other/Constant.m: -------------------------------------------------------------------------------- 1 | // 2 | // Constant.m 3 | // LdleFishGuidePage 4 | // 5 | // Created by Michael on 16/7/26. 6 | // Copyright © 2016年 com.51fanxing.searchController. All rights reserved. 7 | // 8 | 9 | #import "Constant.h" 10 | -------------------------------------------------------------------------------- /KeepGuidePage/Train(训练)/Controller/KeepTrainViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // KeepTrainViewController.h 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KeepTrainViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /KeepGuidePage/Train(训练)/Controller/KeepTrainViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepTrainViewController.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/7/22. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import "KeepTrainViewController.h" 10 | 11 | @interface KeepTrainViewController () 12 | 13 | @end 14 | 15 | @implementation KeepTrainViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | /* 28 | #pragma mark - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 32 | // Get the new view controller using [segue destinationViewController]. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /KeepGuidePage/keep.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sunjinshuai/Keep/81a075ed25ee76465a1853df538f35ab32134b6f/KeepGuidePage/keep.mp4 -------------------------------------------------------------------------------- /KeepGuidePage/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // KeepGuidePage 4 | // 5 | // Created by Michael on 16/6/30. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /KeepGuidePageTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /KeepGuidePageTests/KeepGuidePageTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepGuidePageTests.m 3 | // KeepGuidePageTests 4 | // 5 | // Created by Michael on 16/6/30. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KeepGuidePageTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation KeepGuidePageTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /KeepGuidePageUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /KeepGuidePageUITests/KeepGuidePageUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // KeepGuidePageUITests.m 3 | // KeepGuidePageUITests 4 | // 5 | // Created by Michael on 16/6/30. 6 | // Copyright © 2016年 com.51fanxing.KeepGuidePage. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KeepGuidePageUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation KeepGuidePageUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | - (void)testExample { 36 | // Use recording to get started writing UI tests. 37 | // Use XCTAssert and related functions to verify your tests produce the correct results. 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 仿KEEP引导页 2 | 3 |

4 | 5 | 6 | 7 |

8 | 9 | ![效果图](https://github.com/sunjinshuai/Keep/blob/master/Keep.gif) 10 | 11 | 12 | 13 | --------------------------------------------------------------------------------