├── .gitignore ├── LICENSE ├── MSRotationTabBar.gif ├── MSRotationTabBarDEMO.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── MSRotationTabBarDEMO.xcworkspace └── contents.xcworkspacedata ├── MSRotationTabBarDEMO ├── MSRotationTabBar │ ├── CenterPresentController.h │ ├── CenterPresentController.m │ ├── Header.h │ ├── Item.h │ ├── Item.m │ ├── JZJTabbarViewController.h │ ├── JZJTabbarViewController.m │ ├── MSTabbarDataManager.h │ ├── MSTabbarDataManager.m │ ├── MSTabbarViewController.h │ ├── MSTabbarViewController.m │ ├── PrefixHeader.pch │ ├── Resource │ │ ├── 44.png │ │ ├── tabbar_0_day_N_24x24_@2x.png │ │ ├── tabbar_0_day_N_24x24_@3x.png │ │ ├── tabbar_0_night_H_24x24_@2x.png │ │ ├── tabbar_0_night_H_24x24_@3x.png │ │ ├── tabbar_select_1@2x.png │ │ ├── tabbar_select_1@3x.png │ │ ├── tabbar_select_2@2x.png │ │ ├── tabbar_select_2@3x.png │ │ ├── tabbar_select_3@2x.png │ │ ├── tabbar_select_3@3x.png │ │ ├── tabbar_select_4@2x.png │ │ ├── tabbar_select_4@3x.png │ │ ├── tabbar_unselect_1@2x.png │ │ ├── tabbar_unselect_1@3x.png │ │ ├── tabbar_unselect_2@2x.png │ │ ├── tabbar_unselect_2@3x.png │ │ ├── tabbar_unselect_3@2x.png │ │ ├── tabbar_unselect_3@3x.png │ │ ├── tabbar_unselect_4@2x.png │ │ └── tabbar_unselect_4@3x.png │ ├── Tabbar.h │ ├── Tabbar.m │ └── Tool │ │ ├── Tool.h │ │ ├── Tool.m │ │ ├── UIView+Extension.h │ │ ├── UIView+Extension.m │ │ ├── UIViewController+Extension.h │ │ └── UIViewController+Extension.m ├── Other │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── icon-1024@2x.png │ │ │ ├── icon-20-ipad.png │ │ │ ├── icon-20@2x-ipad.png │ │ │ ├── icon-20@2x.png │ │ │ ├── icon-20@3x.png │ │ │ ├── icon-29-ipad.png │ │ │ ├── icon-29.png │ │ │ ├── icon-29@2x-ipad.png │ │ │ ├── icon-29@2x.png │ │ │ ├── icon-29@3x.png │ │ │ ├── icon-40.png │ │ │ ├── icon-40@2x.png │ │ │ ├── icon-40@3x.png │ │ │ ├── icon-50.png │ │ │ ├── icon-50@2x.png │ │ │ ├── icon-57.png │ │ │ ├── icon-57@2x.png │ │ │ ├── icon-60@2x.png │ │ │ ├── icon-60@3x.png │ │ │ ├── icon-72.png │ │ │ ├── icon-72@2x.png │ │ │ ├── icon-76.png │ │ │ ├── icon-76@2x.png │ │ │ └── icon-83.5@2x.png │ │ ├── Contents.json │ │ ├── LaunchImage.launchimage │ │ │ ├── 1024iPadPortraitWOSBiOS56_768x1004pt.png │ │ │ ├── 1024iPadPortraitWOSBiOS56_768x1004pt@2x.png │ │ │ ├── 1024iPadPortraitiOS56_768x1024pt.png │ │ │ ├── 1024iPadPortraitiOS56_768x1024pt@2x.png │ │ │ ├── 1024iPadPortraitiOS789_768x1024pt.png │ │ │ ├── 1024iPadPortraitiOS789_768x1024pt@2x.png │ │ │ ├── 1024iPhonePortraitiOS56_320x480pt.png │ │ │ ├── 1024iPhonePortraitiOS56_320x480pt@2x.png │ │ │ ├── 1024iPhonePortraitiOS56_320x568pt@2x.png │ │ │ ├── 1024iPhonePortraitiOS789_320x480pt@2x.png │ │ │ ├── 1024iPhonePortraitiOS789_320x568pt@2x.png │ │ │ ├── 1024iPhonePortraitiOS89_375x667pt@2x.png │ │ │ ├── 1024iPhonePortraitiOS89_414x736pt@3x.png │ │ │ └── Contents.json │ │ └── tabbar │ │ │ ├── Contents.json │ │ │ ├── tabbarButtonBG.imageset │ │ │ ├── 44.png │ │ │ └── Contents.json │ │ │ ├── tabbar_select_0.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_0_night_H_24x24_@2x.png │ │ │ └── tabbar_0_night_H_24x24_@3x.png │ │ │ ├── tabbar_select_1.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_select_1@2x.png │ │ │ └── tabbar_select_1@3x.png │ │ │ ├── tabbar_select_2.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_select_2@2x.png │ │ │ └── tabbar_select_2@3x.png │ │ │ ├── tabbar_select_3.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_select_3@2x.png │ │ │ └── tabbar_select_3@3x.png │ │ │ ├── tabbar_select_4.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_select_4@2x.png │ │ │ └── tabbar_select_4@3x.png │ │ │ ├── tabbar_unselect_0.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_0_day_N_24x24_@2x.png │ │ │ └── tabbar_0_day_N_24x24_@3x.png │ │ │ ├── tabbar_unselect_1.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_unselect_1@2x.png │ │ │ └── tabbar_unselect_1@3x.png │ │ │ ├── tabbar_unselect_2.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_unselect_2@2x.png │ │ │ └── tabbar_unselect_2@3x.png │ │ │ ├── tabbar_unselect_3.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_unselect_3@2x.png │ │ │ └── tabbar_unselect_3@3x.png │ │ │ └── tabbar_unselect_4.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_unselect_4@2x.png │ │ │ └── tabbar_unselect_4@3x.png │ └── Info.plist ├── ViewController.h ├── ViewController.m └── main.m ├── Podfile ├── Podfile.lock ├── Pods ├── Headers │ ├── Private │ │ └── MSBlockButton │ │ │ ├── MSBlockButton.h │ │ │ └── UIButton+MSBlocks.h │ └── Public │ │ └── MSBlockButton │ │ ├── MSBlockButton.h │ │ └── UIButton+MSBlocks.h ├── MSBlockButton │ ├── LICENSE │ ├── MSBlockButton │ │ ├── MSBlockButton.h │ │ ├── UIButton+MSBlocks.h │ │ └── UIButton+MSBlocks.m │ └── README.md ├── Manifest.lock ├── Pods.xcodeproj │ └── project.pbxproj └── Target Support Files │ ├── MSBlockButton │ ├── MSBlockButton-dummy.m │ ├── MSBlockButton-prefix.pch │ └── MSBlockButton.xcconfig │ └── Pods-MSRotationTabBarDEMO │ ├── Pods-MSRotationTabBarDEMO-acknowledgements.markdown │ ├── Pods-MSRotationTabBarDEMO-acknowledgements.plist │ ├── Pods-MSRotationTabBarDEMO-dummy.m │ ├── Pods-MSRotationTabBarDEMO-frameworks.sh │ ├── Pods-MSRotationTabBarDEMO-resources.sh │ ├── Pods-MSRotationTabBarDEMO.debug.xcconfig │ └── Pods-MSRotationTabBarDEMO.release.xcconfig └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## User settings 6 | xcuserdata/ 7 | 8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 9 | *.xcscmblueprint 10 | *.xccheckout 11 | 12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 13 | build/ 14 | DerivedData/ 15 | *.moved-aside 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | 28 | ## App packaging 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 | # Add this line if you want to avoid checking in source code from the Xcode workspace 42 | # *.xcworkspace 43 | 44 | # Carthage 45 | # 46 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 47 | # Carthage/Checkouts 48 | 49 | Carthage/Build/ 50 | 51 | # fastlane 52 | # 53 | # It is recommended to not store the screenshots in the git repo. 54 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 55 | # For more information about the recommended setup visit: 56 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 57 | 58 | fastlane/report.xml 59 | fastlane/Preview.html 60 | fastlane/screenshots/**/*.png 61 | fastlane/test_output 62 | 63 | # Code Injection 64 | # 65 | # After new code Injection tools there's a generated folder /iOSInjectionProject 66 | # https://github.com/johnno1962/injectionforxcode 67 | 68 | iOSInjectionProject/ 69 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 sureJiang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MSRotationTabBar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBar.gif -------------------------------------------------------------------------------- /MSRotationTabBarDEMO.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0E1C8F402158C6A9005EF24B /* tabbar_0_night_H_24x24_@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F2B2158C6A9005EF24B /* tabbar_0_night_H_24x24_@3x.png */; }; 11 | 0E1C8F412158C6A9005EF24B /* tabbar_select_2@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F2C2158C6A9005EF24B /* tabbar_select_2@3x.png */; }; 12 | 0E1C8F422158C6A9005EF24B /* tabbar_unselect_1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F2D2158C6A9005EF24B /* tabbar_unselect_1@2x.png */; }; 13 | 0E1C8F432158C6A9005EF24B /* tabbar_unselect_3@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F2E2158C6A9005EF24B /* tabbar_unselect_3@3x.png */; }; 14 | 0E1C8F442158C6A9005EF24B /* tabbar_unselect_3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F2F2158C6A9005EF24B /* tabbar_unselect_3@2x.png */; }; 15 | 0E1C8F452158C6A9005EF24B /* tabbar_unselect_1@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F302158C6A9005EF24B /* tabbar_unselect_1@3x.png */; }; 16 | 0E1C8F462158C6A9005EF24B /* tabbar_select_2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F312158C6A9005EF24B /* tabbar_select_2@2x.png */; }; 17 | 0E1C8F472158C6A9005EF24B /* tabbar_0_night_H_24x24_@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F322158C6A9005EF24B /* tabbar_0_night_H_24x24_@2x.png */; }; 18 | 0E1C8F482158C6A9005EF24B /* tabbar_0_day_N_24x24_@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F332158C6A9005EF24B /* tabbar_0_day_N_24x24_@2x.png */; }; 19 | 0E1C8F492158C6A9005EF24B /* tabbar_select_4@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F342158C6A9005EF24B /* tabbar_select_4@3x.png */; }; 20 | 0E1C8F4A2158C6A9005EF24B /* tabbar_select_4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F352158C6A9005EF24B /* tabbar_select_4@2x.png */; }; 21 | 0E1C8F4B2158C6A9005EF24B /* tabbar_0_day_N_24x24_@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F362158C6A9005EF24B /* tabbar_0_day_N_24x24_@3x.png */; }; 22 | 0E1C8F4C2158C6A9005EF24B /* tabbar_unselect_2@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F372158C6A9005EF24B /* tabbar_unselect_2@3x.png */; }; 23 | 0E1C8F4D2158C6A9005EF24B /* tabbar_select_1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F382158C6A9005EF24B /* tabbar_select_1@2x.png */; }; 24 | 0E1C8F4E2158C6A9005EF24B /* tabbar_select_3@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F392158C6A9005EF24B /* tabbar_select_3@3x.png */; }; 25 | 0E1C8F4F2158C6A9005EF24B /* tabbar_select_3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F3A2158C6A9005EF24B /* tabbar_select_3@2x.png */; }; 26 | 0E1C8F502158C6A9005EF24B /* tabbar_select_1@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F3B2158C6A9005EF24B /* tabbar_select_1@3x.png */; }; 27 | 0E1C8F512158C6A9005EF24B /* tabbar_unselect_2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F3C2158C6A9005EF24B /* tabbar_unselect_2@2x.png */; }; 28 | 0E1C8F522158C6A9005EF24B /* tabbar_unselect_4@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F3D2158C6A9005EF24B /* tabbar_unselect_4@3x.png */; }; 29 | 0E1C8F532158C6A9005EF24B /* tabbar_unselect_4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F3E2158C6A9005EF24B /* tabbar_unselect_4@2x.png */; }; 30 | 0E1C8F542158C6A9005EF24B /* 44.png in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F3F2158C6A9005EF24B /* 44.png */; }; 31 | 0E1C8F702158C917005EF24B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0E1C8F6F2158C917005EF24B /* Assets.xcassets */; }; 32 | 0E1C8F712158CB35005EF24B /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E1C8F182158C687005EF24B /* ViewController.m */; }; 33 | 0E1C8F722158CB35005EF24B /* MSTabbarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E1C8F682158C71E005EF24B /* MSTabbarViewController.m */; }; 34 | 0E1C8F732158CB35005EF24B /* CenterPresentController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E1C8F642158C719005EF24B /* CenterPresentController.m */; }; 35 | 0E1C8F742158CB35005EF24B /* Item.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E1C8F572158C6FF005EF24B /* Item.m */; }; 36 | 0E1C8F752158CB35005EF24B /* Tabbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E1C8F592158C6FF005EF24B /* Tabbar.m */; }; 37 | 0E1C8F762158CB35005EF24B /* Tool.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E1C8F5E2158C707005EF24B /* Tool.m */; }; 38 | 0E1C8F772158CB35005EF24B /* UIView+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E1C8F632158C707005EF24B /* UIView+Extension.m */; }; 39 | 0E1C8F782158CB35005EF24B /* UIViewController+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E1C8F602158C707005EF24B /* UIViewController+Extension.m */; }; 40 | 0E1C8F792158CB35005EF24B /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E1C8F152158C687005EF24B /* AppDelegate.m */; }; 41 | 0E1C8F7A2158CB35005EF24B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E1C8F232158C687005EF24B /* main.m */; }; 42 | 0EB5436124896B7C001F8951 /* MSTabbarDataManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EB5436024896B7C001F8951 /* MSTabbarDataManager.m */; }; 43 | /* End PBXBuildFile section */ 44 | 45 | /* Begin PBXFileReference section */ 46 | 0E1C8F112158C687005EF24B /* MSRotationTabBarDEMO.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MSRotationTabBarDEMO.app; sourceTree = BUILT_PRODUCTS_DIR; }; 47 | 0E1C8F142158C687005EF24B /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 48 | 0E1C8F152158C687005EF24B /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 49 | 0E1C8F172158C687005EF24B /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 50 | 0E1C8F182158C687005EF24B /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 51 | 0E1C8F222158C687005EF24B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 52 | 0E1C8F232158C687005EF24B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 53 | 0E1C8F2B2158C6A9005EF24B /* tabbar_0_night_H_24x24_@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_0_night_H_24x24_@3x.png"; sourceTree = ""; }; 54 | 0E1C8F2C2158C6A9005EF24B /* tabbar_select_2@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_select_2@3x.png"; sourceTree = ""; }; 55 | 0E1C8F2D2158C6A9005EF24B /* tabbar_unselect_1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_unselect_1@2x.png"; sourceTree = ""; }; 56 | 0E1C8F2E2158C6A9005EF24B /* tabbar_unselect_3@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_unselect_3@3x.png"; sourceTree = ""; }; 57 | 0E1C8F2F2158C6A9005EF24B /* tabbar_unselect_3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_unselect_3@2x.png"; sourceTree = ""; }; 58 | 0E1C8F302158C6A9005EF24B /* tabbar_unselect_1@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_unselect_1@3x.png"; sourceTree = ""; }; 59 | 0E1C8F312158C6A9005EF24B /* tabbar_select_2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_select_2@2x.png"; sourceTree = ""; }; 60 | 0E1C8F322158C6A9005EF24B /* tabbar_0_night_H_24x24_@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_0_night_H_24x24_@2x.png"; sourceTree = ""; }; 61 | 0E1C8F332158C6A9005EF24B /* tabbar_0_day_N_24x24_@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_0_day_N_24x24_@2x.png"; sourceTree = ""; }; 62 | 0E1C8F342158C6A9005EF24B /* tabbar_select_4@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_select_4@3x.png"; sourceTree = ""; }; 63 | 0E1C8F352158C6A9005EF24B /* tabbar_select_4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_select_4@2x.png"; sourceTree = ""; }; 64 | 0E1C8F362158C6A9005EF24B /* tabbar_0_day_N_24x24_@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_0_day_N_24x24_@3x.png"; sourceTree = ""; }; 65 | 0E1C8F372158C6A9005EF24B /* tabbar_unselect_2@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_unselect_2@3x.png"; sourceTree = ""; }; 66 | 0E1C8F382158C6A9005EF24B /* tabbar_select_1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_select_1@2x.png"; sourceTree = ""; }; 67 | 0E1C8F392158C6A9005EF24B /* tabbar_select_3@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_select_3@3x.png"; sourceTree = ""; }; 68 | 0E1C8F3A2158C6A9005EF24B /* tabbar_select_3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_select_3@2x.png"; sourceTree = ""; }; 69 | 0E1C8F3B2158C6A9005EF24B /* tabbar_select_1@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_select_1@3x.png"; sourceTree = ""; }; 70 | 0E1C8F3C2158C6A9005EF24B /* tabbar_unselect_2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_unselect_2@2x.png"; sourceTree = ""; }; 71 | 0E1C8F3D2158C6A9005EF24B /* tabbar_unselect_4@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_unselect_4@3x.png"; sourceTree = ""; }; 72 | 0E1C8F3E2158C6A9005EF24B /* tabbar_unselect_4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbar_unselect_4@2x.png"; sourceTree = ""; }; 73 | 0E1C8F3F2158C6A9005EF24B /* 44.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = 44.png; sourceTree = ""; }; 74 | 0E1C8F572158C6FF005EF24B /* Item.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Item.m; sourceTree = ""; }; 75 | 0E1C8F582158C6FF005EF24B /* Item.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Item.h; sourceTree = ""; }; 76 | 0E1C8F592158C6FF005EF24B /* Tabbar.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tabbar.m; sourceTree = ""; }; 77 | 0E1C8F5A2158C6FF005EF24B /* Tabbar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Tabbar.h; sourceTree = ""; }; 78 | 0E1C8F5E2158C707005EF24B /* Tool.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tool.m; sourceTree = ""; }; 79 | 0E1C8F5F2158C707005EF24B /* UIView+Extension.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+Extension.h"; sourceTree = ""; }; 80 | 0E1C8F602158C707005EF24B /* UIViewController+Extension.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+Extension.m"; sourceTree = ""; }; 81 | 0E1C8F612158C707005EF24B /* Tool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Tool.h; sourceTree = ""; }; 82 | 0E1C8F622158C707005EF24B /* UIViewController+Extension.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIViewController+Extension.h"; sourceTree = ""; }; 83 | 0E1C8F632158C707005EF24B /* UIView+Extension.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+Extension.m"; sourceTree = ""; }; 84 | 0E1C8F642158C719005EF24B /* CenterPresentController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CenterPresentController.m; sourceTree = ""; }; 85 | 0E1C8F652158C719005EF24B /* CenterPresentController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CenterPresentController.h; sourceTree = ""; }; 86 | 0E1C8F672158C71E005EF24B /* MSTabbarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSTabbarViewController.h; sourceTree = ""; }; 87 | 0E1C8F682158C71E005EF24B /* MSTabbarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSTabbarViewController.m; sourceTree = ""; }; 88 | 0E1C8F6A2158C74A005EF24B /* Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Header.h; sourceTree = ""; }; 89 | 0E1C8F6D2158C74B005EF24B /* PrefixHeader.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = ""; }; 90 | 0E1C8F6F2158C917005EF24B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 91 | 0EB5435F24896B7C001F8951 /* MSTabbarDataManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MSTabbarDataManager.h; sourceTree = ""; }; 92 | 0EB5436024896B7C001F8951 /* MSTabbarDataManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MSTabbarDataManager.m; sourceTree = ""; }; 93 | 58D29B5723145A29DD45A480 /* libPods-MSRotationTabBarDEMO.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MSRotationTabBarDEMO.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 94 | A9958E23CD8D1E4823B33FA7 /* Pods-MSRotationTabBarDEMO.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MSRotationTabBarDEMO.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MSRotationTabBarDEMO/Pods-MSRotationTabBarDEMO.debug.xcconfig"; sourceTree = ""; }; 95 | FF2B0699262E4E4B56C26C36 /* Pods-MSRotationTabBarDEMO.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MSRotationTabBarDEMO.release.xcconfig"; path = "Pods/Target Support Files/Pods-MSRotationTabBarDEMO/Pods-MSRotationTabBarDEMO.release.xcconfig"; sourceTree = ""; }; 96 | /* End PBXFileReference section */ 97 | 98 | /* Begin PBXFrameworksBuildPhase section */ 99 | 0E1C8F0E2158C687005EF24B /* Frameworks */ = { 100 | isa = PBXFrameworksBuildPhase; 101 | buildActionMask = 2147483647; 102 | files = ( 103 | ); 104 | runOnlyForDeploymentPostprocessing = 0; 105 | }; 106 | /* End PBXFrameworksBuildPhase section */ 107 | 108 | /* Begin PBXGroup section */ 109 | 06D26EE40170000805D1E7F9 /* Pods */ = { 110 | isa = PBXGroup; 111 | children = ( 112 | A9958E23CD8D1E4823B33FA7 /* Pods-MSRotationTabBarDEMO.debug.xcconfig */, 113 | FF2B0699262E4E4B56C26C36 /* Pods-MSRotationTabBarDEMO.release.xcconfig */, 114 | ); 115 | name = Pods; 116 | path = ../..; 117 | sourceTree = ""; 118 | }; 119 | 0E1C8F082158C687005EF24B = { 120 | isa = PBXGroup; 121 | children = ( 122 | 0E1C8F132158C687005EF24B /* MSRotationTabBarDEMO */, 123 | ); 124 | sourceTree = ""; 125 | }; 126 | 0E1C8F122158C687005EF24B /* Products */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | 0E1C8F112158C687005EF24B /* MSRotationTabBarDEMO.app */, 130 | ); 131 | name = Products; 132 | path = ../..; 133 | sourceTree = ""; 134 | }; 135 | 0E1C8F132158C687005EF24B /* MSRotationTabBarDEMO */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | 0E1C8F172158C687005EF24B /* ViewController.h */, 139 | 0E1C8F182158C687005EF24B /* ViewController.m */, 140 | 0E1C8F562158C6D7005EF24B /* MSRotationTabBar */, 141 | 0E1C8F552158C6B1005EF24B /* Other */, 142 | 0E1C8F232158C687005EF24B /* main.m */, 143 | ); 144 | path = MSRotationTabBarDEMO; 145 | sourceTree = ""; 146 | }; 147 | 0E1C8F2A2158C6A9005EF24B /* Resource */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | 0E1C8F2B2158C6A9005EF24B /* tabbar_0_night_H_24x24_@3x.png */, 151 | 0E1C8F2C2158C6A9005EF24B /* tabbar_select_2@3x.png */, 152 | 0E1C8F2D2158C6A9005EF24B /* tabbar_unselect_1@2x.png */, 153 | 0E1C8F2E2158C6A9005EF24B /* tabbar_unselect_3@3x.png */, 154 | 0E1C8F2F2158C6A9005EF24B /* tabbar_unselect_3@2x.png */, 155 | 0E1C8F302158C6A9005EF24B /* tabbar_unselect_1@3x.png */, 156 | 0E1C8F312158C6A9005EF24B /* tabbar_select_2@2x.png */, 157 | 0E1C8F322158C6A9005EF24B /* tabbar_0_night_H_24x24_@2x.png */, 158 | 0E1C8F332158C6A9005EF24B /* tabbar_0_day_N_24x24_@2x.png */, 159 | 0E1C8F342158C6A9005EF24B /* tabbar_select_4@3x.png */, 160 | 0E1C8F352158C6A9005EF24B /* tabbar_select_4@2x.png */, 161 | 0E1C8F362158C6A9005EF24B /* tabbar_0_day_N_24x24_@3x.png */, 162 | 0E1C8F372158C6A9005EF24B /* tabbar_unselect_2@3x.png */, 163 | 0E1C8F382158C6A9005EF24B /* tabbar_select_1@2x.png */, 164 | 0E1C8F392158C6A9005EF24B /* tabbar_select_3@3x.png */, 165 | 0E1C8F3A2158C6A9005EF24B /* tabbar_select_3@2x.png */, 166 | 0E1C8F3B2158C6A9005EF24B /* tabbar_select_1@3x.png */, 167 | 0E1C8F3C2158C6A9005EF24B /* tabbar_unselect_2@2x.png */, 168 | 0E1C8F3D2158C6A9005EF24B /* tabbar_unselect_4@3x.png */, 169 | 0E1C8F3E2158C6A9005EF24B /* tabbar_unselect_4@2x.png */, 170 | 0E1C8F3F2158C6A9005EF24B /* 44.png */, 171 | ); 172 | path = Resource; 173 | sourceTree = ""; 174 | }; 175 | 0E1C8F552158C6B1005EF24B /* Other */ = { 176 | isa = PBXGroup; 177 | children = ( 178 | 0E1C8F6F2158C917005EF24B /* Assets.xcassets */, 179 | 0E1C8F142158C687005EF24B /* AppDelegate.h */, 180 | 0E1C8F152158C687005EF24B /* AppDelegate.m */, 181 | 0E1C8F222158C687005EF24B /* Info.plist */, 182 | 0E1C8F122158C687005EF24B /* Products */, 183 | 06D26EE40170000805D1E7F9 /* Pods */, 184 | 70732A61352AA15818F68498 /* Frameworks */, 185 | ); 186 | path = Other; 187 | sourceTree = ""; 188 | }; 189 | 0E1C8F562158C6D7005EF24B /* MSRotationTabBar */ = { 190 | isa = PBXGroup; 191 | children = ( 192 | 0E1C8F6D2158C74B005EF24B /* PrefixHeader.pch */, 193 | 0E1C8F6A2158C74A005EF24B /* Header.h */, 194 | 0E1C8F672158C71E005EF24B /* MSTabbarViewController.h */, 195 | 0E1C8F682158C71E005EF24B /* MSTabbarViewController.m */, 196 | 0E1C8F652158C719005EF24B /* CenterPresentController.h */, 197 | 0E1C8F642158C719005EF24B /* CenterPresentController.m */, 198 | 0EB5435F24896B7C001F8951 /* MSTabbarDataManager.h */, 199 | 0EB5436024896B7C001F8951 /* MSTabbarDataManager.m */, 200 | 0E1C8F582158C6FF005EF24B /* Item.h */, 201 | 0E1C8F572158C6FF005EF24B /* Item.m */, 202 | 0E1C8F5A2158C6FF005EF24B /* Tabbar.h */, 203 | 0E1C8F592158C6FF005EF24B /* Tabbar.m */, 204 | 0E1C8F5D2158C707005EF24B /* Tool */, 205 | 0E1C8F2A2158C6A9005EF24B /* Resource */, 206 | ); 207 | path = MSRotationTabBar; 208 | sourceTree = ""; 209 | }; 210 | 0E1C8F5D2158C707005EF24B /* Tool */ = { 211 | isa = PBXGroup; 212 | children = ( 213 | 0E1C8F612158C707005EF24B /* Tool.h */, 214 | 0E1C8F5E2158C707005EF24B /* Tool.m */, 215 | 0E1C8F5F2158C707005EF24B /* UIView+Extension.h */, 216 | 0E1C8F632158C707005EF24B /* UIView+Extension.m */, 217 | 0E1C8F622158C707005EF24B /* UIViewController+Extension.h */, 218 | 0E1C8F602158C707005EF24B /* UIViewController+Extension.m */, 219 | ); 220 | path = Tool; 221 | sourceTree = ""; 222 | }; 223 | 70732A61352AA15818F68498 /* Frameworks */ = { 224 | isa = PBXGroup; 225 | children = ( 226 | 58D29B5723145A29DD45A480 /* libPods-MSRotationTabBarDEMO.a */, 227 | ); 228 | name = Frameworks; 229 | path = ../..; 230 | sourceTree = ""; 231 | }; 232 | /* End PBXGroup section */ 233 | 234 | /* Begin PBXNativeTarget section */ 235 | 0E1C8F102158C687005EF24B /* MSRotationTabBarDEMO */ = { 236 | isa = PBXNativeTarget; 237 | buildConfigurationList = 0E1C8F272158C687005EF24B /* Build configuration list for PBXNativeTarget "MSRotationTabBarDEMO" */; 238 | buildPhases = ( 239 | F68F31073DA61F34BAFA62F6 /* [CP] Check Pods Manifest.lock */, 240 | 0E1C8F0D2158C687005EF24B /* Sources */, 241 | 0E1C8F0E2158C687005EF24B /* Frameworks */, 242 | 0E1C8F0F2158C687005EF24B /* Resources */, 243 | ); 244 | buildRules = ( 245 | ); 246 | dependencies = ( 247 | ); 248 | name = MSRotationTabBarDEMO; 249 | productName = MSRotationTabBar; 250 | productReference = 0E1C8F112158C687005EF24B /* MSRotationTabBarDEMO.app */; 251 | productType = "com.apple.product-type.application"; 252 | }; 253 | /* End PBXNativeTarget section */ 254 | 255 | /* Begin PBXProject section */ 256 | 0E1C8F092158C687005EF24B /* Project object */ = { 257 | isa = PBXProject; 258 | attributes = { 259 | LastUpgradeCheck = 0910; 260 | ORGANIZATIONNAME = JZJ; 261 | TargetAttributes = { 262 | 0E1C8F102158C687005EF24B = { 263 | CreatedOnToolsVersion = 9.1; 264 | ProvisioningStyle = Manual; 265 | }; 266 | }; 267 | }; 268 | buildConfigurationList = 0E1C8F0C2158C687005EF24B /* Build configuration list for PBXProject "MSRotationTabBarDEMO" */; 269 | compatibilityVersion = "Xcode 8.0"; 270 | developmentRegion = en; 271 | hasScannedForEncodings = 0; 272 | knownRegions = ( 273 | en, 274 | Base, 275 | ); 276 | mainGroup = 0E1C8F082158C687005EF24B; 277 | productRefGroup = 0E1C8F122158C687005EF24B /* Products */; 278 | projectDirPath = ""; 279 | projectRoot = ""; 280 | targets = ( 281 | 0E1C8F102158C687005EF24B /* MSRotationTabBarDEMO */, 282 | ); 283 | }; 284 | /* End PBXProject section */ 285 | 286 | /* Begin PBXResourcesBuildPhase section */ 287 | 0E1C8F0F2158C687005EF24B /* Resources */ = { 288 | isa = PBXResourcesBuildPhase; 289 | buildActionMask = 2147483647; 290 | files = ( 291 | 0E1C8F4D2158C6A9005EF24B /* tabbar_select_1@2x.png in Resources */, 292 | 0E1C8F4E2158C6A9005EF24B /* tabbar_select_3@3x.png in Resources */, 293 | 0E1C8F702158C917005EF24B /* Assets.xcassets in Resources */, 294 | 0E1C8F472158C6A9005EF24B /* tabbar_0_night_H_24x24_@2x.png in Resources */, 295 | 0E1C8F532158C6A9005EF24B /* tabbar_unselect_4@2x.png in Resources */, 296 | 0E1C8F482158C6A9005EF24B /* tabbar_0_day_N_24x24_@2x.png in Resources */, 297 | 0E1C8F412158C6A9005EF24B /* tabbar_select_2@3x.png in Resources */, 298 | 0E1C8F4F2158C6A9005EF24B /* tabbar_select_3@2x.png in Resources */, 299 | 0E1C8F502158C6A9005EF24B /* tabbar_select_1@3x.png in Resources */, 300 | 0E1C8F432158C6A9005EF24B /* tabbar_unselect_3@3x.png in Resources */, 301 | 0E1C8F4A2158C6A9005EF24B /* tabbar_select_4@2x.png in Resources */, 302 | 0E1C8F452158C6A9005EF24B /* tabbar_unselect_1@3x.png in Resources */, 303 | 0E1C8F4C2158C6A9005EF24B /* tabbar_unselect_2@3x.png in Resources */, 304 | 0E1C8F402158C6A9005EF24B /* tabbar_0_night_H_24x24_@3x.png in Resources */, 305 | 0E1C8F4B2158C6A9005EF24B /* tabbar_0_day_N_24x24_@3x.png in Resources */, 306 | 0E1C8F422158C6A9005EF24B /* tabbar_unselect_1@2x.png in Resources */, 307 | 0E1C8F522158C6A9005EF24B /* tabbar_unselect_4@3x.png in Resources */, 308 | 0E1C8F512158C6A9005EF24B /* tabbar_unselect_2@2x.png in Resources */, 309 | 0E1C8F442158C6A9005EF24B /* tabbar_unselect_3@2x.png in Resources */, 310 | 0E1C8F492158C6A9005EF24B /* tabbar_select_4@3x.png in Resources */, 311 | 0E1C8F462158C6A9005EF24B /* tabbar_select_2@2x.png in Resources */, 312 | 0E1C8F542158C6A9005EF24B /* 44.png in Resources */, 313 | ); 314 | runOnlyForDeploymentPostprocessing = 0; 315 | }; 316 | /* End PBXResourcesBuildPhase section */ 317 | 318 | /* Begin PBXShellScriptBuildPhase section */ 319 | F68F31073DA61F34BAFA62F6 /* [CP] Check Pods Manifest.lock */ = { 320 | isa = PBXShellScriptBuildPhase; 321 | buildActionMask = 2147483647; 322 | files = ( 323 | ); 324 | inputPaths = ( 325 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 326 | "${PODS_ROOT}/Manifest.lock", 327 | ); 328 | name = "[CP] Check Pods Manifest.lock"; 329 | outputPaths = ( 330 | "$(DERIVED_FILE_DIR)/Pods-MSRotationTabBarDEMO-checkManifestLockResult.txt", 331 | ); 332 | runOnlyForDeploymentPostprocessing = 0; 333 | shellPath = /bin/sh; 334 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 335 | showEnvVarsInLog = 0; 336 | }; 337 | /* End PBXShellScriptBuildPhase section */ 338 | 339 | /* Begin PBXSourcesBuildPhase section */ 340 | 0E1C8F0D2158C687005EF24B /* Sources */ = { 341 | isa = PBXSourcesBuildPhase; 342 | buildActionMask = 2147483647; 343 | files = ( 344 | 0E1C8F712158CB35005EF24B /* ViewController.m in Sources */, 345 | 0E1C8F722158CB35005EF24B /* MSTabbarViewController.m in Sources */, 346 | 0E1C8F732158CB35005EF24B /* CenterPresentController.m in Sources */, 347 | 0E1C8F742158CB35005EF24B /* Item.m in Sources */, 348 | 0E1C8F752158CB35005EF24B /* Tabbar.m in Sources */, 349 | 0E1C8F762158CB35005EF24B /* Tool.m in Sources */, 350 | 0E1C8F772158CB35005EF24B /* UIView+Extension.m in Sources */, 351 | 0E1C8F782158CB35005EF24B /* UIViewController+Extension.m in Sources */, 352 | 0E1C8F792158CB35005EF24B /* AppDelegate.m in Sources */, 353 | 0EB5436124896B7C001F8951 /* MSTabbarDataManager.m in Sources */, 354 | 0E1C8F7A2158CB35005EF24B /* main.m in Sources */, 355 | ); 356 | runOnlyForDeploymentPostprocessing = 0; 357 | }; 358 | /* End PBXSourcesBuildPhase section */ 359 | 360 | /* Begin XCBuildConfiguration section */ 361 | 0E1C8F252158C687005EF24B /* Debug */ = { 362 | isa = XCBuildConfiguration; 363 | buildSettings = { 364 | ALWAYS_SEARCH_USER_PATHS = NO; 365 | CLANG_ANALYZER_NONNULL = YES; 366 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 367 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 368 | CLANG_CXX_LIBRARY = "libc++"; 369 | CLANG_ENABLE_MODULES = YES; 370 | CLANG_ENABLE_OBJC_ARC = YES; 371 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 372 | CLANG_WARN_BOOL_CONVERSION = YES; 373 | CLANG_WARN_COMMA = YES; 374 | CLANG_WARN_CONSTANT_CONVERSION = YES; 375 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 376 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 377 | CLANG_WARN_EMPTY_BODY = YES; 378 | CLANG_WARN_ENUM_CONVERSION = YES; 379 | CLANG_WARN_INFINITE_RECURSION = YES; 380 | CLANG_WARN_INT_CONVERSION = YES; 381 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 382 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 383 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 384 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 385 | CLANG_WARN_STRICT_PROTOTYPES = YES; 386 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 387 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 388 | CLANG_WARN_UNREACHABLE_CODE = YES; 389 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 390 | CODE_SIGN_IDENTITY = "iPhone Developer"; 391 | COPY_PHASE_STRIP = NO; 392 | DEBUG_INFORMATION_FORMAT = dwarf; 393 | ENABLE_STRICT_OBJC_MSGSEND = YES; 394 | ENABLE_TESTABILITY = YES; 395 | GCC_C_LANGUAGE_STANDARD = gnu11; 396 | GCC_DYNAMIC_NO_PIC = NO; 397 | GCC_NO_COMMON_BLOCKS = YES; 398 | GCC_OPTIMIZATION_LEVEL = 0; 399 | GCC_PREPROCESSOR_DEFINITIONS = ( 400 | "DEBUG=1", 401 | "$(inherited)", 402 | ); 403 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 404 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 405 | GCC_WARN_UNDECLARED_SELECTOR = YES; 406 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 407 | GCC_WARN_UNUSED_FUNCTION = YES; 408 | GCC_WARN_UNUSED_VARIABLE = YES; 409 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 410 | MTL_ENABLE_DEBUG_INFO = YES; 411 | ONLY_ACTIVE_ARCH = YES; 412 | SDKROOT = iphoneos; 413 | }; 414 | name = Debug; 415 | }; 416 | 0E1C8F262158C687005EF24B /* Release */ = { 417 | isa = XCBuildConfiguration; 418 | buildSettings = { 419 | ALWAYS_SEARCH_USER_PATHS = NO; 420 | CLANG_ANALYZER_NONNULL = YES; 421 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 422 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 423 | CLANG_CXX_LIBRARY = "libc++"; 424 | CLANG_ENABLE_MODULES = YES; 425 | CLANG_ENABLE_OBJC_ARC = YES; 426 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 427 | CLANG_WARN_BOOL_CONVERSION = YES; 428 | CLANG_WARN_COMMA = YES; 429 | CLANG_WARN_CONSTANT_CONVERSION = YES; 430 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 431 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 432 | CLANG_WARN_EMPTY_BODY = YES; 433 | CLANG_WARN_ENUM_CONVERSION = YES; 434 | CLANG_WARN_INFINITE_RECURSION = YES; 435 | CLANG_WARN_INT_CONVERSION = YES; 436 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 437 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 438 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 439 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 440 | CLANG_WARN_STRICT_PROTOTYPES = YES; 441 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 442 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 443 | CLANG_WARN_UNREACHABLE_CODE = YES; 444 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 445 | CODE_SIGN_IDENTITY = "iPhone Developer"; 446 | COPY_PHASE_STRIP = NO; 447 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 448 | ENABLE_NS_ASSERTIONS = NO; 449 | ENABLE_STRICT_OBJC_MSGSEND = YES; 450 | GCC_C_LANGUAGE_STANDARD = gnu11; 451 | GCC_NO_COMMON_BLOCKS = YES; 452 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 453 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 454 | GCC_WARN_UNDECLARED_SELECTOR = YES; 455 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 456 | GCC_WARN_UNUSED_FUNCTION = YES; 457 | GCC_WARN_UNUSED_VARIABLE = YES; 458 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 459 | MTL_ENABLE_DEBUG_INFO = NO; 460 | SDKROOT = iphoneos; 461 | VALIDATE_PRODUCT = YES; 462 | }; 463 | name = Release; 464 | }; 465 | 0E1C8F282158C687005EF24B /* Debug */ = { 466 | isa = XCBuildConfiguration; 467 | baseConfigurationReference = A9958E23CD8D1E4823B33FA7 /* Pods-MSRotationTabBarDEMO.debug.xcconfig */; 468 | buildSettings = { 469 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 470 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 471 | CODE_SIGN_STYLE = Manual; 472 | DEVELOPMENT_TEAM = ""; 473 | GCC_PREFIX_HEADER = "$(SRCROOT)/MSRotationTabBarDEMO/MSRotationTabBar/PrefixHeader.pch"; 474 | INFOPLIST_FILE = "$(SRCROOT)/MSRotationTabBarDEMO/Other/Info.plist"; 475 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 476 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 477 | PRODUCT_BUNDLE_IDENTIFIER = jzj.MSRotationTabBar; 478 | PRODUCT_NAME = "$(TARGET_NAME)"; 479 | PROVISIONING_PROFILE_SPECIFIER = ""; 480 | TARGETED_DEVICE_FAMILY = 1; 481 | }; 482 | name = Debug; 483 | }; 484 | 0E1C8F292158C687005EF24B /* Release */ = { 485 | isa = XCBuildConfiguration; 486 | baseConfigurationReference = FF2B0699262E4E4B56C26C36 /* Pods-MSRotationTabBarDEMO.release.xcconfig */; 487 | buildSettings = { 488 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 489 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 490 | CODE_SIGN_STYLE = Manual; 491 | DEVELOPMENT_TEAM = ""; 492 | GCC_PREFIX_HEADER = "$(SRCROOT)/MSRotationTabBarDEMO/MSRotationTabBar/PrefixHeader.pch"; 493 | INFOPLIST_FILE = "$(SRCROOT)/MSRotationTabBarDEMO/Other/Info.plist"; 494 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 495 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 496 | PRODUCT_BUNDLE_IDENTIFIER = jzj.MSRotationTabBar; 497 | PRODUCT_NAME = "$(TARGET_NAME)"; 498 | PROVISIONING_PROFILE_SPECIFIER = ""; 499 | TARGETED_DEVICE_FAMILY = 1; 500 | }; 501 | name = Release; 502 | }; 503 | /* End XCBuildConfiguration section */ 504 | 505 | /* Begin XCConfigurationList section */ 506 | 0E1C8F0C2158C687005EF24B /* Build configuration list for PBXProject "MSRotationTabBarDEMO" */ = { 507 | isa = XCConfigurationList; 508 | buildConfigurations = ( 509 | 0E1C8F252158C687005EF24B /* Debug */, 510 | 0E1C8F262158C687005EF24B /* Release */, 511 | ); 512 | defaultConfigurationIsVisible = 0; 513 | defaultConfigurationName = Release; 514 | }; 515 | 0E1C8F272158C687005EF24B /* Build configuration list for PBXNativeTarget "MSRotationTabBarDEMO" */ = { 516 | isa = XCConfigurationList; 517 | buildConfigurations = ( 518 | 0E1C8F282158C687005EF24B /* Debug */, 519 | 0E1C8F292158C687005EF24B /* Release */, 520 | ); 521 | defaultConfigurationIsVisible = 0; 522 | defaultConfigurationName = Release; 523 | }; 524 | /* End XCConfigurationList section */ 525 | }; 526 | rootObject = 0E1C8F092158C687005EF24B /* Project object */; 527 | } 528 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/CenterPresentController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PlanController.h 3 | // DEMO 4 | // 5 | // Created by J on 16/3/8. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CenterPresentController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/CenterPresentController.m: -------------------------------------------------------------------------------- 1 | // 2 | // PlanController.m 3 | // DEMO 4 | // 5 | // Created by J on 16/3/8. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #import "CenterPresentController.h" 10 | 11 | @interface CenterPresentController () 12 | 13 | @end 14 | 15 | @implementation CenterPresentController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | self.view.backgroundColor = [UIColor purpleColor]; 20 | } 21 | 22 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 23 | [self dismissViewControllerAnimated:YES completion:nil]; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Header.h 3 | // DEMO 4 | // 5 | // Created by 姜自佳 on 2017/5/28. 6 | // Copyright © 2017年 J. All rights reserved. 7 | // 8 | 9 | #ifndef Header_h 10 | #define Header_h 11 | 12 | #import "MSBlockButton.h" 13 | 14 | #endif /* Header_h */ 15 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Item.h: -------------------------------------------------------------------------------- 1 | // 2 | // Item.h 3 | // DEMO 4 | // 5 | // Created by J on 15/3/7. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface Item : UIButton 12 | @property (nonatomic, strong) UITabBarItem *tabBarItem; 13 | @property (nonatomic, strong) UILabel *badgeView; 14 | 15 | + (instancetype)itemWithFrame:(CGRect)frame; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Item.m: -------------------------------------------------------------------------------- 1 | // 2 | // Item.m 3 | // DEMO 4 | // 5 | // Created by J on 15/3/7. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #import "Item.h" 10 | #import "UIView+Extension.h" 11 | 12 | @implementation Item 13 | 14 | + (instancetype)itemWithFrame:(CGRect)frame{ 15 | Item * item= [Item buttonWithType:UIButtonTypeCustom]; 16 | item.frame = frame; 17 | 18 | item.titleLabel.font = [UIFont systemFontOfSize:10]; 19 | [item setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal]; 20 | 21 | item.imageView.contentMode = UIViewContentModeCenter; 22 | [item setImageEdgeInsets:UIEdgeInsetsZero]; 23 | item.titleLabel.textAlignment = NSTextAlignmentCenter; 24 | 25 | item.titleLabel.width = item.width; 26 | item.titleLabel.height = 20; 27 | return item; 28 | } 29 | 30 | 31 | 32 | 33 | - (void)dealloc { 34 | 35 | [self.tabBarItem removeObserver:self forKeyPath:@"badgeValue"]; 36 | [self.tabBarItem removeObserver:self forKeyPath:@"title"]; 37 | [self.tabBarItem removeObserver:self forKeyPath:@"image"]; 38 | [self.tabBarItem removeObserver:self forKeyPath:@"selectedImage"]; 39 | } 40 | 41 | - (void)setTabBarItem:(UITabBarItem *)tabBarItem { 42 | _tabBarItem = tabBarItem; 43 | 44 | [tabBarItem addObserver:self forKeyPath:@"badgeValue" options:0 context:nil]; 45 | [tabBarItem addObserver:self forKeyPath:@"title" options:0 context:nil]; 46 | [tabBarItem addObserver:self forKeyPath:@"image" options:0 context:nil]; 47 | [tabBarItem addObserver:self forKeyPath:@"selectedImage" options:0 context:nil]; 48 | [self observeValueForKeyPath:nil ofObject:nil change:nil context:nil]; 49 | } 50 | 51 | 52 | - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 53 | [self setTitle:self.tabBarItem.title forState:UIControlStateNormal]; 54 | [self setImage:self.tabBarItem.image forState:UIControlStateNormal]; 55 | [self setImage:self.tabBarItem.selectedImage forState:UIControlStateSelected]; 56 | 57 | if([keyPath isEqualToString:@"badgeValue"]){ 58 | NSString* badgeValue = [NSString stringWithFormat:@"%@",change[NSKeyValueChangeNewKey]]; 59 | self.badgeView.hidden = !badgeValue.length; 60 | self.badgeView.text = badgeValue; 61 | } 62 | } 63 | 64 | 65 | 66 | - (void)layoutSubviews{ 67 | [super layoutSubviews]; 68 | self.imageView.size = CGSizeMake(27, 27); 69 | self.imageView.centerX = self.width*0.5; 70 | self.titleLabel.centerX = self.width*0.5; 71 | self.titleLabel.height = 15; 72 | self.titleLabel.y = self.imageView.size.height+4; 73 | self.imageView.y = 6; 74 | } 75 | @end 76 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/JZJTabbarViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // DEMO 4 | // 5 | // Created by J on 16/3/7. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface JZJTabbarViewController : UITabBarController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/JZJTabbarViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // DEMO 4 | // 5 | // Created by J on 16/3/7. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | 10 | 11 | #import "JZJTabbarViewController.h" 12 | #import "CenterPresentController.h" 13 | 14 | #import "Tabbar.h" 15 | 16 | 17 | @interface JZJTabbarViewController () 18 | @end 19 | 20 | @implementation JZJTabbarViewController 21 | 22 | - (void)viewDidLoad { 23 | [super viewDidLoad]; 24 | [self addChildViewController]; 25 | [self setupTabbar]; 26 | } 27 | 28 | - (void)addChildViewController{ 29 | NSArray* titleArray = @[@"首页", 30 | @"论坛", 31 | @"易计划", 32 | @"聊天", 33 | @"我的"]; 34 | 35 | NSArray* imageArray = @[@"tabbar_unselect_0", 36 | @"tabbar_unselect_1", 37 | @"", 38 | @"tabbar_unselect_3", 39 | @"tabbar_unselect_4"]; 40 | 41 | NSArray* imageArraySelected = @[@"tabbar_select_0", 42 | @"tabbar_select_1", 43 | @"", 44 | @"tabbar_select_3", 45 | @"tabbar_select_4"]; 46 | NSInteger i = 0; 47 | for (NSString* title in titleArray) { 48 | UIViewController* vc = [UIViewController new]; 49 | vc.tabBarItem = [UITabBarItem new]; 50 | vc.title = title; 51 | vc.tabBarItem.image = [UIImage imageNamed:imageArray[i]]; 52 | vc.tabBarItem.selectedImage = [UIImage imageNamed:imageArraySelected[i]]; 53 | [self addChildViewController:vc]; 54 | i++; 55 | } 56 | } 57 | 58 | 59 | - (void)setupTabbar{ 60 | Tabbar* tabbar = [Tabbar new]; 61 | [self setTabbar:tabbar]; 62 | [tabbar setSelectCenterItemBlock:^{ 63 | [self presentViewController:[CenterPresentController new] animated:YES completion:nil]; 64 | }]; 65 | [tabbar addTarbbarItemWithViewControllers:self.childViewControllers]; 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/MSTabbarDataManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // MSTabbarDataManager.h 3 | // MSRotationTabBarDEMO 4 | // 5 | // Created by jzj on 5/6/2020. 6 | // Copyright © 2020 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MSTabbarDataManager : NSObject 14 | 15 | 16 | - (NSArray*)titleArray; 17 | 18 | - (NSArray*)imageArray; 19 | 20 | - (NSArray*)imageArraySelected; 21 | 22 | 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/MSTabbarDataManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // MSTabbarDataManager.m 3 | // MSRotationTabBarDEMO 4 | // 5 | // Created by jzj on 5/6/2020. 6 | // Copyright © 2020 JZJ. All rights reserved. 7 | // 8 | 9 | #import "MSTabbarDataManager.h" 10 | 11 | @implementation MSTabbarDataManager 12 | 13 | 14 | - (NSArray*)titleArray{ 15 | return @[@"首页", 16 | @"论坛", 17 | @"易计划", 18 | @"聊天", 19 | @"我的"]; 20 | } 21 | 22 | - (NSArray*)imageArray{ 23 | return @[@"tabbar_unselect_0", 24 | @"tabbar_unselect_1", 25 | @"", 26 | @"tabbar_unselect_3", 27 | @"tabbar_unselect_4"]; 28 | 29 | } 30 | 31 | - (NSArray*)imageArraySelected{ 32 | return @[@"tabbar_select_0", 33 | @"tabbar_select_1", 34 | @"", 35 | @"tabbar_select_3", 36 | @"tabbar_select_4"]; 37 | 38 | } 39 | 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/MSTabbarViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // DEMO 4 | // 5 | // Created by J on 16/3/7. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MSTabbarViewController : UITabBarController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/MSTabbarViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // DEMO 4 | // 5 | // Created by J on 16/3/7. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | 10 | 11 | #import "MSTabbarViewController.h" 12 | #import "CenterPresentController.h" 13 | 14 | #import "MSTabbarDataManager.h" 15 | #import "Tabbar.h" 16 | 17 | @interface MSTabbarViewController () 18 | @property(nonatomic,strong)MSTabbarDataManager * dataManager; 19 | @end 20 | 21 | @implementation MSTabbarViewController 22 | 23 | - (void)viewDidLoad { 24 | [super viewDidLoad]; 25 | [self addChildViewController]; 26 | [self setupTabbar]; 27 | } 28 | 29 | - (void)addChildViewController{ 30 | 31 | 32 | NSInteger i = 0; 33 | for (NSString* title in self.dataManager.titleArray) { 34 | UIViewController* vc = [UIViewController new]; 35 | vc.tabBarItem = [UITabBarItem new]; 36 | vc.title = title; 37 | vc.tabBarItem.image = [UIImage imageNamed:self.dataManager.imageArray[i]]; 38 | vc.tabBarItem.selectedImage = [UIImage imageNamed:self.dataManager.imageArraySelected[i]]; 39 | [self addChildViewController:vc]; 40 | i++; 41 | } 42 | } 43 | 44 | 45 | - (void)setupTabbar{ 46 | Tabbar* tabbar = [Tabbar new]; 47 | [self setTabbar:tabbar]; 48 | [tabbar setSelectCenterItemBlock:^{ 49 | [self presentViewController:[CenterPresentController new] animated:YES completion:nil]; 50 | }]; 51 | [tabbar addTarbbarItemWithViewControllers:self.childViewControllers]; 52 | } 53 | 54 | #pragma mark --lazy 55 | 56 | -(MSTabbarDataManager *)dataManager{ 57 | if(!_dataManager){ 58 | _dataManager = [MSTabbarDataManager new]; 59 | } 60 | return _dataManager;; 61 | } 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/PrefixHeader.pch: -------------------------------------------------------------------------------- 1 | // 2 | // PrefixHeader.pch 3 | // DEMO 4 | // 5 | // Created by J on 16/3/8. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #ifndef PrefixHeader_pch 10 | #define PrefixHeader_pch 11 | 12 | #import "UIView+Extension.h" 13 | #import "UIViewController+Extension.h" 14 | #import "Tool.h" 15 | 16 | #define kBeginTag 10000 17 | #define kTopHeight (49+64) 18 | #define kWidth [UIScreen mainScreen].bounds.size.width 19 | #define kHeight [UIScreen mainScreen].bounds.size.height 20 | 21 | static NSInteger const kCenterItemTag = 10002; 22 | static NSInteger const kbadgeViewTag = 20000; 23 | static CGFloat const kDuration = 0.5; 24 | static NSString* const kCenterIcon = @"tabbar_select_2.png"; 25 | static NSString* const kAnimationKey = @"transform.rotation.y"; 26 | static NSString* const kLayoutSubviewsKey = @"UITabBarButton"; 27 | 28 | 29 | #endif /* PrefixHeader_pch */ 30 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/44.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_0_day_N_24x24_@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_0_day_N_24x24_@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_0_day_N_24x24_@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_0_day_N_24x24_@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_0_night_H_24x24_@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_0_night_H_24x24_@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_0_night_H_24x24_@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_0_night_H_24x24_@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_1@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_1@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_2@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_2@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_3@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_3@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_4@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_4@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_select_4@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_1@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_1@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_2@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_2@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_3@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_3@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_4@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_4@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/MSRotationTabBar/Resource/tabbar_unselect_4@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Tabbar.h: -------------------------------------------------------------------------------- 1 | // 2 | // Tabbar.h 3 | // DEMO 4 | // 5 | // Created by J on 15/3/7. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | 10 | 11 | #import 12 | #import "UIView+Extension.h" 13 | @class Tabbar; 14 | 15 | @protocol TabbarDelegate 16 | - (void)tabBarDidSelectCenterItem:(Tabbar *)tabBar ; 17 | @end 18 | 19 | @interface Tabbar : UITabBar 20 | @property(nonatomic,copy)dispatch_block_t selectCenterItemBlock; 21 | @property(nonatomic, weak) id selectDelegate; 22 | @property(nonatomic, copy) NSString *centerButtonImage; 23 | @property(nonatomic,assign) CGFloat centerButtonTopMargin; 24 | @property(nonatomic,assign) CGSize centerButtonSize; 25 | 26 | 27 | - (void)addTarbbarItemWithViewControllers:(NSArray*)viewControllers; 28 | 29 | @end 30 | 31 | 32 | @interface UITabBarController(Tabbar) 33 | - (Tabbar*)setTabbar:(UITabBar *)tabbar; 34 | @end 35 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Tabbar.m: -------------------------------------------------------------------------------- 1 | // 2 | // Tabbar.m 3 | // DEMO 4 | // 5 | // Created by J on 15/3/7. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | 10 | #import "Header.h" 11 | #import "Tabbar.h" 12 | #import "Item.h" 13 | 14 | @interface UIView(RatationAnimation) 15 | - (void)rotation; 16 | @end 17 | 18 | 19 | @interface Tabbar() 20 | @property(nonatomic,assign) NSUInteger index; 21 | @property(nonatomic,strong) UIButton *button; 22 | @property(nonatomic,strong) UIButton *centerButton; 23 | @property(nonatomic,strong) NSMutableArray *buttonsArray; 24 | 25 | @end 26 | 27 | @implementation Tabbar 28 | 29 | - (void)didMoveToSuperview{ 30 | [self centerButton]; 31 | } 32 | 33 | 34 | - (void)addTarbbarItemWithViewControllers:(NSArray*)childViewControllers{ 35 | if(![childViewControllers isKindOfClass:[NSArray class]]){ 36 | return; 37 | } 38 | [childViewControllers enumerateObjectsUsingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 39 | UITabBarItem* tabbarItem = obj.tabBarItem; 40 | Item* item = [self createNormalButtonWithIndex:idx items:childViewControllers]; 41 | item.tabBarItem = tabbarItem; 42 | }]; 43 | } 44 | 45 | 46 | 47 | - (void)addAnimation:(UIButton*)button{ 48 | 49 | [button.imageView rotation]; 50 | [button.titleLabel rotation]; 51 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(kDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 52 | self.index = button.tag; 53 | self.button.selected = NO; 54 | self.button = button; 55 | button.selected = YES; 56 | }); 57 | } 58 | 59 | 60 | 61 | 62 | - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent*)event { 63 | UIView *view = [super hitTest:point withEvent:event]; 64 | if (view == nil) { 65 | for (UIView *subView in self.subviews) { 66 | CGPoint tp = [subView convertPoint:point fromView:self]; 67 | if (CGRectContainsPoint(subView.bounds, tp)) { 68 | view = subView; 69 | CGPoint tp = [subView convertPoint:point fromView:self]; 70 | if (CGRectContainsPoint(subView.bounds, tp)) { 71 | view = subView; 72 | } 73 | } 74 | } 75 | } 76 | return view; 77 | } 78 | 79 | 80 | 81 | 82 | - (void)layoutSubviews{ 83 | [super layoutSubviews]; 84 | for (UIView* badgeView in self.subviews) { 85 | if ([badgeView isKindOfClass:[UIImageView class]]) { 86 | [self insertSubview:badgeView atIndex:0]; 87 | } 88 | 89 | [self bringSubviewToFront:self.centerButton]; 90 | 91 | if ([badgeView isKindOfClass:NSClassFromString(kLayoutSubviewsKey)]) { 92 | badgeView.hidden = YES; 93 | } 94 | } 95 | } 96 | 97 | 98 | 99 | - (UIView*)createBadgeViewWithIndex:(NSInteger)i item:(Item*)item{ 100 | //badgeView 101 | UILabel* badgeView = [[UILabel alloc]init]; 102 | badgeView.hidden=!badgeView.text.length; 103 | badgeView.textAlignment = NSTextAlignmentCenter; 104 | badgeView.textColor = [UIColor whiteColor]; 105 | badgeView.tag = kbadgeViewTag+i; 106 | badgeView.font = [UIFont systemFontOfSize:7]; 107 | badgeView.size = CGSizeMake(15, 15); 108 | badgeView.origin = CGPointMake(CGRectGetMaxX(item.imageView.frame)-badgeView.width*0.5, item.imageView.y-badgeView.height*0.3); 109 | badgeView.backgroundColor = [UIColor redColor]; 110 | badgeView.layer.cornerRadius = badgeView.height*0.5; 111 | badgeView.layer.masksToBounds = YES; 112 | return badgeView; 113 | } 114 | 115 | 116 | #pragma mark -- centerButton 117 | - (void)setCenterButtonSize:(CGSize)centerButtonSize{ 118 | _centerButtonSize = centerButtonSize; 119 | self.centerButton.size = self.centerButton.currentBackgroundImage.size; 120 | } 121 | 122 | - (void)setCenterButtonImage:(NSString *)centerButtonImage{ 123 | _centerButtonImage = centerButtonImage; 124 | [self.centerButton setBackgroundImage:[UIImage imageNamed:centerButtonImage] forState:UIControlStateNormal]; 125 | 126 | } 127 | 128 | - (void)setCenterButtonTopMargin:(CGFloat)centerButtonTopMargin{ 129 | if(centerButtonTopMargin>0){ 130 | return; 131 | } 132 | _centerButtonTopMargin = centerButtonTopMargin; 133 | self.centerButton.y = _centerButtonTopMargin; 134 | } 135 | 136 | - (UIButton *)centerButton{ 137 | 138 | if(!_centerButton){ 139 | 140 | UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom]; 141 | [button setBackgroundImage:[UIImage imageNamed:kCenterIcon] forState:UIControlStateNormal]; 142 | 143 | button.adjustsImageWhenHighlighted = NO; 144 | button.size = CGSizeMake(42, 42); 145 | 146 | button.tag = kCenterItemTag; 147 | button.size = button.size; 148 | button.centerX = self.centerX; 149 | button.y = -12; 150 | 151 | [self addSubview:button]; 152 | 153 | __weak __typeof(&*self)weakSelf = self; 154 | 155 | [button handleTouchUpInsideEventWithBlock:^(UIButton *sender) { 156 | if (weakSelf.selectCenterItemBlock) { 157 | weakSelf.selectCenterItemBlock(); 158 | } 159 | 160 | if([weakSelf.selectDelegate respondsToSelector:@selector(tabBarDidSelectCenterItem:)]){ 161 | [weakSelf.selectDelegate tabBarDidSelectCenterItem:self]; 162 | } 163 | }]; 164 | _centerButton = button; 165 | } 166 | return _centerButton; 167 | } 168 | 169 | 170 | - (Item*)createNormalButtonWithIndex:(NSInteger)i items:(NSArray*)items{ 171 | 172 | 173 | CGSize size = CGSizeMake(kWidth*1.0/items.count, self.height); 174 | CGFloat x = self.width*1.0/items.count*i; 175 | Item* item = [Item itemWithFrame:(CGRect){{x,0},size}]; 176 | item.centerX = size.width*0.5 + size.width*i; 177 | 178 | if(item.centerX == kWidth/2.0){ 179 | item.enabled = NO; 180 | } 181 | 182 | item.tag = kBeginTag + i; 183 | 184 | 185 | [item handleEvent:UIControlEventTouchDown withBlock:^(UIButton *sender) { 186 | 187 | 188 | [self.class cancelPreviousPerformRequestsWithTarget:self]; 189 | [self performSelector:@selector(performSelecte:) withObject:sender afterDelay:0.2]; 190 | 191 | }]; 192 | 193 | [self.buttonsArray addObject:item]; 194 | [self addSubview:item]; 195 | [self createBadgeViewWithIndex:i item:item]; 196 | 197 | return item; 198 | } 199 | 200 | 201 | - (void)performSelecte:(Item*)sender{ 202 | sender.badgeView.hidden = YES; 203 | NSInteger index = sender.tag-kBeginTag; 204 | 205 | 206 | UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window]; 207 | UITabBarController *tabBarController = (UITabBarController *)keyWindow.rootViewController; 208 | if (tabBarController) { 209 | tabBarController.selectedIndex = index; 210 | } 211 | 212 | 213 | 214 | 215 | [self addAnimation:sender]; 216 | } 217 | 218 | 219 | - (NSMutableArray *)buttonsArray{ 220 | if(!_buttonsArray){ 221 | _buttonsArray = [NSMutableArray array]; 222 | } 223 | return _buttonsArray; 224 | } 225 | @end 226 | 227 | #pragma mark -- animationCategory 228 | @implementation UIView(RatationAnimation) 229 | 230 | - (void)rotation{ 231 | 232 | CABasicAnimation* rotationAnimation; 233 | rotationAnimation = [CABasicAnimation animationWithKeyPath:kAnimationKey]; 234 | rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 ]; 235 | rotationAnimation.duration = kDuration; 236 | 237 | [self.layer addAnimation:rotationAnimation forKey:nil]; 238 | } 239 | 240 | @end 241 | 242 | #pragma mark -- setTabbar 243 | 244 | @implementation UITabBarController(Tabbar) 245 | 246 | - (Tabbar*)setTabbar:(UITabBar *)tabbar{ 247 | 248 | [self setValue:tabbar forKeyPath:@"tabBar"]; 249 | return (Tabbar*)self.tabBar; 250 | } 251 | 252 | @end 253 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Tool/Tool.h: -------------------------------------------------------------------------------- 1 | // 2 | // Tool.h 3 | // DEMO 4 | // 5 | // Created by J on 16/3/11. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface Tool : NSObject 12 | 13 | + (UIButton*)buttonWithFrame:(CGRect)frame titleNormal:(NSString*)title titleHilight:(NSString*)title backgroundImageNormal:(NSString*)image 14 | backgroundImageHighlight:(NSString*)hilight backgroundColcor:(UIColor*)color target:(id)target selector:(SEL)selector; 15 | 16 | 17 | + (UIButton*)buttonWithFrame:(CGRect)frame titleNormal:(NSString*)title titleSelected:(NSString*)title imageNormal:(NSString*)image imageSelected:(NSString*)selectedImage titleColorNormal:(UIColor*)normalTitleColor titleSelectedColor:(UIColor*)titleSelectedColor 18 | backgroundColcor:(UIColor*)color target:(id)target selector:(SEL)selector; 19 | @end 20 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Tool/Tool.m: -------------------------------------------------------------------------------- 1 | // 2 | // Tool.m 3 | // DEMO 4 | // 5 | // Created by J on 16/3/11. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #import "Tool.h" 10 | 11 | @implementation Tool 12 | 13 | + (UIButton*)buttonWithFrame:(CGRect)frame titleNormal:(NSString*)titleNormal titleHilight:(NSString*)titleHilighted backgroundImageNormal:(NSString*)imageNomal 14 | backgroundImageHighlight:(NSString*)imageHilight backgroundColcor:(UIColor*)color target:(id)target selector:(SEL)selector{ 15 | 16 | UIButton*button = [UIButton buttonWithType:UIButtonTypeCustom]; 17 | [button setBackgroundImage:[UIImage imageNamed:imageNomal] forState:UIControlStateNormal]; 18 | [button setBackgroundImage:[UIImage imageNamed:imageHilight] forState:UIControlStateHighlighted]; 19 | [button setTitle:titleNormal forState:UIControlStateNormal]; 20 | [button setTitle:titleHilighted forState:UIControlStateHighlighted]; 21 | [button setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal]; 22 | [button setTitleColor:[UIColor lightGrayColor] forState:UIControlStateHighlighted]; 23 | 24 | button.titleLabel.font = [UIFont systemFontOfSize:10]; 25 | button.frame = frame; 26 | button.backgroundColor = color; 27 | [button addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside]; 28 | return button; 29 | } 30 | 31 | 32 | + (UIButton*)buttonWithFrame:(CGRect)frame titleNormal:(NSString*)title titleSelected:(NSString*)titleSelected imageNormal:(NSString*)image imageSelected:(NSString*)selectedImage titleColorNormal:(UIColor*)normalTitleColor titleSelectedColor:(UIColor*)titleSelectedColor 33 | backgroundColcor:(UIColor*)color target:(id)target selector:(SEL)selector{ 34 | UIButton*button = [UIButton buttonWithType:UIButtonTypeCustom]; 35 | [button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal]; 36 | [button setTitle:title forState:UIControlStateNormal]; 37 | [button setTitle:titleSelected forState:UIControlStateSelected]; 38 | 39 | [button setImage:[UIImage imageNamed:image] forState:UIControlStateNormal]; 40 | [button setImage:[UIImage imageNamed:selectedImage] forState:UIControlStateSelected]; 41 | [button setTitleColor:normalTitleColor forState:UIControlStateNormal]; 42 | [button setTitleColor:titleSelectedColor forState:UIControlStateSelected]; 43 | 44 | button.titleLabel.font = [UIFont systemFontOfSize:10]; 45 | button.frame = frame; 46 | button.backgroundColor = color; 47 | [button addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside]; 48 | return button; 49 | } 50 | @end 51 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Tool/UIView+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Extension.h 3 | // 4 | // 5 | // Created by J on 15/11/18. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @interface UIView (Extension)//分类只能扩充方法 并不能生成_x等变量 12 | @property (nonatomic,assign) CGFloat x; 13 | @property (nonatomic,assign) CGFloat centerX; 14 | @property (nonatomic,assign) CGFloat centerY; 15 | 16 | 17 | @property (nonatomic,assign) CGFloat y; 18 | @property (nonatomic,assign) CGFloat width; 19 | @property (nonatomic,assign) CGFloat height; 20 | @property (nonatomic,assign) CGSize size; 21 | @property (nonatomic,assign) CGPoint origin; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Tool/UIView+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Extension.m 3 | // 4 | // 5 | // Created by J on 15/11/18. 6 | // 7 | // 8 | 9 | #import "UIView+Extension.h" 10 | 11 | @implementation UIView (Extension) 12 | 13 | - (void)setX:(CGFloat)x{ 14 | CGRect frame = self.frame; 15 | frame.origin.x = x; 16 | self.frame = frame; 17 | } 18 | 19 | - (void)setY:(CGFloat)y{ 20 | CGRect frame = self.frame; 21 | frame.origin.y = y; 22 | self.frame = frame; 23 | } 24 | 25 | 26 | 27 | - (CGFloat)centerX{ 28 | return self.center.x; 29 | } 30 | 31 | - (void)setCenterX:(CGFloat)centerX{ 32 | CGPoint center = self.center; 33 | center.x = centerX; 34 | self.center = center; 35 | } 36 | 37 | 38 | 39 | - (void)setCenterY:(CGFloat)centerY{ 40 | CGPoint center = self.center; 41 | center.y = centerY; 42 | self.center = center; 43 | } 44 | 45 | 46 | - (CGFloat)centerY{ 47 | return self.center.y; 48 | } 49 | 50 | 51 | - (CGFloat)x{ 52 | return self.frame.origin.x; 53 | } 54 | 55 | - (CGFloat)y 56 | { 57 | return self.frame.origin.y; 58 | 59 | } 60 | - (void)setWidth:(CGFloat)width{ 61 | 62 | CGRect frame = self.frame; 63 | frame.size.width = width; 64 | self.frame = frame; 65 | 66 | } 67 | 68 | - (void)setHeight:(CGFloat)height{ 69 | 70 | CGRect frame = self.frame; 71 | frame.size.height = height; 72 | self.frame = frame; 73 | 74 | } 75 | 76 | - (CGFloat)height{ 77 | return self.frame.size.height; 78 | } 79 | 80 | - (CGFloat)width{ 81 | return self.frame.size.width; 82 | } 83 | 84 | 85 | - (void)setSize:(CGSize)size{ 86 | CGRect frame = self.frame; 87 | frame.size = size; 88 | self.frame = frame; 89 | 90 | } 91 | 92 | - (CGSize)size{ 93 | 94 | return self.frame.size; 95 | } 96 | 97 | 98 | - (void)setOrigin:(CGPoint)origin{ 99 | 100 | CGRect frame = self.frame; 101 | frame.origin = origin; 102 | self.frame = frame; 103 | 104 | 105 | } 106 | 107 | 108 | - (CGPoint)origin{ 109 | 110 | return self.frame.origin; 111 | } 112 | 113 | @end 114 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Tool/UIViewController+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+Extension.h 3 | // DEMO 4 | // 5 | // Created by J on 16/3/13. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIViewController (Extension) 12 | - (void)badgeValue:(NSString*)badgeValue; 13 | @end 14 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/MSRotationTabBar/Tool/UIViewController+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+Extension.m 3 | // DEMO 4 | // 5 | // Created by J on 16/3/13. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #import "UIViewController+Extension.h" 10 | 11 | @implementation UIViewController (Extension) 12 | 13 | -(void)badgeValue:(NSString *)badgeValue{ 14 | for (NSUInteger i =0; i2?20000+i+1:20000+i]; 18 | label.text = badgeValue; 19 | label.hidden = !badgeValue.length; 20 | } 21 | } 22 | } 23 | 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // MSRotationTabBar 4 | // 5 | // Created by JZJ on 2018/9/24. 6 | // Copyright © 2018年 JZJ. 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 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // MSRotationTabBar 4 | // 5 | // Created by JZJ on 2018/9/24. 6 | // Copyright © 2018年 JZJ. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "MSTabbarViewController.h" 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 18 | 19 | self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; 20 | MSTabbarViewController* rootViewController = [MSTabbarViewController new]; 21 | rootViewController.view.backgroundColor = [UIColor whiteColor]; 22 | self.window.rootViewController = rootViewController; 23 | [self.window makeKeyAndVisible]; 24 | return YES; 25 | } 26 | 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "icon-20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "icon-20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "icon-29.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "icon-29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "icon-29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "icon-40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "icon-40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "57x57", 47 | "idiom" : "iphone", 48 | "filename" : "icon-57.png", 49 | "scale" : "1x" 50 | }, 51 | { 52 | "size" : "57x57", 53 | "idiom" : "iphone", 54 | "filename" : "icon-57@2x.png", 55 | "scale" : "2x" 56 | }, 57 | { 58 | "size" : "60x60", 59 | "idiom" : "iphone", 60 | "filename" : "icon-60@2x.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "60x60", 65 | "idiom" : "iphone", 66 | "filename" : "icon-60@3x.png", 67 | "scale" : "3x" 68 | }, 69 | { 70 | "size" : "20x20", 71 | "idiom" : "ipad", 72 | "filename" : "icon-20-ipad.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "20x20", 77 | "idiom" : "ipad", 78 | "filename" : "icon-20@2x-ipad.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "29x29", 83 | "idiom" : "ipad", 84 | "filename" : "icon-29-ipad.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "29x29", 89 | "idiom" : "ipad", 90 | "filename" : "icon-29@2x-ipad.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "40x40", 95 | "idiom" : "ipad", 96 | "filename" : "icon-40.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "40x40", 101 | "idiom" : "ipad", 102 | "filename" : "icon-40@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "50x50", 107 | "idiom" : "ipad", 108 | "filename" : "icon-50.png", 109 | "scale" : "1x" 110 | }, 111 | { 112 | "size" : "50x50", 113 | "idiom" : "ipad", 114 | "filename" : "icon-50@2x.png", 115 | "scale" : "2x" 116 | }, 117 | { 118 | "size" : "72x72", 119 | "idiom" : "ipad", 120 | "filename" : "icon-72.png", 121 | "scale" : "1x" 122 | }, 123 | { 124 | "size" : "72x72", 125 | "idiom" : "ipad", 126 | "filename" : "icon-72@2x.png", 127 | "scale" : "2x" 128 | }, 129 | { 130 | "size" : "76x76", 131 | "idiom" : "ipad", 132 | "filename" : "icon-76.png", 133 | "scale" : "1x" 134 | }, 135 | { 136 | "size" : "76x76", 137 | "idiom" : "ipad", 138 | "filename" : "icon-76@2x.png", 139 | "scale" : "2x" 140 | }, 141 | { 142 | "size" : "83.5x83.5", 143 | "idiom" : "ipad", 144 | "filename" : "icon-83.5@2x.png", 145 | "scale" : "2x" 146 | }, 147 | { 148 | "size" : "1024x1024", 149 | "idiom" : "ios-marketing", 150 | "filename" : "icon-1024@2x.png", 151 | "scale" : "1x" 152 | } 153 | ], 154 | "info" : { 155 | "version" : 1, 156 | "author" : "xcode" 157 | } 158 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-1024@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-1024@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-29.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-50.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-57.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-72.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitWOSBiOS56_768x1004pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitWOSBiOS56_768x1004pt.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitWOSBiOS56_768x1004pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitWOSBiOS56_768x1004pt@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS56_768x1024pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS56_768x1024pt.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS56_768x1024pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS56_768x1024pt@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS789_768x1024pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS789_768x1024pt.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS789_768x1024pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS789_768x1024pt@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x480pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x480pt.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x480pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x480pt@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x568pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x568pt@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS789_320x480pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS789_320x480pt@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS789_320x568pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS789_320x568pt@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS89_375x667pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS89_375x667pt@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS89_414x736pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS89_414x736pt@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "extent" : "full-screen", 5 | "idiom" : "iphone", 6 | "subtype" : "736h", 7 | "filename" : "1024iPhonePortraitiOS89_414x736pt@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" : "1024iPhonePortraitiOS89_375x667pt@2x.png", 17 | "minimum-system-version" : "8.0", 18 | "orientation" : "portrait", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "orientation" : "portrait", 23 | "idiom" : "iphone", 24 | "filename" : "1024iPhonePortraitiOS789_320x480pt@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" : "1024iPhonePortraitiOS789_320x568pt@2x.png", 34 | "minimum-system-version" : "7.0", 35 | "orientation" : "portrait", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "orientation" : "portrait", 40 | "idiom" : "ipad", 41 | "filename" : "1024iPadPortraitiOS789_768x1024pt.png", 42 | "extent" : "full-screen", 43 | "minimum-system-version" : "7.0", 44 | "scale" : "1x" 45 | }, 46 | { 47 | "orientation" : "portrait", 48 | "idiom" : "ipad", 49 | "filename" : "1024iPadPortraitiOS789_768x1024pt@2x.png", 50 | "extent" : "full-screen", 51 | "minimum-system-version" : "7.0", 52 | "scale" : "2x" 53 | }, 54 | { 55 | "orientation" : "portrait", 56 | "idiom" : "iphone", 57 | "filename" : "1024iPhonePortraitiOS56_320x480pt.png", 58 | "extent" : "full-screen", 59 | "scale" : "1x" 60 | }, 61 | { 62 | "orientation" : "portrait", 63 | "idiom" : "iphone", 64 | "filename" : "1024iPhonePortraitiOS56_320x480pt@2x.png", 65 | "extent" : "full-screen", 66 | "scale" : "2x" 67 | }, 68 | { 69 | "orientation" : "portrait", 70 | "idiom" : "iphone", 71 | "filename" : "1024iPhonePortraitiOS56_320x568pt@2x.png", 72 | "extent" : "full-screen", 73 | "subtype" : "retina4", 74 | "scale" : "2x" 75 | }, 76 | { 77 | "orientation" : "portrait", 78 | "idiom" : "ipad", 79 | "filename" : "1024iPadPortraitWOSBiOS56_768x1004pt.png", 80 | "extent" : "to-status-bar", 81 | "scale" : "1x" 82 | }, 83 | { 84 | "orientation" : "portrait", 85 | "idiom" : "ipad", 86 | "filename" : "1024iPadPortraitiOS56_768x1024pt.png", 87 | "extent" : "full-screen", 88 | "scale" : "1x" 89 | }, 90 | { 91 | "orientation" : "portrait", 92 | "idiom" : "ipad", 93 | "filename" : "1024iPadPortraitWOSBiOS56_768x1004pt@2x.png", 94 | "extent" : "to-status-bar", 95 | "scale" : "2x" 96 | }, 97 | { 98 | "orientation" : "portrait", 99 | "idiom" : "ipad", 100 | "filename" : "1024iPadPortraitiOS56_768x1024pt@2x.png", 101 | "extent" : "full-screen", 102 | "scale" : "2x" 103 | } 104 | ], 105 | "info" : { 106 | "version" : 1, 107 | "author" : "xcode" 108 | } 109 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbarButtonBG.imageset/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbarButtonBG.imageset/44.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbarButtonBG.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "44.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_0_night_H_24x24_@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tabbar_0_night_H_24x24_@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_0.imageset/tabbar_0_night_H_24x24_@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_0.imageset/tabbar_0_night_H_24x24_@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_0.imageset/tabbar_0_night_H_24x24_@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_0.imageset/tabbar_0_night_H_24x24_@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_select_1@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tabbar_select_1@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_1.imageset/tabbar_select_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_1.imageset/tabbar_select_1@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_1.imageset/tabbar_select_1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_1.imageset/tabbar_select_1@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_select_2@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tabbar_select_2@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_2.imageset/tabbar_select_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_2.imageset/tabbar_select_2@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_2.imageset/tabbar_select_2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_2.imageset/tabbar_select_2@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_select_3@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tabbar_select_3@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_3.imageset/tabbar_select_3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_3.imageset/tabbar_select_3@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_3.imageset/tabbar_select_3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_3.imageset/tabbar_select_3@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_select_4@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tabbar_select_4@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_4.imageset/tabbar_select_4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_4.imageset/tabbar_select_4@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_4.imageset/tabbar_select_4@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_select_4.imageset/tabbar_select_4@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_0_day_N_24x24_@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tabbar_0_day_N_24x24_@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_0.imageset/tabbar_0_day_N_24x24_@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_0.imageset/tabbar_0_day_N_24x24_@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_0.imageset/tabbar_0_day_N_24x24_@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_0.imageset/tabbar_0_day_N_24x24_@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_unselect_1@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tabbar_unselect_1@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_1.imageset/tabbar_unselect_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_1.imageset/tabbar_unselect_1@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_1.imageset/tabbar_unselect_1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_1.imageset/tabbar_unselect_1@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_unselect_2@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tabbar_unselect_2@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_2.imageset/tabbar_unselect_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_2.imageset/tabbar_unselect_2@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_2.imageset/tabbar_unselect_2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_2.imageset/tabbar_unselect_2@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_unselect_3@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tabbar_unselect_3@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_3.imageset/tabbar_unselect_3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_3.imageset/tabbar_unselect_3@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_3.imageset/tabbar_unselect_3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_3.imageset/tabbar_unselect_3@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_unselect_4@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tabbar_unselect_4@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_4.imageset/tabbar_unselect_4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_4.imageset/tabbar_unselect_4@2x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_4.imageset/tabbar_unselect_4@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sureJiang/MSRotationTabBar/a1e7b3ddebe0191e4c3df592aad5d6134c431b1e/MSRotationTabBarDEMO/Other/Assets.xcassets/tabbar/tabbar_unselect_4.imageset/tabbar_unselect_4@3x.png -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/Other/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIRequiredDeviceCapabilities 26 | 27 | armv7 28 | 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | 33 | UISupportedInterfaceOrientations~ipad 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationPortraitUpsideDown 37 | UIInterfaceOrientationLandscapeLeft 38 | UIInterfaceOrientationLandscapeRight 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // MSRotationTabBar 4 | // 5 | // Created by JZJ on 2018/9/24. 6 | // Copyright © 2018年 JZJ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // MSRotationTabBar 4 | // 5 | // Created by JZJ on 2018/9/24. 6 | // Copyright © 2018年 JZJ. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | 11 | @interface ViewController () 12 | 13 | @end 14 | 15 | @implementation ViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view, typically from a nib. 20 | } 21 | 22 | 23 | - (void)didReceiveMemoryWarning { 24 | [super didReceiveMemoryWarning]; 25 | // Dispose of any resources that can be recreated. 26 | } 27 | 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /MSRotationTabBarDEMO/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // MSRotationTabBar 4 | // 5 | // Created by JZJ on 2018/9/24. 6 | // Copyright © 2018年 JZJ. 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 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'MSRotationTabBarDEMO' do 5 | # Uncomment the next line if you're using Swift or would like to use dynamic frameworks 6 | # use_frameworks! 7 | 8 | pod 'MSBlockButton' 9 | # Pods for MSRotationTabBarDEMO 10 | 11 | end 12 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - MSBlockButton (1.0.0) 3 | 4 | DEPENDENCIES: 5 | - MSBlockButton 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - MSBlockButton 10 | 11 | SPEC CHECKSUMS: 12 | MSBlockButton: 82586bc44af34f329d1642b277186a17d3899b42 13 | 14 | PODFILE CHECKSUM: 39865b5e12889968ed3da3e1f87761515a19a715 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Pods/Headers/Private/MSBlockButton/MSBlockButton.h: -------------------------------------------------------------------------------- 1 | ../../../MSBlockButton/MSBlockButton/MSBlockButton.h -------------------------------------------------------------------------------- /Pods/Headers/Private/MSBlockButton/UIButton+MSBlocks.h: -------------------------------------------------------------------------------- 1 | ../../../MSBlockButton/MSBlockButton/UIButton+MSBlocks.h -------------------------------------------------------------------------------- /Pods/Headers/Public/MSBlockButton/MSBlockButton.h: -------------------------------------------------------------------------------- 1 | ../../../MSBlockButton/MSBlockButton/MSBlockButton.h -------------------------------------------------------------------------------- /Pods/Headers/Public/MSBlockButton/UIButton+MSBlocks.h: -------------------------------------------------------------------------------- 1 | ../../../MSBlockButton/MSBlockButton/UIButton+MSBlocks.h -------------------------------------------------------------------------------- /Pods/MSBlockButton/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/MSBlockButton/MSBlockButton/MSBlockButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // MSBlockButton.h 3 | // 4 | // 5 | // Created by J on 2017/3/7. 6 | // Copyright © 2017年 J. All rights reserved. 7 | // 8 | 9 | #ifndef MSBlockButton_h 10 | #define MSBlockButton_h 11 | 12 | #import "UIButton+MSBlocks.h" 13 | 14 | 15 | #endif /* MSBlockButton_h */ 16 | -------------------------------------------------------------------------------- /Pods/MSBlockButton/MSBlockButton/UIButton+MSBlocks.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIButton+MSBlocks.h 3 | // 4 | // 5 | // Created by J on 16/5/27. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #import 10 | typedef void (^ActionBlock)(UIButton* sender); 11 | 12 | @interface UIButton (MSBlocks) 13 | 14 | -(void)handleEvent:(UIControlEvents)aEvent withBlock:(ActionBlock)block; 15 | 16 | 17 | /// default UIControlEventTouchUpInside 18 | -(void)handleTouchUpInsideEventWithBlock:(ActionBlock)block; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Pods/MSBlockButton/MSBlockButton/UIButton+MSBlocks.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIButton+MSBlocks.m 3 | // 4 | // 5 | // Created by J on 16/5/27. 6 | // Copyright © 2016年 J. All rights reserved. 7 | // 8 | 9 | #import "UIButton+MSBlocks.h" 10 | #import 11 | static char *overViewKey; 12 | 13 | @implementation UIButton (MSBlocks) 14 | 15 | 16 | -(void)handleTouchUpInsideEventWithBlock:(ActionBlock)buttonClickEvent{ 17 | 18 | [self handleEvent:UIControlEventTouchUpInside withBlock:buttonClickEvent]; 19 | } 20 | 21 | -(void)handleEvent:(UIControlEvents)aEvent withBlock:(ActionBlock)buttonClickEvent{ 22 | 23 | objc_setAssociatedObject(self, &overViewKey, buttonClickEvent, OBJC_ASSOCIATION_COPY_NONATOMIC); 24 | [self addTarget:self action:@selector(click) forControlEvents:aEvent]; 25 | } 26 | 27 | -(void)click{ 28 | 29 | ActionBlock block = objc_getAssociatedObject(self, &overViewKey); 30 | if (block != nil){ 31 | 32 | block(self); 33 | } 34 | } 35 | 36 | 37 | 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Pods/MSBlockButton/README.md: -------------------------------------------------------------------------------- 1 | # MSBlockButton 2 | 3 | [![platform](http://img.shields.io/cocoapods/p/YYKit.svg?style=flat)](https://www.apple.com/nl/ios/) 4 | [![GitHub license](https://img.shields.io/github/license/mashape/apistatus.svg?style=flat)](https://github.com/JZJJZJ/UIButton-Blocks/blob/master/LICENSE) 5 | [![CocoaPods](http://img.shields.io/cocoapods/v/YYKit.svg?style=flat)](http://cocoapods.org/?q=UIButton%2BBlocks) 6 | 7 | 8 | An UIButton Category replace SEL with Block. 9 | 10 | 11 | ## Features 12 | 13 | - block syntax 14 | 15 | ## Installation 16 | 17 | ### Cocoapods(Recommended) 18 | 19 | 1. Add `pod 'MSBlockButton'` to your Podfile. 20 | 2. Run `pod install` 21 | 22 | ### Manual 23 | 24 | 1. Add all files under `MSBlockButton ` to your project 25 | 26 | ## Requirements 27 | 28 | - iOS 5.0 and greater 29 | - ARC/MRC 30 | 31 | 32 | ## How To Use 33 | 34 | ### Objective-C 35 | 36 | ```objc 37 | 38 | #import "MSBlockButton.h" 39 | 40 | CGFloat width = [UIScreen mainScreen].bounds.size.width; 41 | UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom]; 42 | button.frame = CGRectMake((width-100)*0.5, (width-100)*0.5, 100, 100); 43 | [self.view addSubview:button]; 44 | 45 | button.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.8]; 46 | [button setTitle:@"Blocks" forState:UIControlStateNormal]; 47 | 48 | [button handleTouchUpInsideEventWithBlock:^(UIButton *sender) { 49 | NSLog(@"%s",__func__); 50 | 51 | }]; 52 | 53 | ``` 54 | 55 | 56 | ### Swift 57 | You can use MSBlockButton in Swift projects too. 58 | To do this, you must: 59 | 1. Copy the relevant .m and .h files from the MSBlockButton src folder into your project 60 | 2. If prompted to create a "bridging header", you should do so. If not prompted and if you don't already have a bridging header, add one. 61 | 62 | For more information on bridging headers, see [Swift and Objective-C in the Same Project](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_76). 63 | 64 | 3. In your bridging header, add a line that says: 65 | 66 | ```objc 67 |    #import "MSBlockButton.h" 68 | ``` 69 | 70 | If you do the above, you can then write Swift code that uses MSBlockButton. For example, in Swift 3.0 : 71 | 72 | 73 | 74 | ```swift 75 | 76 | 77 | let btn = UIButton(frame: CGRect(origin: CGPoint.zero, size: CGSize(width: 100, height: 100))) 78 | btn.center = view.center 79 | btn.backgroundColor = UIColor.purple 80 | btn.setTitle("SwiftVC", for: UIControlState.normal) 81 | view.addSubview(btn) 82 | 83 | btn.handleTouchUpInsideEvent { (btn:UIButton?) in 84 | print("\("SwiftViewController") \(#function)") 85 | 86 | } 87 | ``` 88 | 89 | 90 | 91 | 92 | ## Credits 93 | 94 | MSBlockButton was created by [Jiang.Zijia](https://github.com/JZJJZJ) in the development of [MOMO](https://www.immomo.com). 95 | 96 | ## License 97 | 98 | MSBlockButton is available under the MIT license. See the LICENSE file for more info. 99 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - MSBlockButton (1.0.0) 3 | 4 | DEPENDENCIES: 5 | - MSBlockButton 6 | 7 | SPEC REPOS: 8 | https://github.com/cocoapods/specs.git: 9 | - MSBlockButton 10 | 11 | SPEC CHECKSUMS: 12 | MSBlockButton: 82586bc44af34f329d1642b277186a17d3899b42 13 | 14 | PODFILE CHECKSUM: 39865b5e12889968ed3da3e1f87761515a19a715 15 | 16 | COCOAPODS: 1.5.3 17 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 271B79FEFFCFE3FC3AB2497E2DF4A84A /* MSBlockButton-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C505EC5C8AC3CC49EDE2016E4C990BE /* MSBlockButton-dummy.m */; }; 11 | 6F7E2B0BB6DEDCE6DC8B805FB2207EF3 /* UIButton+MSBlocks.h in Headers */ = {isa = PBXBuildFile; fileRef = E2B2C591071D412C3689D473CB0E9194 /* UIButton+MSBlocks.h */; settings = {ATTRIBUTES = (Project, ); }; }; 12 | A9882A7888EDACD62D81574BB3D6CD22 /* MSBlockButton.h in Headers */ = {isa = PBXBuildFile; fileRef = D8D19522D8082E7C7C8EB9934E28843A /* MSBlockButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; 13 | E6455110C8307C64B16195939DCAE5F0 /* Pods-MSRotationTabBarDEMO-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F2A4B883684CD9653C37EDB91E816F28 /* Pods-MSRotationTabBarDEMO-dummy.m */; }; 14 | F1DCD93EC901EE2E6435D06E6DE4F48C /* UIButton+MSBlocks.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE5E348C43438CA70F842C97246AAFC /* UIButton+MSBlocks.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 15 | /* End PBXBuildFile section */ 16 | 17 | /* Begin PBXContainerItemProxy section */ 18 | A430A8D447300E79D8AE25D2A02ED76B /* PBXContainerItemProxy */ = { 19 | isa = PBXContainerItemProxy; 20 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 21 | proxyType = 1; 22 | remoteGlobalIDString = 2420CC20EE73DF911AA5C13181BA540E; 23 | remoteInfo = MSBlockButton; 24 | }; 25 | /* End PBXContainerItemProxy section */ 26 | 27 | /* Begin PBXFileReference section */ 28 | 05FBA8F5D01D218FFBE017E5F9EB3B98 /* Pods-MSRotationTabBarDEMO.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MSRotationTabBarDEMO.debug.xcconfig"; sourceTree = ""; }; 29 | 1EE1F486120C367698E2B09459127191 /* MSBlockButton.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MSBlockButton.xcconfig; sourceTree = ""; }; 30 | 332E7333A615001CEE1E1B15B0C553A9 /* MSBlockButton-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MSBlockButton-prefix.pch"; sourceTree = ""; }; 31 | 3CA119F75B0BC5AD91547521C7001501 /* libMSBlockButton.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMSBlockButton.a; sourceTree = BUILT_PRODUCTS_DIR; }; 32 | 3D2A49A9615FC4E3917807B32327CD44 /* Pods-MSRotationTabBarDEMO-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MSRotationTabBarDEMO-frameworks.sh"; sourceTree = ""; }; 33 | 436C6A9B5CB5D0D0D484C226C1BDA9E2 /* libPods-MSRotationTabBarDEMO.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MSRotationTabBarDEMO.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 34 | 6814F3568A28A557139EBBDDED9239B7 /* Pods-MSRotationTabBarDEMO-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MSRotationTabBarDEMO-resources.sh"; sourceTree = ""; }; 35 | 6C505EC5C8AC3CC49EDE2016E4C990BE /* MSBlockButton-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MSBlockButton-dummy.m"; sourceTree = ""; }; 36 | 6FE5E348C43438CA70F842C97246AAFC /* UIButton+MSBlocks.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+MSBlocks.m"; path = "MSBlockButton/UIButton+MSBlocks.m"; sourceTree = ""; }; 37 | 8148D1DC8B191D4BEC79F1E627083815 /* Pods-MSRotationTabBarDEMO.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MSRotationTabBarDEMO.release.xcconfig"; sourceTree = ""; }; 38 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 39 | B133A29A1934BACB584C7607886292D1 /* Pods-MSRotationTabBarDEMO-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MSRotationTabBarDEMO-acknowledgements.markdown"; sourceTree = ""; }; 40 | D8D19522D8082E7C7C8EB9934E28843A /* MSBlockButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MSBlockButton.h; path = MSBlockButton/MSBlockButton.h; sourceTree = ""; }; 41 | E2B2C591071D412C3689D473CB0E9194 /* UIButton+MSBlocks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+MSBlocks.h"; path = "MSBlockButton/UIButton+MSBlocks.h"; sourceTree = ""; }; 42 | F2A4B883684CD9653C37EDB91E816F28 /* Pods-MSRotationTabBarDEMO-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MSRotationTabBarDEMO-dummy.m"; sourceTree = ""; }; 43 | FEE74562D07889800F671C868F94464A /* Pods-MSRotationTabBarDEMO-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MSRotationTabBarDEMO-acknowledgements.plist"; sourceTree = ""; }; 44 | /* End PBXFileReference section */ 45 | 46 | /* Begin PBXFrameworksBuildPhase section */ 47 | 0898F0C66B15F58643167DE06E647BFC /* Frameworks */ = { 48 | isa = PBXFrameworksBuildPhase; 49 | buildActionMask = 2147483647; 50 | files = ( 51 | ); 52 | runOnlyForDeploymentPostprocessing = 0; 53 | }; 54 | A8EBEDFF43398595FEB3236F5153CD0D /* Frameworks */ = { 55 | isa = PBXFrameworksBuildPhase; 56 | buildActionMask = 2147483647; 57 | files = ( 58 | ); 59 | runOnlyForDeploymentPostprocessing = 0; 60 | }; 61 | /* End PBXFrameworksBuildPhase section */ 62 | 63 | /* Begin PBXGroup section */ 64 | 0F8D2E47FE03D3B91B51069F7C273AF4 /* Frameworks */ = { 65 | isa = PBXGroup; 66 | children = ( 67 | ); 68 | name = Frameworks; 69 | sourceTree = ""; 70 | }; 71 | 0FCF5F819BFB1563E95DA3D84EA1CCDF /* Products */ = { 72 | isa = PBXGroup; 73 | children = ( 74 | 3CA119F75B0BC5AD91547521C7001501 /* libMSBlockButton.a */, 75 | 436C6A9B5CB5D0D0D484C226C1BDA9E2 /* libPods-MSRotationTabBarDEMO.a */, 76 | ); 77 | name = Products; 78 | sourceTree = ""; 79 | }; 80 | 2722984BE127D7E267B10FA0C8A156FC /* Pods */ = { 81 | isa = PBXGroup; 82 | children = ( 83 | 73ABFEF64D98190EE8CD0006AB96430D /* MSBlockButton */, 84 | ); 85 | name = Pods; 86 | sourceTree = ""; 87 | }; 88 | 5A50D47F6F7F6948042A11B80C1491FF /* Support Files */ = { 89 | isa = PBXGroup; 90 | children = ( 91 | 1EE1F486120C367698E2B09459127191 /* MSBlockButton.xcconfig */, 92 | 6C505EC5C8AC3CC49EDE2016E4C990BE /* MSBlockButton-dummy.m */, 93 | 332E7333A615001CEE1E1B15B0C553A9 /* MSBlockButton-prefix.pch */, 94 | ); 95 | name = "Support Files"; 96 | path = "../Target Support Files/MSBlockButton"; 97 | sourceTree = ""; 98 | }; 99 | 72FAD29AF1606BCE0070EED9879A2D07 /* Targets Support Files */ = { 100 | isa = PBXGroup; 101 | children = ( 102 | D3DE08032412D3766196BC4EEBC28CB0 /* Pods-MSRotationTabBarDEMO */, 103 | ); 104 | name = "Targets Support Files"; 105 | sourceTree = ""; 106 | }; 107 | 73ABFEF64D98190EE8CD0006AB96430D /* MSBlockButton */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | D8D19522D8082E7C7C8EB9934E28843A /* MSBlockButton.h */, 111 | E2B2C591071D412C3689D473CB0E9194 /* UIButton+MSBlocks.h */, 112 | 6FE5E348C43438CA70F842C97246AAFC /* UIButton+MSBlocks.m */, 113 | 5A50D47F6F7F6948042A11B80C1491FF /* Support Files */, 114 | ); 115 | path = MSBlockButton; 116 | sourceTree = ""; 117 | }; 118 | 7DB346D0F39D3F0E887471402A8071AB = { 119 | isa = PBXGroup; 120 | children = ( 121 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 122 | 0F8D2E47FE03D3B91B51069F7C273AF4 /* Frameworks */, 123 | 2722984BE127D7E267B10FA0C8A156FC /* Pods */, 124 | 0FCF5F819BFB1563E95DA3D84EA1CCDF /* Products */, 125 | 72FAD29AF1606BCE0070EED9879A2D07 /* Targets Support Files */, 126 | ); 127 | sourceTree = ""; 128 | }; 129 | D3DE08032412D3766196BC4EEBC28CB0 /* Pods-MSRotationTabBarDEMO */ = { 130 | isa = PBXGroup; 131 | children = ( 132 | B133A29A1934BACB584C7607886292D1 /* Pods-MSRotationTabBarDEMO-acknowledgements.markdown */, 133 | FEE74562D07889800F671C868F94464A /* Pods-MSRotationTabBarDEMO-acknowledgements.plist */, 134 | F2A4B883684CD9653C37EDB91E816F28 /* Pods-MSRotationTabBarDEMO-dummy.m */, 135 | 3D2A49A9615FC4E3917807B32327CD44 /* Pods-MSRotationTabBarDEMO-frameworks.sh */, 136 | 6814F3568A28A557139EBBDDED9239B7 /* Pods-MSRotationTabBarDEMO-resources.sh */, 137 | 05FBA8F5D01D218FFBE017E5F9EB3B98 /* Pods-MSRotationTabBarDEMO.debug.xcconfig */, 138 | 8148D1DC8B191D4BEC79F1E627083815 /* Pods-MSRotationTabBarDEMO.release.xcconfig */, 139 | ); 140 | name = "Pods-MSRotationTabBarDEMO"; 141 | path = "Target Support Files/Pods-MSRotationTabBarDEMO"; 142 | sourceTree = ""; 143 | }; 144 | /* End PBXGroup section */ 145 | 146 | /* Begin PBXHeadersBuildPhase section */ 147 | 68E97A2A547523B70B847156B43EC780 /* Headers */ = { 148 | isa = PBXHeadersBuildPhase; 149 | buildActionMask = 2147483647; 150 | files = ( 151 | A9882A7888EDACD62D81574BB3D6CD22 /* MSBlockButton.h in Headers */, 152 | 6F7E2B0BB6DEDCE6DC8B805FB2207EF3 /* UIButton+MSBlocks.h in Headers */, 153 | ); 154 | runOnlyForDeploymentPostprocessing = 0; 155 | }; 156 | 92A7CA36D1C954F812DA449FEF7DB3EB /* Headers */ = { 157 | isa = PBXHeadersBuildPhase; 158 | buildActionMask = 2147483647; 159 | files = ( 160 | ); 161 | runOnlyForDeploymentPostprocessing = 0; 162 | }; 163 | /* End PBXHeadersBuildPhase section */ 164 | 165 | /* Begin PBXNativeTarget section */ 166 | 2420CC20EE73DF911AA5C13181BA540E /* MSBlockButton */ = { 167 | isa = PBXNativeTarget; 168 | buildConfigurationList = 4B0B0576EDDFE9D1CE31D4D085DBD646 /* Build configuration list for PBXNativeTarget "MSBlockButton" */; 169 | buildPhases = ( 170 | 68E97A2A547523B70B847156B43EC780 /* Headers */, 171 | 4D35C14F5FC0728813DE8A5C109F5DC5 /* Sources */, 172 | A8EBEDFF43398595FEB3236F5153CD0D /* Frameworks */, 173 | ); 174 | buildRules = ( 175 | ); 176 | dependencies = ( 177 | ); 178 | name = MSBlockButton; 179 | productName = MSBlockButton; 180 | productReference = 3CA119F75B0BC5AD91547521C7001501 /* libMSBlockButton.a */; 181 | productType = "com.apple.product-type.library.static"; 182 | }; 183 | E06D1CE4330166B569C5A26656F14588 /* Pods-MSRotationTabBarDEMO */ = { 184 | isa = PBXNativeTarget; 185 | buildConfigurationList = 78479828C6863C70B13F4AA54726CDFA /* Build configuration list for PBXNativeTarget "Pods-MSRotationTabBarDEMO" */; 186 | buildPhases = ( 187 | 92A7CA36D1C954F812DA449FEF7DB3EB /* Headers */, 188 | FFA37728C1B10AF44A823066E976EE80 /* Sources */, 189 | 0898F0C66B15F58643167DE06E647BFC /* Frameworks */, 190 | ); 191 | buildRules = ( 192 | ); 193 | dependencies = ( 194 | C9F8B01004BFC875051E477075F982F8 /* PBXTargetDependency */, 195 | ); 196 | name = "Pods-MSRotationTabBarDEMO"; 197 | productName = "Pods-MSRotationTabBarDEMO"; 198 | productReference = 436C6A9B5CB5D0D0D484C226C1BDA9E2 /* libPods-MSRotationTabBarDEMO.a */; 199 | productType = "com.apple.product-type.library.static"; 200 | }; 201 | /* End PBXNativeTarget section */ 202 | 203 | /* Begin PBXProject section */ 204 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 205 | isa = PBXProject; 206 | attributes = { 207 | LastSwiftUpdateCheck = 0930; 208 | LastUpgradeCheck = 0930; 209 | }; 210 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 211 | compatibilityVersion = "Xcode 3.2"; 212 | developmentRegion = English; 213 | hasScannedForEncodings = 0; 214 | knownRegions = ( 215 | en, 216 | ); 217 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 218 | productRefGroup = 0FCF5F819BFB1563E95DA3D84EA1CCDF /* Products */; 219 | projectDirPath = ""; 220 | projectRoot = ""; 221 | targets = ( 222 | 2420CC20EE73DF911AA5C13181BA540E /* MSBlockButton */, 223 | E06D1CE4330166B569C5A26656F14588 /* Pods-MSRotationTabBarDEMO */, 224 | ); 225 | }; 226 | /* End PBXProject section */ 227 | 228 | /* Begin PBXSourcesBuildPhase section */ 229 | 4D35C14F5FC0728813DE8A5C109F5DC5 /* Sources */ = { 230 | isa = PBXSourcesBuildPhase; 231 | buildActionMask = 2147483647; 232 | files = ( 233 | 271B79FEFFCFE3FC3AB2497E2DF4A84A /* MSBlockButton-dummy.m in Sources */, 234 | F1DCD93EC901EE2E6435D06E6DE4F48C /* UIButton+MSBlocks.m in Sources */, 235 | ); 236 | runOnlyForDeploymentPostprocessing = 0; 237 | }; 238 | FFA37728C1B10AF44A823066E976EE80 /* Sources */ = { 239 | isa = PBXSourcesBuildPhase; 240 | buildActionMask = 2147483647; 241 | files = ( 242 | E6455110C8307C64B16195939DCAE5F0 /* Pods-MSRotationTabBarDEMO-dummy.m in Sources */, 243 | ); 244 | runOnlyForDeploymentPostprocessing = 0; 245 | }; 246 | /* End PBXSourcesBuildPhase section */ 247 | 248 | /* Begin PBXTargetDependency section */ 249 | C9F8B01004BFC875051E477075F982F8 /* PBXTargetDependency */ = { 250 | isa = PBXTargetDependency; 251 | name = MSBlockButton; 252 | target = 2420CC20EE73DF911AA5C13181BA540E /* MSBlockButton */; 253 | targetProxy = A430A8D447300E79D8AE25D2A02ED76B /* PBXContainerItemProxy */; 254 | }; 255 | /* End PBXTargetDependency section */ 256 | 257 | /* Begin XCBuildConfiguration section */ 258 | 469A8FC6CC38C84949DD9CD7F302B1BD /* Debug */ = { 259 | isa = XCBuildConfiguration; 260 | baseConfigurationReference = 05FBA8F5D01D218FFBE017E5F9EB3B98 /* Pods-MSRotationTabBarDEMO.debug.xcconfig */; 261 | buildSettings = { 262 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 263 | CLANG_ENABLE_OBJC_WEAK = NO; 264 | CODE_SIGN_IDENTITY = "iPhone Developer"; 265 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 266 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 267 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 268 | IPHONEOS_DEPLOYMENT_TARGET = 11.1; 269 | MACH_O_TYPE = staticlib; 270 | OTHER_LDFLAGS = ""; 271 | OTHER_LIBTOOLFLAGS = ""; 272 | PODS_ROOT = "$(SRCROOT)"; 273 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 274 | SDKROOT = iphoneos; 275 | SKIP_INSTALL = YES; 276 | TARGETED_DEVICE_FAMILY = "1,2"; 277 | }; 278 | name = Debug; 279 | }; 280 | 5E226FB425A8162429E27308BF78CB5A /* Debug */ = { 281 | isa = XCBuildConfiguration; 282 | baseConfigurationReference = 1EE1F486120C367698E2B09459127191 /* MSBlockButton.xcconfig */; 283 | buildSettings = { 284 | CODE_SIGN_IDENTITY = "iPhone Developer"; 285 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 286 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 287 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 288 | GCC_PREFIX_HEADER = "Target Support Files/MSBlockButton/MSBlockButton-prefix.pch"; 289 | IPHONEOS_DEPLOYMENT_TARGET = 5.0; 290 | OTHER_LDFLAGS = ""; 291 | OTHER_LIBTOOLFLAGS = ""; 292 | PRIVATE_HEADERS_FOLDER_PATH = ""; 293 | PRODUCT_MODULE_NAME = MSBlockButton; 294 | PRODUCT_NAME = MSBlockButton; 295 | PUBLIC_HEADERS_FOLDER_PATH = ""; 296 | SDKROOT = iphoneos; 297 | SKIP_INSTALL = YES; 298 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 299 | TARGETED_DEVICE_FAMILY = "1,2"; 300 | }; 301 | name = Debug; 302 | }; 303 | 704076628A33C7080D9167229766965F /* Release */ = { 304 | isa = XCBuildConfiguration; 305 | baseConfigurationReference = 1EE1F486120C367698E2B09459127191 /* MSBlockButton.xcconfig */; 306 | buildSettings = { 307 | CODE_SIGN_IDENTITY = "iPhone Developer"; 308 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 309 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 310 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 311 | GCC_PREFIX_HEADER = "Target Support Files/MSBlockButton/MSBlockButton-prefix.pch"; 312 | IPHONEOS_DEPLOYMENT_TARGET = 5.0; 313 | OTHER_LDFLAGS = ""; 314 | OTHER_LIBTOOLFLAGS = ""; 315 | PRIVATE_HEADERS_FOLDER_PATH = ""; 316 | PRODUCT_MODULE_NAME = MSBlockButton; 317 | PRODUCT_NAME = MSBlockButton; 318 | PUBLIC_HEADERS_FOLDER_PATH = ""; 319 | SDKROOT = iphoneos; 320 | SKIP_INSTALL = YES; 321 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 322 | TARGETED_DEVICE_FAMILY = "1,2"; 323 | VALIDATE_PRODUCT = YES; 324 | }; 325 | name = Release; 326 | }; 327 | 872B93308B7A5038EF49B69C36BE1983 /* Release */ = { 328 | isa = XCBuildConfiguration; 329 | baseConfigurationReference = 8148D1DC8B191D4BEC79F1E627083815 /* Pods-MSRotationTabBarDEMO.release.xcconfig */; 330 | buildSettings = { 331 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 332 | CLANG_ENABLE_OBJC_WEAK = NO; 333 | CODE_SIGN_IDENTITY = "iPhone Developer"; 334 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 335 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 336 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 337 | IPHONEOS_DEPLOYMENT_TARGET = 11.1; 338 | MACH_O_TYPE = staticlib; 339 | OTHER_LDFLAGS = ""; 340 | OTHER_LIBTOOLFLAGS = ""; 341 | PODS_ROOT = "$(SRCROOT)"; 342 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 343 | SDKROOT = iphoneos; 344 | SKIP_INSTALL = YES; 345 | TARGETED_DEVICE_FAMILY = "1,2"; 346 | VALIDATE_PRODUCT = YES; 347 | }; 348 | name = Release; 349 | }; 350 | 90801340DB97DA2D6643DE3ECC36F95F /* Release */ = { 351 | isa = XCBuildConfiguration; 352 | buildSettings = { 353 | ALWAYS_SEARCH_USER_PATHS = NO; 354 | CLANG_ANALYZER_NONNULL = YES; 355 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 356 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 357 | CLANG_CXX_LIBRARY = "libc++"; 358 | CLANG_ENABLE_MODULES = YES; 359 | CLANG_ENABLE_OBJC_ARC = YES; 360 | CLANG_ENABLE_OBJC_WEAK = YES; 361 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 362 | CLANG_WARN_BOOL_CONVERSION = YES; 363 | CLANG_WARN_COMMA = YES; 364 | CLANG_WARN_CONSTANT_CONVERSION = YES; 365 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 366 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 367 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 368 | CLANG_WARN_EMPTY_BODY = YES; 369 | CLANG_WARN_ENUM_CONVERSION = YES; 370 | CLANG_WARN_INFINITE_RECURSION = YES; 371 | CLANG_WARN_INT_CONVERSION = YES; 372 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 373 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 374 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 375 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 376 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 377 | CLANG_WARN_STRICT_PROTOTYPES = YES; 378 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 379 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 380 | CLANG_WARN_UNREACHABLE_CODE = YES; 381 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 382 | CODE_SIGNING_ALLOWED = NO; 383 | CODE_SIGNING_REQUIRED = NO; 384 | COPY_PHASE_STRIP = NO; 385 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 386 | ENABLE_NS_ASSERTIONS = NO; 387 | ENABLE_STRICT_OBJC_MSGSEND = YES; 388 | GCC_C_LANGUAGE_STANDARD = gnu11; 389 | GCC_NO_COMMON_BLOCKS = YES; 390 | GCC_PREPROCESSOR_DEFINITIONS = ( 391 | "POD_CONFIGURATION_RELEASE=1", 392 | "$(inherited)", 393 | ); 394 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 395 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 396 | GCC_WARN_UNDECLARED_SELECTOR = YES; 397 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 398 | GCC_WARN_UNUSED_FUNCTION = YES; 399 | GCC_WARN_UNUSED_VARIABLE = YES; 400 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 401 | MTL_ENABLE_DEBUG_INFO = NO; 402 | MTL_FAST_MATH = YES; 403 | PRODUCT_NAME = "$(TARGET_NAME)"; 404 | STRIP_INSTALLED_PRODUCT = NO; 405 | SYMROOT = "${SRCROOT}/../build"; 406 | }; 407 | name = Release; 408 | }; 409 | A610193BC95AA1FBE8D125DF9AD72C9D /* Debug */ = { 410 | isa = XCBuildConfiguration; 411 | buildSettings = { 412 | ALWAYS_SEARCH_USER_PATHS = NO; 413 | CLANG_ANALYZER_NONNULL = YES; 414 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 415 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 416 | CLANG_CXX_LIBRARY = "libc++"; 417 | CLANG_ENABLE_MODULES = YES; 418 | CLANG_ENABLE_OBJC_ARC = YES; 419 | CLANG_ENABLE_OBJC_WEAK = YES; 420 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 421 | CLANG_WARN_BOOL_CONVERSION = YES; 422 | CLANG_WARN_COMMA = YES; 423 | CLANG_WARN_CONSTANT_CONVERSION = YES; 424 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 425 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 426 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 427 | CLANG_WARN_EMPTY_BODY = YES; 428 | CLANG_WARN_ENUM_CONVERSION = YES; 429 | CLANG_WARN_INFINITE_RECURSION = YES; 430 | CLANG_WARN_INT_CONVERSION = YES; 431 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 432 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 433 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 434 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 435 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 436 | CLANG_WARN_STRICT_PROTOTYPES = YES; 437 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 438 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 439 | CLANG_WARN_UNREACHABLE_CODE = YES; 440 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 441 | CODE_SIGNING_ALLOWED = NO; 442 | CODE_SIGNING_REQUIRED = NO; 443 | COPY_PHASE_STRIP = NO; 444 | DEBUG_INFORMATION_FORMAT = dwarf; 445 | ENABLE_STRICT_OBJC_MSGSEND = YES; 446 | ENABLE_TESTABILITY = YES; 447 | GCC_C_LANGUAGE_STANDARD = gnu11; 448 | GCC_DYNAMIC_NO_PIC = NO; 449 | GCC_NO_COMMON_BLOCKS = YES; 450 | GCC_OPTIMIZATION_LEVEL = 0; 451 | GCC_PREPROCESSOR_DEFINITIONS = ( 452 | "POD_CONFIGURATION_DEBUG=1", 453 | "DEBUG=1", 454 | "$(inherited)", 455 | ); 456 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 457 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 458 | GCC_WARN_UNDECLARED_SELECTOR = YES; 459 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 460 | GCC_WARN_UNUSED_FUNCTION = YES; 461 | GCC_WARN_UNUSED_VARIABLE = YES; 462 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 463 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 464 | MTL_FAST_MATH = YES; 465 | ONLY_ACTIVE_ARCH = YES; 466 | PRODUCT_NAME = "$(TARGET_NAME)"; 467 | STRIP_INSTALLED_PRODUCT = NO; 468 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 469 | SYMROOT = "${SRCROOT}/../build"; 470 | }; 471 | name = Debug; 472 | }; 473 | /* End XCBuildConfiguration section */ 474 | 475 | /* Begin XCConfigurationList section */ 476 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 477 | isa = XCConfigurationList; 478 | buildConfigurations = ( 479 | A610193BC95AA1FBE8D125DF9AD72C9D /* Debug */, 480 | 90801340DB97DA2D6643DE3ECC36F95F /* Release */, 481 | ); 482 | defaultConfigurationIsVisible = 0; 483 | defaultConfigurationName = Release; 484 | }; 485 | 4B0B0576EDDFE9D1CE31D4D085DBD646 /* Build configuration list for PBXNativeTarget "MSBlockButton" */ = { 486 | isa = XCConfigurationList; 487 | buildConfigurations = ( 488 | 5E226FB425A8162429E27308BF78CB5A /* Debug */, 489 | 704076628A33C7080D9167229766965F /* Release */, 490 | ); 491 | defaultConfigurationIsVisible = 0; 492 | defaultConfigurationName = Release; 493 | }; 494 | 78479828C6863C70B13F4AA54726CDFA /* Build configuration list for PBXNativeTarget "Pods-MSRotationTabBarDEMO" */ = { 495 | isa = XCConfigurationList; 496 | buildConfigurations = ( 497 | 469A8FC6CC38C84949DD9CD7F302B1BD /* Debug */, 498 | 872B93308B7A5038EF49B69C36BE1983 /* Release */, 499 | ); 500 | defaultConfigurationIsVisible = 0; 501 | defaultConfigurationName = Release; 502 | }; 503 | /* End XCConfigurationList section */ 504 | }; 505 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 506 | } 507 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MSBlockButton/MSBlockButton-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_MSBlockButton : NSObject 3 | @end 4 | @implementation PodsDummy_MSBlockButton 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MSBlockButton/MSBlockButton-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/MSBlockButton/MSBlockButton.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MSBlockButton 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MSBlockButton" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSBlockButton" 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/MSBlockButton 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSRotationTabBarDEMO/Pods-MSRotationTabBarDEMO-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## MSBlockButton 5 | 6 | MIT License 7 | 8 | Copyright (c) 2018 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSRotationTabBarDEMO/Pods-MSRotationTabBarDEMO-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | MIT License 18 | 19 | Copyright (c) 2018 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | MSBlockButton 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSRotationTabBarDEMO/Pods-MSRotationTabBarDEMO-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_MSRotationTabBarDEMO : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_MSRotationTabBarDEMO 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSRotationTabBarDEMO/Pods-MSRotationTabBarDEMO-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # frameworks to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 14 | 15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 17 | 18 | # Used as a return value for each invocation of `strip_invalid_archs` function. 19 | STRIP_BINARY_RETVAL=0 20 | 21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 24 | 25 | # Copies and strips a vendored framework 26 | install_framework() 27 | { 28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 29 | local source="${BUILT_PRODUCTS_DIR}/$1" 30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 32 | elif [ -r "$1" ]; then 33 | local source="$1" 34 | fi 35 | 36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 37 | 38 | if [ -L "${source}" ]; then 39 | echo "Symlinked..." 40 | source="$(readlink "${source}")" 41 | fi 42 | 43 | # Use filter instead of exclude so missing patterns don't throw errors. 44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 46 | 47 | local basename 48 | basename="$(basename -s .framework "$1")" 49 | binary="${destination}/${basename}.framework/${basename}" 50 | if ! [ -r "$binary" ]; then 51 | binary="${destination}/${basename}" 52 | fi 53 | 54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 56 | strip_invalid_archs "$binary" 57 | fi 58 | 59 | # Resign the code if required by the build settings to avoid unstable apps 60 | code_sign_if_enabled "${destination}/$(basename "$1")" 61 | 62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 64 | local swift_runtime_libs 65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 66 | for lib in $swift_runtime_libs; do 67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 69 | code_sign_if_enabled "${destination}/${lib}" 70 | done 71 | fi 72 | } 73 | 74 | # Copies and strips a vendored dSYM 75 | install_dsym() { 76 | local source="$1" 77 | if [ -r "$source" ]; then 78 | # Copy the dSYM into a the targets temp dir. 79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 81 | 82 | local basename 83 | basename="$(basename -s .framework.dSYM "$source")" 84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 85 | 86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 88 | strip_invalid_archs "$binary" 89 | fi 90 | 91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 92 | # Move the stripped file into its final destination. 93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 95 | else 96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 98 | fi 99 | fi 100 | } 101 | 102 | # Signs a framework with the provided identity 103 | code_sign_if_enabled() { 104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 105 | # Use the current code_sign_identitiy 106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 108 | 109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 110 | code_sign_cmd="$code_sign_cmd &" 111 | fi 112 | echo "$code_sign_cmd" 113 | eval "$code_sign_cmd" 114 | fi 115 | } 116 | 117 | # Strip invalid architectures 118 | strip_invalid_archs() { 119 | binary="$1" 120 | # Get architectures for current target binary 121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 122 | # Intersect them with the architectures we are building for 123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 124 | # If there are no archs supported by this binary then warn the user 125 | if [[ -z "$intersected_archs" ]]; then 126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 127 | STRIP_BINARY_RETVAL=0 128 | return 129 | fi 130 | stripped="" 131 | for arch in $binary_archs; do 132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 133 | # Strip non-valid architectures in-place 134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 135 | stripped="$stripped $arch" 136 | fi 137 | done 138 | if [[ "$stripped" ]]; then 139 | echo "Stripped $binary of architectures:$stripped" 140 | fi 141 | STRIP_BINARY_RETVAL=1 142 | } 143 | 144 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 145 | wait 146 | fi 147 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSRotationTabBarDEMO/Pods-MSRotationTabBarDEMO-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSRotationTabBarDEMO/Pods-MSRotationTabBarDEMO.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSBlockButton" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MSBlockButton" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MSBlockButton" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"MSBlockButton" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-MSRotationTabBarDEMO/Pods-MSRotationTabBarDEMO.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSBlockButton" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MSBlockButton" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MSBlockButton" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"MSBlockButton" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | UITabBar Rotation Animation Demo uses Core Animation and Response Chain 2 | 3 | ![image](MSRotationTabBar.gif) 4 | 5 | --------------------------------------------------------------------------------