├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── -en-bug-report--cn-bug---.md │ ├── -en-feature-request--cn---------.md │ └── qa----.md ├── issue_template.md └── pull_request_template.md ├── .gitignore ├── CHANGELOG.md ├── CYLTabBarController.podspec ├── CYLTabBarController.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ ├── CYLTabBarController.xccheckout │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ └── chenyilong.xcuserdatad │ │ ├── UserInterfaceState.xcuserstate │ │ └── WorkspaceSettings.xcsettings ├── xcshareddata │ └── xcschemes │ │ └── CYLTabBarController.xcscheme └── xcuserdata │ └── chenyilong.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ ├── CYLTabBarController.xcscheme │ └── xcschememanagement.plist ├── CYLTabBarController.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist ├── CYLTabBarController ├── CAAnimation+CYLBadgeExtention.h ├── CAAnimation+CYLBadgeExtention.m ├── CYLBadgeProtocol.h ├── CYLBaseNavigationController.h ├── CYLBaseNavigationController.m ├── CYLBaseTableViewController.h ├── CYLBaseTableViewController.m ├── CYLBaseViewController.h ├── CYLBaseViewController.m ├── CYLConstants.h ├── CYLPlusButton.h ├── CYLPlusButton.m ├── CYLTabBar+CYLTabBarControllerExtention.h ├── CYLTabBar+CYLTabBarControllerExtention.m ├── CYLTabBar.h ├── CYLTabBar.m ├── CYLTabBarController.h ├── CYLTabBarController.m ├── NSObject+CYLTabBarControllerExtention.h ├── NSObject+CYLTabBarControllerExtention.m ├── UIBarButtonItem+CYLBadgeExtention.h ├── UIBarButtonItem+CYLBadgeExtention.m ├── UIColor+CYLTabBarControllerExtention.h ├── UIColor+CYLTabBarControllerExtention.m ├── UIControl+CYLTabBarControllerExtention.h ├── UIControl+CYLTabBarControllerExtention.m ├── UIImage+CYLTabBarControllerExtention.h ├── UIImage+CYLTabBarControllerExtention.m ├── UITabBarItem+CYLBadgeExtention.h ├── UITabBarItem+CYLBadgeExtention.m ├── UITabBarItem+CYLTabBarControllerExtention.h ├── UITabBarItem+CYLTabBarControllerExtention.m ├── UIView+CYLBadgeExtention.h ├── UIView+CYLBadgeExtention.m ├── UIView+CYLTabBarControllerExtention.h ├── UIView+CYLTabBarControllerExtention.m ├── UIViewController+CYLNavigationControllerExtention.h ├── UIViewController+CYLNavigationControllerExtention.m ├── UIViewController+CYLTabBarControllerExtention.h └── UIViewController+CYLTabBarControllerExtention.m ├── CYLTabBarControllerTests ├── CYLTabBarControllerTests.m └── Info.plist ├── Example-Swift ├── AppDelegate.swift ├── CYLTabBarController-Swift.xcodeproj │ └── project.xcworkspace │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── CYLTabBarController-Swift.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── CYLTabbarController-Swift.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcuserdata │ │ └── chenyilong.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist ├── MainTabBarController.swift ├── Module │ ├── Connection │ │ └── Controller │ │ │ └── ConnectionViewController.swift │ ├── Home │ │ └── Controller │ │ │ └── HomeViewController.swift │ ├── Message │ │ └── Controller │ │ │ └── MessageViewController.swift │ ├── Personal │ │ └── Controller │ │ │ └── PersonalViewController.swift │ └── Publish │ │ └── Controller │ │ └── PublishViewController.swift ├── Other │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-40.png │ │ │ ├── Icon-40@2x.png │ │ │ ├── Icon-40@3x.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 │ │ │ ├── Icon-Small-50.png │ │ │ ├── Icon-Small-50@2x.png │ │ │ ├── Icon-Small.png │ │ │ ├── Icon-Small@2x.png │ │ │ ├── Icon-Small@3x.png │ │ │ ├── Icon.png │ │ │ └── Icon@2x.png │ │ ├── Contents.json │ │ ├── LaunchImage.launchimage │ │ │ ├── Contents.json │ │ │ ├── Default-568h@2x.png │ │ │ ├── Default-667h@2x.png │ │ │ ├── Default-Landscape-1792h@3x.png │ │ │ ├── Default-Landscape-2436h@3x.png │ │ │ ├── Default-Landscape-2688h@3x.png │ │ │ ├── Default-Landscape-736h@3x.png │ │ │ ├── Default-Portrait-1792h@3x.png │ │ │ ├── Default-Portrait-2436h@3x.png │ │ │ ├── Default-Portrait-2688h@3x.png │ │ │ ├── Default-Portrait-736h@3x.png │ │ │ ├── Default.png │ │ │ ├── Default@2x.png │ │ │ ├── Default~ipad.png │ │ │ ├── Default~ipad@2x.png │ │ │ ├── Default~ipad~landscape.png │ │ │ ├── Default~ipad~landscape@2x.png │ │ │ ├── Default~ipad~landscape~nostatusbar.png │ │ │ ├── Default~ipad~landscape~nostatusbar@2x.png │ │ │ ├── Default~ipad~nostatusbar.png │ │ │ └── Default~ipad~nostatusbar@2x.png │ │ └── TabBarIcon │ │ │ ├── Contents.json │ │ │ ├── account_highlight.imageset │ │ │ ├── Contents.json │ │ │ └── account_highlight@2x.png │ │ │ ├── account_normal.imageset │ │ │ ├── Contents.json │ │ │ └── account_normal@2x.png │ │ │ ├── home_highlight.imageset │ │ │ ├── Contents.json │ │ │ └── home_highlight@2x.png │ │ │ ├── home_normal.imageset │ │ │ ├── Contents.json │ │ │ └── home_normal@2x.png │ │ │ ├── message_highlight.imageset │ │ │ ├── Contents.json │ │ │ └── message_highlight@2x.png │ │ │ ├── message_normal.imageset │ │ │ ├── Contents.json │ │ │ └── message_normal@2x.png │ │ │ ├── mycity_highlight.imageset │ │ │ ├── Contents.json │ │ │ └── mycity_highlight@2x.png │ │ │ ├── mycity_normal.imageset │ │ │ ├── Contents.json │ │ │ └── mycity_normal@2x.png │ │ │ ├── post_normal.imageset │ │ │ ├── Contents.json │ │ │ └── post_normal@2x.png │ │ │ ├── tabbar_background.imageset │ │ │ ├── Contents.json │ │ │ └── tabbar_background@2x.png │ │ │ └── tapbar_top_line.imageset │ │ │ ├── Contents.json │ │ │ └── tapbar_top_line@2x.png │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ └── Info.plist ├── Podfile └── View │ └── CYLPlusButtonSubclass.swift ├── Example ├── AppDelegate.h ├── AppDelegate.m ├── Base.lproj │ ├── LaunchScreen.xib │ └── Main.storyboard ├── CYLMainRootViewController.h ├── CYLMainRootViewController.m ├── Classes │ ├── Module │ │ ├── Home │ │ │ ├── CYLHomeViewController.h │ │ │ └── CYLHomeViewController.m │ │ ├── Message │ │ │ ├── CYLMessageViewController.h │ │ │ └── CYLMessageViewController.m │ │ ├── Mine │ │ │ ├── CYLMineViewController.h │ │ │ └── CYLMineViewController.m │ │ ├── Other │ │ │ ├── CYLPlusDemoChildViewController.h │ │ │ └── CYLPlusDemoChildViewController.m │ │ └── SameCity │ │ │ ├── CYLDetailsViewController.h │ │ │ ├── CYLDetailsViewController.m │ │ │ ├── CYLSameCityViewController.h │ │ │ └── CYLSameCityViewController.m │ ├── Other │ │ └── LottieResources │ │ │ ├── gray_tabbar_home_animation.json │ │ │ ├── gray_tabbar_me_animation.json │ │ │ ├── gray_tabbar_message_animation.json │ │ │ ├── green_lottie_tab_discover.json │ │ │ ├── green_lottie_tab_home.json │ │ │ ├── green_lottie_tab_mine.json │ │ │ ├── green_lottie_tab_news.json │ │ │ ├── img_tab_home_0.png │ │ │ ├── img_tab_home_1.png │ │ │ ├── img_tab_home_2.png │ │ │ ├── img_tab_me_0.png │ │ │ ├── img_tab_me_1.png │ │ │ ├── img_tab_message_0.png │ │ │ ├── img_tab_message_1.png │ │ │ ├── tab_home_animate.json │ │ │ ├── tab_me_animate.json │ │ │ ├── tab_message_animate.json │ │ │ └── tab_search_animate.json │ └── View │ │ ├── CYLPlusButtonSubclass.h │ │ └── CYLPlusButtonSubclass.m ├── Images.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-40.png │ │ ├── Icon-40@2x.png │ │ ├── Icon-40@3x.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 │ │ ├── Icon-Small-50.png │ │ ├── Icon-Small-50@2x.png │ │ ├── Icon-Small.png │ │ ├── Icon-Small@2x.png │ │ ├── Icon-Small@3x.png │ │ ├── Icon.png │ │ └── Icon@2x.png │ ├── Contents.json │ ├── LaunchImage.launchimage │ │ ├── Contents.json │ │ ├── Default-568h@2x.png │ │ ├── Default-667h@2x.png │ │ ├── Default-Landscape-1792h@3x.png │ │ ├── Default-Landscape-2436h@3x.png │ │ ├── Default-Landscape-2688h@3x.png │ │ ├── Default-Landscape-736h@3x.png │ │ ├── Default-Portrait-1792h@3x.png │ │ ├── Default-Portrait-2436h@3x.png │ │ ├── Default-Portrait-2688h@3x.png │ │ ├── Default-Portrait-736h@3x.png │ │ ├── Default.png │ │ ├── Default@2x.png │ │ ├── Default~ipad.png │ │ ├── Default~ipad@2x.png │ │ ├── Default~ipad~landscape.png │ │ ├── Default~ipad~landscape@2x.png │ │ ├── Default~ipad~landscape~nostatusbar.png │ │ ├── Default~ipad~landscape~nostatusbar@2x.png │ │ ├── Default~ipad~nostatusbar.png │ │ └── Default~ipad~nostatusbar@2x.png │ ├── NavBar │ │ ├── Contents.json │ │ ├── home_bar_scan.imageset │ │ │ ├── Contents.json │ │ │ ├── home_bar_scan@2x.png │ │ │ └── home_bar_scan@3x.png │ │ ├── home_title_slogan.imageset │ │ │ ├── Contents.json │ │ │ ├── home_title_slogan@2x.png │ │ │ └── home_title_slogan@3x.png │ │ └── icon_search.imageset │ │ │ ├── Contents.json │ │ │ ├── icon_search@2x.png │ │ │ └── icon_search@3x.png │ ├── TabBarIcon │ │ ├── Contents.json │ │ ├── TabBar_Bg_Shadow.imageset │ │ │ ├── Contents.json │ │ │ └── TabBar_Bg_Shadow@2x.png │ │ ├── account │ │ │ ├── Contents.json │ │ │ ├── account_highlight.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── account_highlight.png │ │ │ │ ├── account_highlight@2x.png │ │ │ │ └── account_highlight@3x.png │ │ │ └── account_normal.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── account_normal.png │ │ │ │ ├── account_normal@2x.png │ │ │ │ └── account_normal@3x.png │ │ ├── fishpond │ │ │ ├── Contents.json │ │ │ ├── fishpond_highlight.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── fishpond_highlight.png │ │ │ │ ├── fishpond_highlight@2x.png │ │ │ │ └── fishpond_highlight@3x.png │ │ │ └── fishpond_normal.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── fishpond_normal.png │ │ │ │ ├── fishpond_normal@2x.png │ │ │ │ └── fishpond_normal@3x.png │ │ ├── home │ │ │ ├── Contents.json │ │ │ ├── home_highlight.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── home_highlight.png │ │ │ │ ├── home_highlight@2x.png │ │ │ │ └── home_highlight@3x.png │ │ │ └── home_normal.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── home_normal.png │ │ │ │ ├── home_normal@2x.png │ │ │ │ └── home_normal@3x.png │ │ ├── home_select_cover.imageset │ │ │ ├── Contents.json │ │ │ ├── home_select_cover@2x.png │ │ │ └── home_select_cover@3x.png │ │ ├── lottie_placeholder │ │ │ ├── Contents.json │ │ │ ├── gray_tabbar_home_animation_lottie_placeholder.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── gray_tabbar_home_animation_lottie_placeholder@2x.png │ │ │ ├── gray_tabbar_me_animation_lottie_placeholder.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── gray_tabbar_me_animation_lottie_placeholder@2x.png │ │ │ └── gray_tabbar_message_animation_lottie_placeholder.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── gray_tabbar_message_animation_lottie_placeholder@2x.png │ │ ├── message │ │ │ ├── Contents.json │ │ │ ├── message_highlight.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── message_highlight.png │ │ │ │ ├── message_highlight@2x.png │ │ │ │ └── message_highlight@3x.png │ │ │ └── message_normal.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── message_normal.png │ │ │ │ ├── message_normal@2x.png │ │ │ │ └── message_normal@3x.png │ │ ├── post │ │ │ ├── Contents.json │ │ │ ├── post_highlight.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── post_highlight@2x.png │ │ │ │ └── post_highlight@3x.png │ │ │ └── post_normal.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── post_normal@2x.png │ │ │ │ └── post_normal@3x.png │ │ ├── tabbarBg.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbarBg@2x.png │ │ │ └── tabbarBg@3x.png │ │ ├── tabbar_background.imageset │ │ │ ├── Contents.json │ │ │ └── tabbar_background@2x.png │ │ ├── tapbar_top_line.imageset │ │ │ ├── Contents.json │ │ │ └── tapbar_top_line@2x.png │ │ └── videoback.imageset │ │ │ ├── Contents.json │ │ │ ├── videoback@2x.png │ │ │ └── videoback@3x.png │ ├── home-float-icon.imageset │ │ ├── Contents.json │ │ ├── home-float-icon.jpg │ │ ├── home-float-icon@2x.jpg │ │ └── home-float-icon@3x.jpg │ ├── icon_tabbar_plus.imageset │ │ ├── Contents.json │ │ ├── icon_tabbar_plus@2x.png │ │ └── icon_tabbar_plus@3x.png │ └── navigationbar_background_tall.imageset │ │ ├── Contents.json │ │ └── navigationbar_background_tall@2x.png ├── Info.plist ├── MainTabBarController.h ├── MainTabBarController.m └── main.m ├── LICENSE ├── Podfile ├── README.md └── package.json /.gitattributes: -------------------------------------------------------------------------------- 1 | *.h linguist-detectable=false 2 | *.m linguist-detectable=false 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/-en-bug-report--cn-bug---.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "[EN]Bug report.[CN]bug反馈." 3 | about: Create a report to help us improve 4 | title: "[bug]:" 5 | labels: bug 6 | assignees: ChenYilong 7 | 8 | --- 9 | 10 |

11 | 12 | 13 | 14 | -------------------------------------------- 15 | 16 | 17 |

18 | 19 | 20 | 21 | 22 | 23 |

24 | 25 | 26 |

27 | 28 |

29 | 30 |

31 | 32 |

33 | 34 |

35 | 36 |

37 | 38 | 39 |

40 | 41 |

42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |

50 | 51 | 52 | -------------------------------------------- 53 | 54 | 55 | ## Base Info for this issue 56 | 57 | 58 | 59 | 60 | 61 | 1. Version:Latest Version as [here](https://github.com/ChenYilong/CYLTabBarController/blob/master/CYLTabBarController.podspec) 62 | 2. Language of App :Objective-C/Swift 63 | 4. iOS System Version:iOS12 64 | 5. Prototype(是否是真机):YES 65 | 6. Issue Type:Crash、Bug、Enhancement(希望能支持一个新需求)、Q-A 66 | 67 | ## 1. How to reproduce the problem. 68 | 69 | 70 | ## 2. Please help me in this way. 71 | 72 | 73 | ## 3. Here is a Demo. 74 | 75 | 76 | 77 | ## 4. Here is my Debug log 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | ---------- 86 | 87 |

88 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/-en-feature-request--cn---------.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "[EN]Feature request.[CN]希望添加新功能." 3 | about: Suggest an idea for this project 4 | title: "[Feature request]希望添加新功能:" 5 | labels: enhancement 6 | assignees: ChenYilong 7 | 8 | --- 9 | 10 |

11 | 12 | 13 | 14 | -------------------------------------------- 15 | 16 | 17 |

18 | 19 | 20 | 21 | 22 | 23 |

24 | 25 | 26 |

27 | 28 |

29 | 30 |

31 | 32 |

33 | 34 |

35 | 36 |

37 | 38 | 39 |

40 | 41 |

42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |

50 | 51 | 52 | -------------------------------------------- 53 | 54 | 55 | **Is your feature request related to a problem? Please describe.** 56 | 57 | 58 | **Describe the solution you'd like** 59 | 60 | 61 | **Describe alternatives you've considered** 62 | 63 | 64 | **Additional context** 65 | 66 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/qa----.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: QA问题询问 3 | about: 使用方法或者不确定是否为bug,可选用本模版 4 | title: "[Q-A]使用方法询问:" 5 | labels: Q-A 6 | assignees: ChenYilong 7 | 8 | --- 9 | 10 |

11 | 12 | 13 | 14 | -------------------------------------------- 15 | 16 | 17 |

18 | 19 | 20 | 21 | 22 | 23 |

24 | 25 | 26 |

27 | 28 |

29 | 30 |

31 | 32 |

33 | 34 |

35 | 36 |

37 | 38 | 39 |

40 | 41 |

42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |

50 | 51 | 52 | -------------------------------------------- 53 | 54 | ## My issue: 55 | 56 | 57 | -------------------------------------------------------------------------------- /.github/issue_template.md: -------------------------------------------------------------------------------- 1 | 2 | ![enter image description here](http://i68.tinypic.com/ifyhoo.jpg) 3 | 4 | ---------- 5 | 6 | 7 |

8 | 9 | 10 | 11 | 12 |

13 | 14 |

15 | 16 |

17 | 18 |

19 | 20 | 21 | 22 |

23 | 24 | ---------- 25 | 26 | 27 | ## Base Info for this issue 28 | 29 | 30 | 31 | 32 | 33 | 1. Version:Latest Version as [here](https://github.com/ChenYilong/CYLTabBarController/blob/master/CYLTabBarController.podspec) 34 | 2. Language of App :Objective-C/Swift 35 | 4. iOS System Version:iOS12 36 | 5. Prototype(是否是真机):YES 37 | 6. Issue Type:Crash、Bug、Enhancement(希望能支持一个新需求)、Q-A 38 | 39 | ## 1. How to reproduce the problem. 40 | 41 | 42 | ## 2. Please help me in this way. 43 | 44 | 45 | ## 3. Here is a Demo. 46 | 47 | 48 | 49 | ## 4. Here is my Debug log 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | ---------- 58 | 59 |

60 | 61 | 62 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | 5 | -------------------------------------------- 6 | 7 | 8 |

9 | 10 | 11 | 12 | 13 | 14 |

15 | 16 | 17 |

18 | 19 |

20 | 21 |

22 | 23 |

24 | 25 |

26 | 27 |

28 | 29 | 30 |

31 | 32 |

33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |

41 | 42 | 43 | -------------------------------------------- 44 | 45 | 46 | 47 | ## My issue: 48 | 49 | 50 | ## What I have done: 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .DS_Store 3 | CYLTabBarController.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate 4 | build/ 5 | *.pbxuser 6 | !default.pbxuser 7 | *.mode1v3 8 | !default.mode1v3 9 | *.mode2v3 10 | !default.mode2v3 11 | *.perspectivev3 12 | !default.perspectivev3 13 | !default.xcworkspace 14 | xcuserdata 15 | *.moved-aside 16 | *.mobileprovision 17 | DerivedData 18 | .idea/ 19 | Pods 20 | Podfile.lock 21 | *.xcworkspace 22 | 23 | 24 | CYLTabBarController.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist 25 | *.xcuserstate 26 | *.xcbkptlist 27 | *.xcuserstate 28 | *.xcbkptlist 29 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/CHANGELOG.md -------------------------------------------------------------------------------- /CYLTabBarController.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "CYLTabBarController" 3 | s.version = "1.29.2" 4 | s.summary = "Highly customizable tabBar and tabBarController for iOS" 5 | s.description = "[EN]It is an iOS UI module library for adding animation to iOS tabbar items and icons with Lottie. [CN]【中国特色 TabBar】一行代码实现 Lottie 动画TabBar,支持中间带+号的TabBar样式,自带红点角标,支持动态刷新。【iOS12 & iPhone XS MAX supported】" 6 | s.homepage = "https://github.com/ChenYilong/CYLTabBarController" 7 | s.license = { :type => 'MIT', :file => 'LICENSE' } 8 | s.author = { "ChenYilong" => "luohanchenyilong@163.com" } 9 | s.social_media_url = 'http://weibo.com/luohanchenyilong/' 10 | s.platform = :ios, '8.0' 11 | s.source = { :git => "https://github.com/ChenYilong/CYLTabBarController.git", :tag => s.version.to_s } 12 | 13 | s.requires_arc = true 14 | 15 | s.default_subspec = 'Core' 16 | 17 | s.subspec 'Core' do |core| 18 | core.source_files = 'CYLTabBarController', 'CYLTabBarController/**/*.{h,m}' 19 | core.public_header_files = 'CYLTabBarController/**/*.h' 20 | end 21 | 22 | s.subspec 'Lottie' do |lottie| 23 | lottie.dependency 'CYLTabBarController/Core' 24 | lottie.dependency "lottie-ios" , '~> 2.5.3' 25 | end 26 | end 27 | 28 | -------------------------------------------------------------------------------- /CYLTabBarController.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /CYLTabBarController.xcodeproj/project.xcworkspace/xcshareddata/CYLTabBarController.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 7FCCCA1D-425A-4CC2-B373-0232D572FEBA 9 | IDESourceControlProjectName 10 | project 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 8395BAF887C6164EAF7C91354187BC1DD6D6F3DF 14 | https://github.com/ChenYilong/CYLTabBarController.git 15 | 16 | IDESourceControlProjectPath 17 | CYLTabBarController.xcodeproj/project.xcworkspace 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | 8395BAF887C6164EAF7C91354187BC1DD6D6F3DF 21 | ../.. 22 | 23 | IDESourceControlProjectURL 24 | https://github.com/ChenYilong/CYLTabBarController.git 25 | IDESourceControlProjectVersion 26 | 111 27 | IDESourceControlProjectWCCIdentifier 28 | 8395BAF887C6164EAF7C91354187BC1DD6D6F3DF 29 | IDESourceControlProjectWCConfigurations 30 | 31 | 32 | IDESourceControlRepositoryExtensionIdentifierKey 33 | public.vcs.git 34 | IDESourceControlWCCIdentifierKey 35 | 8395BAF887C6164EAF7C91354187BC1DD6D6F3DF 36 | IDESourceControlWCCName 37 | CYLTabBarController 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /CYLTabBarController.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CYLTabBarController.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/CYLTabBarController.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /CYLTabBarController.xcodeproj/project.xcworkspace/xcuserdata/chenyilong.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges 6 | 7 | SnapshotAutomaticallyBeforeSignificantChanges 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /CYLTabBarController.xcodeproj/xcshareddata/xcschemes/CYLTabBarController.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /CYLTabBarController.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /CYLTabBarController.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | CYLTabBarController.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 9AE942731BDC91B800354519 16 | 17 | primary 18 | 19 | 20 | 9AE9428C1BDC91B900354519 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /CYLTabBarController.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /CYLTabBarController.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CYLTabBarController/CAAnimation+CYLBadgeExtention.h: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | #import 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | typedef NS_ENUM(NSUInteger, CYLAxis) { 15 | CYLAxisX = 0, 16 | CYLAxisY, 17 | CYLAxisZ 18 | }; 19 | 20 | // Degrees to radians 21 | #define CYL_DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI) 22 | #define CYL_RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI)) 23 | 24 | @interface CAAnimation (CYLBadgeExtention) 25 | 26 | /** 27 | * breathing forever 28 | * 29 | * @param time duritaion, from clear to fully seen 30 | * 31 | * @return animation obj 32 | */ 33 | + (CABasicAnimation *)cyl_opacityForever_Animation:(float)time; 34 | 35 | /** 36 | * breathing with fixed repeated times 37 | * 38 | * @param repeatTimes times 39 | * @param time duritaion, from clear to fully seen 40 | * 41 | * @return animation obj 42 | */ 43 | + (CABasicAnimation *)cyl_opacityTimes_Animation:(float)repeatTimes durTimes:(float)time; 44 | 45 | /** 46 | * //rotate 47 | * 48 | * @param dur duration 49 | * @param degree rotate degree in radian(弧度) 50 | * @param axis axis 51 | * @param repeatCount repeat count 52 | * 53 | * @return animation obj 54 | */ 55 | + (CABasicAnimation *)cyl_rotation:(float)dur degree:(float)degree direction:(CYLAxis)axis repeatCount:(int)repeatCount; 56 | 57 | 58 | /** 59 | * scale animation 60 | * 61 | * @param fromScale the original scale value, 1.0 by default 62 | * @param toScale target scale 63 | * @param time duration 64 | * @param repeatTimes repeat counts 65 | * 66 | * @return animaiton obj 67 | */ 68 | + (CABasicAnimation *)cyl_scaleFrom:(CGFloat)fromScale toScale:(CGFloat)toScale durTimes:(float)time rep:(float)repeatTimes; 69 | /** 70 | * shake 71 | * 72 | * @param repeatTimes time 73 | * @param time duration 74 | * @param obj always be CALayer at present 75 | * @return aniamtion obj 76 | */ 77 | + (CAKeyframeAnimation *)cyl_shake_AnimationRepeatTimes:(float)repeatTimes durTimes:(float)time forObj:(id)obj; 78 | 79 | /** 80 | * bounce 81 | * 82 | * @param repeatTimes time 83 | * @param time duration 84 | * @param obj always be CALayer at present 85 | * @return aniamtion obj 86 | */ 87 | + (CAKeyframeAnimation *)cyl_bounce_AnimationRepeatTimes:(float)repeatTimes durTimes:(float)time forObj:(id)obj; 88 | 89 | @end 90 | 91 | NS_ASSUME_NONNULL_END 92 | 93 | -------------------------------------------------------------------------------- /CYLTabBarController/CYLBaseNavigationController.h: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface CYLBaseNavigationController : UINavigationController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /CYLTabBarController/CYLBaseNavigationController.m: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | #import "CYLBaseNavigationController.h" 10 | 11 | @interface CYLBaseNavigationController () 12 | 13 | @end 14 | 15 | @implementation CYLBaseNavigationController 16 | 17 | - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { 18 | // 当前导航栏, 只有第一个viewController push的时候设置隐藏 19 | if (self.viewControllers.count == 1) { 20 | viewController.hidesBottomBarWhenPushed = YES; 21 | } else { 22 | viewController.hidesBottomBarWhenPushed = NO; 23 | } 24 | [super pushViewController:viewController animated:animated]; 25 | } 26 | 27 | //fix https://github.com/ChenYilong/CYLTabBarController/issues/483 28 | - (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated { 29 | if (self.viewControllers.count > 1) { 30 | UIViewController *viewController = [self.viewControllers lastObject]; 31 | viewController.hidesBottomBarWhenPushed = YES; 32 | } 33 | [super setViewControllers:viewControllers animated:animated]; 34 | } 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /CYLTabBarController/CYLBaseTableViewController.h: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface CYLBaseTableViewController : UITableViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /CYLTabBarController/CYLBaseTableViewController.m: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | 10 | #import "CYLBaseTableViewController.h" 11 | #import "CYLTabBarController.h" 12 | 13 | @interface CYLBaseTableViewController () 14 | 15 | @end 16 | 17 | @implementation CYLBaseTableViewController 18 | 19 | #pragma mark - 20 | #pragma mark - UIViewController Life 21 | 22 | - (void)viewDidLoad { 23 | [super viewDidLoad]; 24 | } 25 | 26 | - (void)viewWillAppear:(BOOL)animated { 27 | [super viewWillAppear:animated]; 28 | [self cyl_viewWillAppearNavigationSetting:animated]; 29 | } 30 | 31 | - (void)viewDidAppear:(BOOL)animated { 32 | [super viewDidAppear:animated]; 33 | [self cyl_viewDidAppearNavigationSetting:animated]; 34 | } 35 | 36 | - (void)viewWillDisappear:(BOOL)animated { 37 | [super viewWillDisappear:animated]; 38 | [self cyl_viewWillDisappearNavigationSetting:animated]; 39 | } 40 | 41 | - (void)viewDidDisappear:(BOOL)animated { 42 | [super viewDidDisappear:animated]; 43 | [self cyl_viewDidDisappearNavigationSetting:animated]; 44 | } 45 | 46 | - (void)didReceiveMemoryWarning { 47 | [super didReceiveMemoryWarning]; 48 | } 49 | 50 | - (void)dealloc { 51 | [self cyl_deallocNavigationSetting]; 52 | } 53 | 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /CYLTabBarController/CYLBaseViewController.h: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface CYLBaseViewController : UIViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /CYLTabBarController/CYLBaseViewController.m: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | #import "CYLBaseViewController.h" 10 | #import "CYLTabBarController.h" 11 | 12 | @interface CYLBaseViewController () 13 | 14 | @end 15 | 16 | @implementation CYLBaseViewController 17 | 18 | #pragma mark - 19 | #pragma mark - UIViewController Life 20 | 21 | - (void)viewDidLoad { 22 | [super viewDidLoad]; 23 | } 24 | 25 | - (void)viewWillAppear:(BOOL)animated { 26 | [super viewWillAppear:animated]; 27 | [self cyl_viewWillAppearNavigationSetting:animated]; 28 | } 29 | 30 | - (void)viewDidAppear:(BOOL)animated { 31 | [super viewDidAppear:animated]; 32 | [self cyl_viewDidAppearNavigationSetting:animated]; 33 | } 34 | 35 | - (void)viewWillDisappear:(BOOL)animated { 36 | [super viewWillDisappear:animated]; 37 | [self cyl_viewWillDisappearNavigationSetting:animated]; 38 | } 39 | 40 | - (void)viewDidDisappear:(BOOL)animated { 41 | [super viewDidDisappear:animated]; 42 | [self cyl_viewDidDisappearNavigationSetting:animated]; 43 | } 44 | 45 | - (void)didReceiveMemoryWarning { 46 | [super didReceiveMemoryWarning]; 47 | } 48 | 49 | - (void)dealloc { 50 | [self cyl_deallocNavigationSetting]; 51 | } 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /CYLTabBarController/CYLConstants.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLTabBarController.h 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #ifndef CYLConstants_h 10 | #define CYLConstants_h 11 | 12 | #define CYL_DEPRECATED(explain) __attribute__((deprecated(explain))) 13 | #define CYL_IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 14 | 15 | #define CYL_IS_IOS_11 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 11.f) 16 | #define CYL_IS_IPHONE_X (CYL_IS_IOS_11 && CYL_IS_IPHONE && (MIN([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) >= 375 && MAX([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) >= 812)) 17 | 18 | #define CYL_SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) 19 | #define CYL_SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) 20 | #define CYL_SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 21 | #define CYL_SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 22 | #define CYL_SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 23 | 24 | 25 | #endif /* CYLConstants_h */ 26 | 27 | 28 | -------------------------------------------------------------------------------- /CYLTabBarController/CYLPlusButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLPlusButton.h 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import 10 | #import "CYLConstants.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @class CYLPlusButton; 15 | 16 | @protocol CYLPlusButtonSubclassing 17 | 18 | @required 19 | + (id)plusButton; 20 | @optional 21 | 22 | /*! 23 | * 用来自定义加号按钮的位置,如果不实现默认居中。 24 | * @attention 以下两种情况下,必须实现该协议方法,否则 CYLTabBarController 会抛出 exception 来进行提示: 25 | 1. 添加了 PlusButton 且 TabBarItem 的个数是奇数。 26 | 2. 实现了 `+plusChildViewController`。 27 | * @return 用来自定义加号按钮在 TabBar 中的位置。 28 | * 29 | */ 30 | + (NSUInteger)indexOfPlusButtonInTabBar; 31 | 32 | /*! 33 | * 该方法是为了调整 PlusButton 中心点Y轴方向的位置,建议在按钮超出了 tabbar 的边界时实现该方法。 34 | * @attention 如果不实现该方法,内部会自动进行比对,预设一个较为合适的位置,如果实现了该方法,预设的逻辑将失效。 35 | * @return 返回值是自定义按钮中心点Y轴方向的坐标除以 tabbar 的高度, 36 | 内部实现时,会使用该返回值来设置 PlusButton 的 centerY 坐标,公式如下: 37 | `PlusButtonCenterY = multiplierOfTabBarHeight * tabBarHeight + constantOfPlusButtonCenterYOffset;` 38 | 也就是说:如果 constantOfPlusButtonCenterYOffset 为0,同时 multiplierOfTabBarHeight 的值是0.5,表示 PlusButton 居中,小于0.5表示 PlusButton 偏上,大于0.5则表示偏下。 39 | * 40 | */ 41 | + (CGFloat)multiplierOfTabBarHeight:(CGFloat)tabBarHeight; 42 | 43 | /*! 44 | * 见 `+multiplierOfTabBarHeight:` 注释: 45 | * `PlusButtonCenterY = multiplierOfTabBarHeight * tabBarHeight + constantOfPlusButtonCenterYOffset;` 46 | * 也就是说: constantOfPlusButtonCenterYOffset 大于0会向下偏移,小于0会向上偏移。 47 | * @attention 实现了该方法,但没有实现 `+multiplierOfTabBarHeight:` 方法,在这种情况下,会在预设逻辑的基础上进行偏移。 48 | */ 49 | + (CGFloat)constantOfPlusButtonCenterYOffsetForTabBarHeight:(CGFloat)tabBarHeight; 50 | 51 | /*! 52 | * 实现该方法后,能让 PlusButton 的点击效果与跟点击其他 TabBar 按钮效果一样,跳转到该方法指定的 UIViewController 。 53 | * @attention 必须同时实现 `+indexOfPlusButtonInTabBar` 来指定 PlusButton 的位置。 54 | * @return 指定 PlusButton 点击后跳转的 UIViewController。 55 | * 56 | */ 57 | + (UIViewController *)plusChildViewController; 58 | 59 | /*! 60 | * 61 | Asks the delegate whether the specified view controller should be made active. 62 | Return YES if the view controller’s tab should be selected or NO if the current tab should remain active. 63 | Returns YES true if the view controller’s tab should be selected or 64 | NO false if the current tab should remain active. 65 | */ 66 | + (BOOL)shouldSelectPlusChildViewController; 67 | 68 | #pragma mark - Deprecated API 69 | 70 | + (CGFloat)multiplerInCenterY CYL_DEPRECATED("Deprecated in 1.6.0. Use `+multiplierOfTabBarHeight:` instead."); 71 | 72 | + (NSString *)tabBarContext; 73 | 74 | @end 75 | 76 | @class CYLTabBar; 77 | 78 | FOUNDATION_EXTERN UIButton *CYLExternPlusButton; 79 | FOUNDATION_EXTERN UIViewController *CYLPlusChildViewController; 80 | 81 | @interface CYLPlusButton : UIButton 82 | 83 | + (void)registerPlusButton; 84 | + (void)removePlusButton; 85 | - (void)plusChildViewControllerButtonClicked:(UIButton *)sender; 86 | 87 | @end 88 | 89 | #pragma mark - Deprecated API 90 | 91 | @interface CYLPlusButton (CYLPlusButtonDeprecated) 92 | 93 | + (void)registerSubclass CYL_DEPRECATED("Deprecated in 1.6.0. Use `+[CYLPlusButton registerPlusButton]` instead."); 94 | 95 | @end 96 | 97 | NS_ASSUME_NONNULL_END 98 | -------------------------------------------------------------------------------- /CYLTabBarController/CYLPlusButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // CYLPlusButton.m 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import "CYLPlusButton.h" 10 | #import "CYLTabBarController.h" 11 | #import "UIViewController+CYLTabBarControllerExtention.h" 12 | 13 | CGFloat CYLPlusButtonWidth = 0.0f; 14 | UIButton *CYLExternPlusButton = nil; 15 | UIViewController *CYLPlusChildViewController = nil; 16 | 17 | @implementation CYLPlusButton 18 | 19 | #pragma mark - 20 | #pragma mark - public Methods 21 | 22 | + (void)registerPlusButton { 23 | if (![self conformsToProtocol:@protocol(CYLPlusButtonSubclassing)]) { 24 | return; 25 | } 26 | Class class = self; 27 | UIButton *plusButton = [class plusButton]; 28 | CYLExternPlusButton = plusButton; 29 | CYLPlusButtonWidth = plusButton.frame.size.width; 30 | if ([[self class] respondsToSelector:@selector(plusChildViewController)]) { 31 | CYLPlusChildViewController = [class plusChildViewController]; 32 | if ([[self class] respondsToSelector:@selector(tabBarContext)]) { 33 | NSString *tabBarContext = [class tabBarContext]; 34 | if (tabBarContext && tabBarContext.length) { 35 | [CYLPlusChildViewController cyl_setContext:tabBarContext]; 36 | } 37 | } else { 38 | [CYLPlusChildViewController cyl_setContext:NSStringFromClass([CYLTabBarController class])]; 39 | } 40 | [[self class] addSelectViewControllerTarget:plusButton]; 41 | if ([[self class] respondsToSelector:@selector(indexOfPlusButtonInTabBar)]) { 42 | CYLPlusButtonIndex = [[self class] indexOfPlusButtonInTabBar]; 43 | } else { 44 | [NSException raise:NSStringFromClass([CYLTabBarController class]) format:@"If you want to add PlusChildViewController, you must realizse `+indexOfPlusButtonInTabBar` in your custom plusButton class.【Chinese】如果你想使用PlusChildViewController样式,你必须同时在你自定义的plusButton中实现 `+indexOfPlusButtonInTabBar`,来指定plusButton的位置"]; 45 | } 46 | } 47 | } 48 | 49 | + (void)removePlusButton { 50 | CYLExternPlusButton = nil; 51 | [CYLPlusChildViewController cyl_setPlusViewControllerEverAdded:NO]; 52 | CYLPlusChildViewController = nil; 53 | } 54 | 55 | + (void)registerSubclass { 56 | [self registerPlusButton]; 57 | } 58 | 59 | - (void)plusChildViewControllerButtonClicked:(UIButton *)sender { 60 | BOOL notNeedConfigureSelectionStatus = [[self class] respondsToSelector:@selector(shouldSelectPlusChildViewController)] && ![[self class] shouldSelectPlusChildViewController]; 61 | if (notNeedConfigureSelectionStatus) { 62 | return; 63 | } 64 | CYLTabBarController *tabBarController = [sender cyl_tabBarController]; 65 | NSInteger index = [tabBarController.viewControllers indexOfObject:CYLPlusChildViewController]; 66 | if (NSNotFound != index && (index < tabBarController.viewControllers.count)) { 67 | [tabBarController setSelectedIndex:index]; 68 | } 69 | } 70 | 71 | #pragma mark - 72 | #pragma mark - Private Methods 73 | 74 | + (void)addSelectViewControllerTarget:(UIButton *)plusButton { 75 | id target = self; 76 | NSArray *selectorNamesArray = [plusButton actionsForTarget:target forControlEvent:UIControlEventTouchUpInside]; 77 | if (selectorNamesArray.count == 0) { 78 | target = plusButton; 79 | selectorNamesArray = [plusButton actionsForTarget:target forControlEvent:UIControlEventTouchUpInside]; 80 | } 81 | [selectorNamesArray enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 82 | SEL selector = NSSelectorFromString(obj); 83 | [plusButton removeTarget:target action:selector forControlEvents:UIControlEventTouchUpInside]; 84 | }]; 85 | [plusButton addTarget:plusButton action:@selector(plusChildViewControllerButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 86 | } 87 | 88 | /** 89 | * 按钮选中状态下点击先显示normal状态的颜色,松开时再回到selected状态下颜色。 90 | * 重写此方法即不会出现上述情况,与 UITabBarButton 相似 91 | */ 92 | - (void)setHighlighted:(BOOL)highlighted {} 93 | 94 | @end 95 | -------------------------------------------------------------------------------- /CYLTabBarController/CYLTabBar+CYLTabBarControllerExtention.h: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | #import 10 | #import "CYLTabBar.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface CYLTabBar (CYLTabBarControllerExtention) 15 | 16 | - (NSArray *)cyl_visibleControls; 17 | - (NSArray *)cyl_subTabBarButtons; 18 | - (NSArray *)cyl_subTabBarButtonsWithoutPlusButton; 19 | - (UIControl *)cyl_tabBarButtonWithTabIndex:(NSUInteger)tabIndex; 20 | - (void)cyl_animationLottieImageWithSelectedControl:(UIControl *)selectedControl 21 | lottieURL:(NSURL *)lottieURL 22 | size:(CGSize)size 23 | defaultSelected:(BOOL)defaultSelected; 24 | - (void)cyl_stopAnimationOfAllLottieView; 25 | - (NSArray *)cyl_originalTabBarButtons; 26 | - (BOOL)cyl_hasPlusChildViewController; 27 | 28 | @end 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /CYLTabBarController/CYLTabBar.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLTabBar.h 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface CYLTabBar : UITabBar 14 | 15 | /*! 16 | * 让 `TabImageView` 垂直居中时,所需要的默认偏移量。 17 | * @attention 该值将在设置 top 和 bottom 时被同时使用,具体的操作等价于如下行为: 18 | * `viewController.tabBarItem.imageInsets = UIEdgeInsetsMake(tabImageViewDefaultOffset, 0, -tabImageViewDefaultOffset, 0);` 19 | */ 20 | @property (nonatomic, assign, readonly) CGFloat tabImageViewDefaultOffset; 21 | 22 | @property (nonatomic, copy) NSString *context; 23 | 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /CYLTabBarController/NSObject+CYLTabBarControllerExtention.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLTabBarController.h 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSObject (CYLTabBarControllerExtention) 14 | 15 | @property (nonatomic, assign, getter=cyl_isForceLandscape, setter=cyl_setIsForceLandscape:) BOOL cyl_isForceLandscape; 16 | 17 | - (void)cyl_forceUpdateInterfaceOrientation:(UIInterfaceOrientation)orientation; 18 | 19 | - (UIResponder *)cyl_sharedAppDelegate; 20 | + (UIViewController * __nullable)cyl_topmostViewController; 21 | 22 | + (UINavigationController * __nullable)cyl_currentNavigationController; 23 | 24 | + (void)cyl_dismissAll:(void (^ __nullable)(void))completion; 25 | 26 | @end 27 | 28 | NS_ASSUME_NONNULL_END 29 | -------------------------------------------------------------------------------- /CYLTabBarController/UIBarButtonItem+CYLBadgeExtention.h: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | #import 10 | #import "UIView+CYLBadgeExtention.h" 11 | #import "CYLBadgeProtocol.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface UIBarButtonItem (CYLBadgeExtention) 16 | - (BOOL)cyl_isShowBadge; 17 | 18 | /** 19 | * show badge with red dot style and CYLBadgeAnimationTypeNone by default. 20 | */ 21 | - (void)cyl_showBadge; 22 | 23 | /** 24 | * cyl_showBadge 25 | * 26 | * @param value String value, default is `nil`. if value equal @"" means red dot style. 27 | * @param animationType animationType 28 | */ 29 | - (void)cyl_showBadgeValue:(NSString *)value 30 | animationType:(CYLBadgeAnimationType)animationType; 31 | 32 | 33 | /** 34 | * clear badge(hide badge) 35 | */ 36 | - (void)cyl_clearBadge; 37 | 38 | /** 39 | * make bage(if existing) not hiden 40 | */ 41 | - (void)cyl_resumeBadge; 42 | 43 | - (BOOL)cyl_isPauseBadge; 44 | 45 | @end 46 | 47 | NS_ASSUME_NONNULL_END 48 | 49 | -------------------------------------------------------------------------------- /CYLTabBarController/UIBarButtonItem+CYLBadgeExtention.m: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | #import "UIBarButtonItem+CYLBadgeExtention.h" 10 | #import 11 | 12 | #define kActualView [self cyl_getActualBadgeSuperView] 13 | 14 | 15 | @implementation UIBarButtonItem (CYLBadgeExtention) 16 | 17 | #pragma mark -- public methods 18 | 19 | /** 20 | * show badge with red dot style and CYLBadgeAnimationTypeNone by default. 21 | */ 22 | - (void)cyl_showBadge { 23 | [kActualView cyl_showBadge]; 24 | } 25 | 26 | - (void)cyl_showBadgeValue:(NSString *)value 27 | animationType:(CYLBadgeAnimationType)animationType { 28 | [kActualView cyl_showBadgeValue:value animationType:animationType]; 29 | } 30 | 31 | - (void)cyl_clearBadge { 32 | [kActualView cyl_clearBadge]; 33 | } 34 | 35 | - (void)cyl_resumeBadge { 36 | [kActualView cyl_resumeBadge]; 37 | } 38 | 39 | - (BOOL)cyl_isPauseBadge { 40 | return [kActualView cyl_isPauseBadge]; 41 | } 42 | 43 | - (BOOL)cyl_isShowBadge { 44 | return [kActualView cyl_isShowBadge]; 45 | } 46 | 47 | #pragma mark -- private method 48 | 49 | /** 50 | * Because UIBarButtonItem is kind of NSObject, it is not able to directly attach badge. 51 | This method is used to find actual view (non-nil) inside UIBarButtonItem instance. 52 | * 53 | * @return view 54 | */ 55 | - (UIView *)cyl_getActualBadgeSuperView { 56 | return [self valueForKeyPath:@"_view"];//use KVC to hack actual view 57 | } 58 | 59 | #pragma mark -- setter/getter 60 | - (UILabel *)cyl_badge { 61 | return kActualView.cyl_badge; 62 | } 63 | 64 | - (void)cyl_setBadge:(UILabel *)label { 65 | [kActualView cyl_setBadge:label]; 66 | } 67 | 68 | - (UIFont *)cyl_badgeFont { 69 | return kActualView.cyl_badgeFont; 70 | } 71 | 72 | - (void)cyl_setBadgeFont:(UIFont *)badgeFont { 73 | [kActualView cyl_setBadgeFont:badgeFont]; 74 | } 75 | 76 | - (UIColor *)cyl_badgeBackgroundColor { 77 | return [kActualView cyl_badgeBackgroundColor]; 78 | } 79 | 80 | - (void)cyl_setBadgeBackgroundColor:(UIColor *)badgeBackgroundColor { 81 | [kActualView cyl_setBadgeBackgroundColor:badgeBackgroundColor]; 82 | } 83 | 84 | - (UIColor *)cyl_badgeTextColor { 85 | return [kActualView cyl_badgeTextColor]; 86 | } 87 | 88 | - (void)cyl_setBadgeTextColor:(UIColor *)badgeTextColor { 89 | [kActualView cyl_setBadgeTextColor:badgeTextColor]; 90 | } 91 | 92 | - (CYLBadgeAnimationType)cyl_badgeAnimationType { 93 | return [kActualView cyl_badgeAnimationType]; 94 | } 95 | 96 | - (void)cyl_setBadgeAnimationType:(CYLBadgeAnimationType)animationType { 97 | [kActualView cyl_setBadgeAnimationType:animationType]; 98 | } 99 | 100 | - (CGRect)cyl_badgeFrame { 101 | return [kActualView cyl_badgeFrame]; 102 | } 103 | 104 | - (void)cyl_setBadgeFrame:(CGRect)badgeFrame { 105 | [kActualView cyl_setBadgeFrame:badgeFrame]; 106 | } 107 | 108 | - (CGPoint)cyl_badgeCenterOffset { 109 | return [kActualView cyl_badgeCenterOffset]; 110 | } 111 | 112 | - (void)cyl_setBadgeCenterOffset:(CGPoint)badgeCenterOffset { 113 | [kActualView cyl_setBadgeCenterOffset:badgeCenterOffset]; 114 | } 115 | 116 | - (NSInteger)cyl_badgeMaximumBadgeNumber { 117 | return [kActualView cyl_badgeMaximumBadgeNumber]; 118 | } 119 | 120 | - (void)cyl_setBadgeMaximumBadgeNumber:(NSInteger)badgeMaximumBadgeNumber { 121 | [kActualView cyl_setBadgeMaximumBadgeNumber:badgeMaximumBadgeNumber]; 122 | } 123 | 124 | - (CGFloat)cyl_badgeMargin { 125 | return [kActualView cyl_badgeMargin]; 126 | } 127 | 128 | - (void)cyl_setBadgeMargin:(CGFloat)badgeMargin { 129 | [kActualView cyl_setBadgeMargin:badgeMargin]; 130 | } 131 | 132 | - (CGFloat)cyl_badgeRadius { 133 | return [kActualView cyl_badgeRadius]; 134 | } 135 | 136 | - (void)cyl_setBadgeRadius:(CGFloat)badgeRadius { 137 | [kActualView cyl_setBadgeRadius:badgeRadius]; 138 | } 139 | 140 | - (CGFloat)cyl_badgeCornerRadius { 141 | return [kActualView cyl_badgeCornerRadius]; 142 | } 143 | 144 | - (void)cyl_setBadgeCornerRadius:(CGFloat)cyl_badgeCornerRadius { 145 | [kActualView cyl_setBadgeCornerRadius:cyl_badgeCornerRadius]; 146 | } 147 | 148 | @end 149 | -------------------------------------------------------------------------------- /CYLTabBarController/UIControl+CYLTabBarControllerExtention.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLTabBarController.m 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | @class LOTAnimationView; 13 | @interface UIControl (CYLTabBarControllerExtention) 14 | 15 | - (LOTAnimationView *)cyl_lottieAnimationView; 16 | - (BOOL)cyl_isChildViewControllerPlusButton; 17 | 18 | /*! 19 | * 调用该方法前已经添加了系统的角标,调用该方法后,系统的角标并未被移除,只是被隐藏,调用 `-cyl_removeTabBadgePoint` 后会重新展示。 20 | */ 21 | - (void)cyl_showTabBadgePoint; 22 | - (void)cyl_removeTabBadgePoint; 23 | - (BOOL)cyl_isShowTabBadgePoint; 24 | - (BOOL)cyl_isSelected; 25 | @property (nonatomic, strong, setter=cyl_setTabBadgePointView:, getter=cyl_tabBadgePointView) UIView *cyl_tabBadgePointView; 26 | @property (nonatomic, assign, setter=cyl_setTabBadgePointViewOffset:, getter=cyl_tabBadgePointViewOffset) UIOffset cyl_tabBadgePointViewOffset; 27 | /*! 28 | * PlusButton without plusViewController equals NSNotFound 29 | */ 30 | @property (nonatomic, assign, getter=cyl_tabBarChildViewControllerIndex, setter=cyl_setTabBarChildViewControllerIndex:) NSInteger cyl_tabBarChildViewControllerIndex; 31 | 32 | /*! 33 | * PlusButton has its own visible index, 34 | * in this case PlusButton is same as TabBarItem 35 | */ 36 | @property (nonatomic, assign, getter=cyl_tabBarItemVisibleIndex, setter=cyl_setTabBarItemVisibleIndex:) NSInteger cyl_tabBarItemVisibleIndex; 37 | 38 | @property (nonatomic, assign, getter=cyl_shouldNotSelect, setter=cyl_setShouldNotSelect:) BOOL cyl_shouldNotSelect; 39 | 40 | - (void)cyl_addLottieImageWithLottieURL:(NSURL *)lottieURL 41 | size:(CGSize)size; 42 | 43 | - (void)cyl_replaceTabImageViewWithNewView:(UIView *)newView 44 | show:(BOOL)show; 45 | 46 | - (void)cyl_replaceTabImageViewWithNewView:(UIView *)newView 47 | offset:(UIOffset)offset 48 | show:(BOOL)show 49 | completion:(void(^)(BOOL isReplaced, UIControl *tabBarButton, UIView *newView))completion; 50 | 51 | - (void)cyl_replaceTabButtonWithNewView:(UIView *)newView 52 | show:(BOOL)show; 53 | 54 | - (void)cyl_replaceTabButtonWithNewView:(UIView *)newView 55 | offset:(UIOffset)offset 56 | show:(BOOL)theShow 57 | completion:(void(^)(BOOL isReplaced, UIControl *tabBarButton, UIView *newView))completion; 58 | 59 | @end 60 | 61 | NS_ASSUME_NONNULL_END 62 | -------------------------------------------------------------------------------- /CYLTabBarController/UIImage+CYLTabBarControllerExtention.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+CYLTabBarControllerExtention.h 3 | // CYLTabBarController 4 | // 5 | // Created by chenyilong on 18/4/2019. 6 | // Copyright © 2019 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface UIImage (CYLTabBarControllerExtention) 14 | 15 | + (UIImage *)cyl_imageWithColor:(UIColor *)color size:(CGSize)size; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /CYLTabBarController/UIImage+CYLTabBarControllerExtention.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+CYLTabBarControllerExtention.m 3 | // CYLTabBarController 4 | // 5 | // Created by chenyilong on 18/4/2019. 6 | // Copyright © 2019 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import "UIImage+CYLTabBarControllerExtention.h" 10 | 11 | @implementation UIImage (CYLTabBarControllerExtention) 12 | 13 | + (UIImage *)cyl_imageWithColor:(UIColor *)color size:(CGSize)size { 14 | if (!color || size.width <= 0 || size.height <= 0) return nil; 15 | CGRect rect = CGRectMake(0.0f, 0.0f, size.width, size.height); 16 | UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0); 17 | CGContextRef context = UIGraphicsGetCurrentContext(); 18 | CGContextSetFillColorWithColor(context, color.CGColor); 19 | CGContextFillRect(context, rect); 20 | UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 21 | UIGraphicsEndImageContext(); 22 | return [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 23 | } 24 | 25 | + (UIImage *)cyl_assetImageName:(NSString *)assetImageName 26 | userInterfaceStyle:(NSInteger)userInterfaceStyle { 27 | UIImage *image = [UIImage imageNamed:@"image"]; 28 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 29 | if (@available(iOS 13.0, *)) { 30 | #if __has_include() 31 | UITraitCollection *trait; 32 | // UIUserInterfaceStyle currentUserInterfaceStyle = [UITraitCollection currentTraitCollection].userInterfaceStyle; 33 | // if (currentUserInterfaceStyle == UIUserInterfaceStyleUnspecified) { 34 | // currentUserInterfaceStyle == userInterfaceStyle; 35 | // } 36 | trait = [UITraitCollection traitCollectionWithUserInterfaceStyle:userInterfaceStyle]; 37 | image = [image.imageAsset imageWithTraitCollection:trait]; 38 | //TODO: 39 | return image; 40 | #else 41 | #endif 42 | } 43 | #endif 44 | return image; 45 | } 46 | 47 | + (UIImage *)cyl_lightOrDarkModeImageWithLightImage:(UIImage *)lightImage 48 | darkImage:(UIImage *)darkImage { 49 | return [self cyl_lightOrDarkModeImageWithOwner:nil lightImage:lightImage darkImage:darkImage]; 50 | } 51 | 52 | + (UIImage *)cyl_lightOrDarkModeImageWithOwner:(id)owner 53 | lightImageName:(NSString *)lightImageName 54 | darkImageName:(NSString *)darkImageName { 55 | UIImage *lightImage = [UIImage imageNamed:lightImageName]; 56 | UIImage *darkImage= [UIImage imageNamed:darkImageName]; 57 | UIImage *lightOrDarkImage = [UIImage cyl_lightOrDarkModeImageWithOwner:owner lightImage:lightImage darkImage:darkImage]; 58 | return lightOrDarkImage; 59 | } 60 | 61 | + (UIImage *)cyl_lightOrDarkModeImageWithOwner:(id)owner 62 | lightImage:(UIImage *)lightImage 63 | darkImage:(UIImage *)darkImage { 64 | BOOL isDarkImage = NO; 65 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 66 | if (@available(iOS 13.0, *)) { 67 | #if __has_include() 68 | //TODO: 69 | UITraitCollection *traitCollection = owner.traitCollection ?: [UITraitCollection currentTraitCollection]; 70 | UIUserInterfaceStyle userInterfaceStyle = traitCollection.userInterfaceStyle; 71 | isDarkImage = (userInterfaceStyle == UIUserInterfaceStyleDark); 72 | #else 73 | #endif 74 | } 75 | #endif 76 | UIImage *image = (isDarkImage ? darkImage : lightImage); 77 | return image; 78 | } 79 | 80 | @end 81 | -------------------------------------------------------------------------------- /CYLTabBarController/UITabBarItem+CYLBadgeExtention.h: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | #import 10 | #import "UIView+CYLBadgeExtention.h" 11 | #import "CYLBadgeProtocol.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface UITabBarItem (CYLBadgeExtention) 16 | 17 | - (BOOL)cyl_isShowBadge; 18 | /** 19 | * show badge with red dot style and CYLBadgeAnimationTypeNone by default. 20 | */ 21 | - (void)cyl_showBadge; 22 | 23 | /** 24 | * 25 | * @param value String value, default is `nil`. if value equal @"" means red dot style. 26 | * @param animationType animationType 27 | * @attention 28 | - 调用该方法前已经添加了系统的角标,调用该方法后,系统的角标并未被移除,只是被隐藏,调用 `-cyl_removeTabBadgePoint` 后会重新展示。 29 | - 不支持 CYLPlusChildViewController 对应的 TabBarItem 角标设置,调用会被忽略。 30 | */ 31 | - (void)cyl_showBadgeValue:(NSString *)value 32 | animationType:(CYLBadgeAnimationType)animationType; 33 | 34 | /** 35 | * clear badge(hide badge) 36 | */ 37 | - (void)cyl_clearBadge; 38 | 39 | /** 40 | * make bage(if existing) not hiden 41 | */ 42 | - (void)cyl_resumeBadge; 43 | 44 | - (BOOL)cyl_isPauseBadge; 45 | 46 | @end 47 | 48 | NS_ASSUME_NONNULL_END 49 | 50 | -------------------------------------------------------------------------------- /CYLTabBarController/UITabBarItem+CYLTabBarControllerExtention.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLTabBarController.m 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface UITabBarItem (CYLTabBarControllerExtention) 14 | 15 | @property (nonatomic, readonly) UIControl *cyl_tabButton; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /CYLTabBarController/UITabBarItem+CYLTabBarControllerExtention.m: -------------------------------------------------------------------------------- 1 | // 2 | // CYLTabBarController.m 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import "UITabBarItem+CYLTabBarControllerExtention.h" 10 | #import "UIControl+CYLTabBarControllerExtention.h" 11 | 12 | @implementation UITabBarItem (CYLTabBarControllerExtention) 13 | 14 | - (UIControl *)cyl_tabButton { 15 | UIControl *control = [self valueForKeyPath:@"_view"]; 16 | return control; 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /CYLTabBarController/UIView+CYLBadgeExtention.h: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | #import 10 | #import "CYLBadgeProtocol.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | #pragma mark -- badge apis 15 | 16 | @interface UIView (CYLBadgeExtention) 17 | 18 | - (BOOL)cyl_isShowBadge; 19 | 20 | /** 21 | * show badge with red dot style and CYLBadgeAnimationTypeNone by default. 22 | */ 23 | - (void)cyl_showBadge; 24 | 25 | /** 26 | * cyl_showBadge 27 | * 28 | * @param value String value, default is `nil`. if value equal @"" means red dot style. 29 | * @param animationType animationType 30 | */ 31 | - (void)cyl_showBadgeValue:(NSString *)value 32 | animationType:(CYLBadgeAnimationType)animationType; 33 | ; 34 | 35 | // wBadgeStyle default is CYLBadgeStyleNumber ; 36 | // CYLBadgeAnimationType defualt is CYLBadgeAnimationTypeNone 37 | - (void)cyl_showBadgeValue:(NSString *)value; 38 | 39 | /** 40 | * clear badge(hide badge) 41 | */ 42 | - (void)cyl_clearBadge; 43 | 44 | /** 45 | * make bage(if existing) not hiden 46 | */ 47 | - (void)cyl_resumeBadge; 48 | 49 | - (BOOL)cyl_isPauseBadge; 50 | 51 | - (BOOL)cyl_isInvisiable; 52 | - (BOOL)cyl_canNotResponseEvent; 53 | 54 | @end 55 | 56 | NS_ASSUME_NONNULL_END 57 | 58 | -------------------------------------------------------------------------------- /CYLTabBarController/UIView+CYLTabBarControllerExtention.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLTabBarController.m 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "CYLConstants.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | 16 | 17 | @interface UIView (CYLTabBarControllerExtention) 18 | 19 | - (BOOL)cyl_isPlusButton; 20 | - (BOOL)cyl_isTabButton; 21 | - (BOOL)cyl_isTabImageView; 22 | - (BOOL)cyl_isTabLabel; 23 | - (BOOL)cyl_isTabBadgeView; 24 | - (BOOL)cyl_isTabBackgroundView; 25 | - (UIView *)cyl_tabBadgeView; 26 | - (UIImageView *)cyl_tabImageView; 27 | - (UILabel *)cyl_tabLabel; 28 | - (UIImageView *)cyl_tabShadowImageView; 29 | - (UIVisualEffectView *)cyl_tabEffectView; 30 | - (BOOL)cyl_isLottieAnimationView; 31 | - (UIView *)cyl_tabBackgroundView; 32 | + (UIView *)cyl_tabBadgePointViewWithClolor:(UIColor *)color radius:(CGFloat)radius; 33 | - (NSArray *)cyl_allSubviews; 34 | 35 | @end 36 | 37 | @interface UIView (CYLTabBarControllerExtentionDeprecated) 38 | - (UIView *)cyl_tabBadgeBackgroundView CYL_DEPRECATED("Deprecated in 1.6.0. Use `+[CYLPlusButton cyl_tabBackgroundView]` instead."); 39 | - (UIView *)cyl_tabBadgeBackgroundSeparator CYL_DEPRECATED("Deprecated in 1.6.0. Use `+[CYLPlusButton cyl_tabShadowImageView]` instead."); 40 | 41 | 42 | @end 43 | 44 | NS_ASSUME_NONNULL_END 45 | -------------------------------------------------------------------------------- /CYLTabBarController/UIViewController+CYLNavigationControllerExtention.h: -------------------------------------------------------------------------------- 1 | /* 2 | //  CYLTabBarController 3 | //  CYLTabBarController 4 | // 5 | //  Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 03/06/19. 6 | //  Copyright © 2019 https://github.com/ChenYilong . All rights reserved. 7 | */ 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface UIViewController (CYLNavigationControllerExtention) 14 | 15 | @property (nonatomic, assign, getter=cyl_disablePopGestureRecognizer, setter=cyl_setDisablePopGestureRecognizer:) BOOL cyl_disablePopGestureRecognizer; 16 | @property (nonatomic, assign, getter=cyl_hideNavigationBarSeparator, setter=cyl_setHideNavigationBarSeparator:) BOOL cyl_hideNavigationBarSeparator; 17 | @property (nonatomic, assign, getter=cyl_navigationBarHidden, setter=cyl_setNavigationBarHidden:) BOOL cyl_navigationBarHidden; 18 | 19 | /*! 20 | * 使用方法:用在viewWillDisappear/dealloc 21 | * 作用:在左滑动的过渡的时间段内禁用interactivePopGestureRecognizer 22 | */ 23 | - (void)cyl_disableInteractivePopGestureRecognizer; 24 | /*! 25 | * use in viewDidDisappear 26 | * 作用:在左滑动的结束后启用interactivePopGestureRecognizer 27 | */ 28 | - (void)cyl_enableInteractivePopGestureRecognizer; 29 | /*! 30 | * use in viewDidAppear 31 | * 当新的视图控制器加载完成后再启用 32 | */ 33 | - (void)cyl_resetInteractivePopGestureRecognizer; 34 | /*! 35 | * use in viewWillAppear 36 | */ 37 | - (void)cyl_hideNavigationBarSeparatorIfNeeded; 38 | 39 | - (BOOL)cyl_shouldNavigationBarVisible; 40 | //use in viewWillDisappear 41 | - (void)cyl_setNavigationBarVisibleIfNeeded:(BOOL)animated; 42 | //use in viewWillAppear 43 | - (void)cyl_setNavigationBarHiddenIfNeeded:(BOOL)animated; 44 | 45 | - (void)cyl_viewWillAppearNavigationSetting:(BOOL)animated; 46 | - (void)cyl_viewWillDisappearNavigationSetting:(BOOL)animated; 47 | - (void)cyl_viewDidDisappearNavigationSetting:(BOOL)animated; 48 | - (void)cyl_viewDidAppearNavigationSetting:(BOOL)animated; 49 | - (void)cyl_deallocNavigationSetting; 50 | 51 | @end 52 | 53 | NS_ASSUME_NONNULL_END 54 | -------------------------------------------------------------------------------- /CYLTabBarControllerTests/CYLTabBarControllerTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // CYLTabBarControllerTests.m 3 | // CYLTabBarControllerTests 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 15/10/25. 6 | // Copyright (c) 2018年 https://github.com/ChenYilong .All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface CYLTabBarControllerTests : XCTestCase 13 | 14 | @end 15 | 16 | @implementation CYLTabBarControllerTests 17 | 18 | - (void)setUp { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown { 24 | // Put teardown code here. This method is called after the invocation of each test method in the class. 25 | [super tearDown]; 26 | } 27 | 28 | - (void)testExample { 29 | // This is an example of a functional test case. 30 | XCTAssert(YES, @"Pass"); 31 | } 32 | 33 | - (void)testPerformanceExample { 34 | // This is an example of a performance test case. 35 | [self measureBlock:^{ 36 | // Put the code you want to measure the time of here. 37 | }]; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /CYLTabBarControllerTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example-Swift/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // 4 | // v1.16.0 Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 5 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 6 | // 7 | 8 | import CYLTabBarController 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate, UITabBarControllerDelegate { 13 | var window: UIWindow? 14 | func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 15 | CYLPlusButtonSubclass.register() 16 | 17 | let mainTabBarVc = MainTabBarController(viewControllers: viewControllers(), tabBarItemsAttributes: tabBarItemsAttributesForController()) 18 | 19 | window = UIWindow() 20 | window?.frame = UIScreen.main.bounds 21 | window?.rootViewController = mainTabBarVc 22 | mainTabBarVc?.hideTabBadgeBackgroundSeparator() 23 | mainTabBarVc.hideTabBarShadowImageView(); 24 | 25 | window?.makeKeyAndVisible() 26 | 27 | UITabBar.appearance().backgroundColor = UIColor.white 28 | 29 | return true 30 | } 31 | 32 | func viewControllers() -> [UINavigationController] { 33 | let home = UINavigationController(rootViewController: HomeViewController()) 34 | let connection = UINavigationController(rootViewController: ConnectionViewController()) 35 | let message = UINavigationController(rootViewController: MessageViewController()) 36 | let personal = UINavigationController(rootViewController: PersonalViewController()) 37 | let viewControllers = [home, connection, message, personal] 38 | 39 | return viewControllers 40 | } 41 | 42 | func tabBarItemsAttributesForController() -> [[String: String]] { 43 | let tabBarItemOne = [CYLTabBarItemTitle: "首页", 44 | CYLTabBarItemImage: "home_normal", 45 | CYLTabBarItemSelectedImage: "home_highlight"] 46 | 47 | let tabBarItemTwo = [CYLTabBarItemTitle: "同城", 48 | CYLTabBarItemImage: "mycity_normal", 49 | CYLTabBarItemSelectedImage: "mycity_highlight"] 50 | 51 | let tabBarItemThree = [CYLTabBarItemTitle: "消息", 52 | CYLTabBarItemImage: "message_normal", 53 | CYLTabBarItemSelectedImage: "message_highlight"] 54 | 55 | let tabBarItemFour = [CYLTabBarItemTitle: "我的", 56 | CYLTabBarItemImage: "account_normal", 57 | CYLTabBarItemSelectedImage: "account_highlight"] 58 | let tabBarItemsAttributes = [tabBarItemOne, tabBarItemTwo, tabBarItemThree, tabBarItemFour] 59 | return tabBarItemsAttributes 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /Example-Swift/CYLTabBarController-Swift.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example-Swift/CYLTabBarController-Swift.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example-Swift/CYLTabBarController-Swift.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example-Swift/CYLTabbarController-Swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example-Swift/CYLTabbarController-Swift.xcodeproj/xcuserdata/chenyilong.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | CYLTabBarController-Swift.xcscheme 8 | 9 | orderHint 10 | 2 11 | 12 | CYLTabBarController-Swift.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Example-Swift/MainTabBarController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MainTabBarController.swift 3 | // 4 | // v1.16.0 Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 5 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 6 | // 7 | 8 | import CYLTabBarController 9 | import UIKit 10 | 11 | class MainTabBarController: CYLTabBarController { 12 | override func viewDidLoad() { 13 | super.viewDidLoad() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Example-Swift/Module/Connection/Controller/ConnectionViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ConnectionViewController.swift 3 | // 4 | // v1.16.0 Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 5 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 6 | // 7 | 8 | import UIKit 9 | 10 | class ConnectionViewController: UIViewController { 11 | override func viewDidLoad() { 12 | super.viewDidLoad() 13 | 14 | view.backgroundColor = UIColor.blue 15 | } 16 | 17 | override func didReceiveMemoryWarning() { 18 | super.didReceiveMemoryWarning() 19 | // Dispose of any resources that can be recreated. 20 | } 21 | 22 | /* 23 | // MARK: - Navigation 24 | 25 | // In a storyboard-based application, you will often want to do a little preparation before navigation 26 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 27 | // Get the new view controller using segue.destinationViewController. 28 | // Pass the selected object to the new view controller. 29 | } 30 | */ 31 | } 32 | -------------------------------------------------------------------------------- /Example-Swift/Module/Home/Controller/HomeViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeViewController.swift 3 | // 4 | // v1.16.0 Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 5 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 6 | // 7 | 8 | import UIKit 9 | 10 | class HomeViewController: UIViewController { 11 | override func viewDidLoad() { 12 | super.viewDidLoad() 13 | 14 | view.backgroundColor = UIColor.orange 15 | } 16 | 17 | override func didReceiveMemoryWarning() { 18 | super.didReceiveMemoryWarning() 19 | // Dispose of any resources that can be recreated. 20 | } 21 | 22 | /* 23 | // MARK: - Navigation 24 | 25 | // In a storyboard-based application, you will often want to do a little preparation before navigation 26 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 27 | // Get the new view controller using segue.destinationViewController. 28 | // Pass the selected object to the new view controller. 29 | } 30 | */ 31 | } 32 | -------------------------------------------------------------------------------- /Example-Swift/Module/Message/Controller/MessageViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessageViewController.swift 3 | // SwiftDemo 4 | // 5 | // Created by Anthony on 2017/12/29. 6 | // Copyright © 2017年 Anthony. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MessageViewController: UIViewController { 12 | // private weak var myLabel1:UILabel! 13 | // private weak var myLabel2:UILabel! 14 | // private weak var myLabel3:UILabel! 15 | // private weak var myLabel4:UILabel! 16 | // private weak var myLabel5:UILabel! 17 | // private weak var myLabel6:UILabel! 18 | // 19 | // var buttonColor: UIColor { 20 | // return UIColor(named: "buttonColor")! 21 | // } 22 | // 23 | // var labelColor: UIColor { 24 | // return UIColor(named: "labelColor")! 25 | // } 26 | // 27 | // var textFieldColor: UIColor { 28 | // return UIColor(named: "textFieldColor")! 29 | // } 30 | 31 | override func viewDidLoad() { 32 | super.viewDidLoad() 33 | 34 | view.backgroundColor = UIColor.gray 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Example-Swift/Module/Personal/Controller/PersonalViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PersonalViewController.swift 3 | // 4 | // v1.16.0 Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 5 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 6 | // 7 | 8 | import UIKit 9 | 10 | class PersonalViewController: UIViewController { 11 | override func viewDidLoad() { 12 | super.viewDidLoad() 13 | 14 | view.backgroundColor = UIColor.green 15 | } 16 | 17 | override func didReceiveMemoryWarning() { 18 | super.didReceiveMemoryWarning() 19 | // Dispose of any resources that can be recreated. 20 | } 21 | 22 | /* 23 | // MARK: - Navigation 24 | 25 | // In a storyboard-based application, you will often want to do a little preparation before navigation 26 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 27 | // Get the new view controller using segue.destinationViewController. 28 | // Pass the selected object to the new view controller. 29 | } 30 | */ 31 | } 32 | -------------------------------------------------------------------------------- /Example-Swift/Module/Publish/Controller/PublishViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PublishViewController.swift 3 | // CYLTabbarController-Swift 4 | // v1.16.0 Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 5 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 6 | // 7 | 8 | import UIKit 9 | 10 | class PublishViewController: UIViewController { 11 | override func viewDidLoad() { 12 | super.viewDidLoad() 13 | 14 | view.backgroundColor = UIColor.red 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | override func didReceiveMemoryWarning() { 20 | super.didReceiveMemoryWarning() 21 | // Dispose of any resources that can be recreated. 22 | } 23 | 24 | /* 25 | // MARK: - Navigation 26 | 27 | // In a storyboard-based application, you will often want to do a little preparation before navigation 28 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 29 | // Get the new view controller using segue.destinationViewController. 30 | // Pass the selected object to the new view controller. 31 | } 32 | */ 33 | } 34 | -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "size" : "29x29", 15 | "idiom" : "iphone", 16 | "filename" : "Icon-Small.png", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "size" : "29x29", 21 | "idiom" : "iphone", 22 | "filename" : "Icon-Small@2x.png", 23 | "scale" : "2x" 24 | }, 25 | { 26 | "size" : "29x29", 27 | "idiom" : "iphone", 28 | "filename" : "Icon-Small@3x.png", 29 | "scale" : "3x" 30 | }, 31 | { 32 | "size" : "40x40", 33 | "idiom" : "iphone", 34 | "filename" : "Icon-40@2x.png", 35 | "scale" : "2x" 36 | }, 37 | { 38 | "size" : "40x40", 39 | "idiom" : "iphone", 40 | "filename" : "Icon-40@3x.png", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "size" : "57x57", 45 | "idiom" : "iphone", 46 | "filename" : "Icon.png", 47 | "scale" : "1x" 48 | }, 49 | { 50 | "size" : "57x57", 51 | "idiom" : "iphone", 52 | "filename" : "Icon@2x.png", 53 | "scale" : "2x" 54 | }, 55 | { 56 | "size" : "60x60", 57 | "idiom" : "iphone", 58 | "filename" : "Icon-60@2x.png", 59 | "scale" : "2x" 60 | }, 61 | { 62 | "size" : "60x60", 63 | "idiom" : "iphone", 64 | "filename" : "Icon-60@3x.png", 65 | "scale" : "3x" 66 | }, 67 | { 68 | "idiom" : "ipad", 69 | "size" : "20x20", 70 | "scale" : "1x" 71 | }, 72 | { 73 | "idiom" : "ipad", 74 | "size" : "20x20", 75 | "scale" : "2x" 76 | }, 77 | { 78 | "size" : "29x29", 79 | "idiom" : "ipad", 80 | "filename" : "Icon-Small.png", 81 | "scale" : "1x" 82 | }, 83 | { 84 | "size" : "29x29", 85 | "idiom" : "ipad", 86 | "filename" : "Icon-Small@2x.png", 87 | "scale" : "2x" 88 | }, 89 | { 90 | "size" : "40x40", 91 | "idiom" : "ipad", 92 | "filename" : "Icon-40.png", 93 | "scale" : "1x" 94 | }, 95 | { 96 | "size" : "40x40", 97 | "idiom" : "ipad", 98 | "filename" : "Icon-40@2x.png", 99 | "scale" : "2x" 100 | }, 101 | { 102 | "size" : "50x50", 103 | "idiom" : "ipad", 104 | "filename" : "Icon-Small-50.png", 105 | "scale" : "1x" 106 | }, 107 | { 108 | "size" : "50x50", 109 | "idiom" : "ipad", 110 | "filename" : "Icon-Small-50@2x.png", 111 | "scale" : "2x" 112 | }, 113 | { 114 | "size" : "72x72", 115 | "idiom" : "ipad", 116 | "filename" : "Icon-72.png", 117 | "scale" : "1x" 118 | }, 119 | { 120 | "size" : "72x72", 121 | "idiom" : "ipad", 122 | "filename" : "Icon-72@2x.png", 123 | "scale" : "2x" 124 | }, 125 | { 126 | "size" : "76x76", 127 | "idiom" : "ipad", 128 | "filename" : "Icon-76.png", 129 | "scale" : "1x" 130 | }, 131 | { 132 | "size" : "76x76", 133 | "idiom" : "ipad", 134 | "filename" : "Icon-76@2x.png", 135 | "scale" : "2x" 136 | }, 137 | { 138 | "size" : "83.5x83.5", 139 | "idiom" : "ipad", 140 | "filename" : "Icon-83.5@2x.png", 141 | "scale" : "2x" 142 | }, 143 | { 144 | "idiom" : "ios-marketing", 145 | "size" : "1024x1024", 146 | "scale" : "1x" 147 | } 148 | ], 149 | "info" : { 150 | "version" : 1, 151 | "author" : "xcode" 152 | } 153 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-40.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-72.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/AppIcon.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Landscape-1792h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Landscape-1792h@3x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Landscape-2436h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Landscape-2436h@3x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Landscape-2688h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Landscape-2688h@3x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Portrait-1792h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Portrait-1792h@3x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Portrait-2436h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Portrait-2436h@3x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Portrait-2688h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Portrait-2688h@3x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad~landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad~landscape.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad~landscape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad~landscape@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad~landscape~nostatusbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad~landscape~nostatusbar.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad~landscape~nostatusbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad~landscape~nostatusbar@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad~nostatusbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad~nostatusbar.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad~nostatusbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/LaunchImage.launchimage/Default~ipad~nostatusbar@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/account_highlight.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "account_highlight@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "original" 23 | } 24 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/account_highlight.imageset/account_highlight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/TabBarIcon/account_highlight.imageset/account_highlight@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/account_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "account_normal@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "original" 23 | } 24 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/account_normal.imageset/account_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/TabBarIcon/account_normal.imageset/account_normal@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/home_highlight.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "home_highlight@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "original" 23 | } 24 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/home_highlight.imageset/home_highlight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/TabBarIcon/home_highlight.imageset/home_highlight@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/home_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "home_normal@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "original" 23 | } 24 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/home_normal.imageset/home_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/TabBarIcon/home_normal.imageset/home_normal@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/message_highlight.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "message_highlight@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "original" 23 | } 24 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/message_highlight.imageset/message_highlight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/TabBarIcon/message_highlight.imageset/message_highlight@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/message_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "message_normal@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "original" 23 | } 24 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/message_normal.imageset/message_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/TabBarIcon/message_normal.imageset/message_normal@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/mycity_highlight.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "mycity_highlight@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "original" 23 | } 24 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/mycity_highlight.imageset/mycity_highlight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/TabBarIcon/mycity_highlight.imageset/mycity_highlight@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/mycity_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "mycity_normal@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "original" 23 | } 24 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/mycity_normal.imageset/mycity_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/TabBarIcon/mycity_normal.imageset/mycity_normal@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/post_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "post_normal@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "original" 23 | } 24 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/post_normal.imageset/post_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/TabBarIcon/post_normal.imageset/post_normal@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/tabbar_background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_background@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/tabbar_background.imageset/tabbar_background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/TabBarIcon/tabbar_background.imageset/tabbar_background@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/tapbar_top_line.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tapbar_top_line@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "original" 23 | } 24 | } -------------------------------------------------------------------------------- /Example-Swift/Other/Assets.xcassets/TabBarIcon/tapbar_top_line.imageset/tapbar_top_line@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example-Swift/Other/Assets.xcassets/TabBarIcon/tapbar_top_line.imageset/tapbar_top_line@2x.png -------------------------------------------------------------------------------- /Example-Swift/Other/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Example-Swift/Other/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 28 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Example-Swift/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 | UIMainStoryboardFile 24 | Main 25 | UIRequiredDeviceCapabilities 26 | 27 | armv7 28 | 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Example-Swift/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | source 'git@github.com:CocoaPods/Specs.git' 4 | 5 | 6 | # Uncomment the next line to define a global platform for your project 7 | # platform :ios, '9.0' 8 | source 'git@github.com:CocoaPods/Specs.git' 9 | 10 | platform:ios,'9.0' 11 | inhibit_all_warnings! 12 | 13 | target 'CYLTabBarController-Swift' do 14 | use_frameworks! 15 | pod 'CYLTabBarController', :path => '../' 16 | end 17 | -------------------------------------------------------------------------------- /Example-Swift/View/CYLPlusButtonSubclass.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CYLPlusButtonSubclass.swift 3 | // 4 | // v1.16.0 Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 5 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 6 | // 7 | 8 | import CYLTabBarController 9 | import UIKit 10 | 11 | class CYLPlusButtonSubclass: CYLPlusButton, CYLPlusButtonSubclassing { 12 | static func plusButton() -> Any! { 13 | let button = CYLPlusButtonSubclass() 14 | button.setImage(UIImage(named: "post_normal"), for: .normal) 15 | button.titleLabel?.textAlignment = .center 16 | 17 | button.titleLabel?.font = UIFont.systemFont(ofSize: 10) 18 | 19 | button.setTitle("发布", for: .normal) 20 | button.setTitleColor(UIColor.gray, for: .normal) 21 | 22 | button.setTitle("选中", for: .selected) 23 | button.setTitleColor(UIColor.blue, for: .selected) 24 | 25 | button.adjustsImageWhenHighlighted = false 26 | button.sizeToFit() 27 | // button.addTarget(self, action: #selector(testClick(sender:)), for: .touchUpInside) 28 | return button 29 | } 30 | 31 | // @objc static func testClick(sender: UIButton){ 32 | // print("testClick") 33 | // } 34 | 35 | static func indexOfPlusButtonInTabBar() -> UInt { 36 | return 2 37 | } 38 | 39 | static func multiplier(ofTabBarHeight _: CGFloat) -> CGFloat { 40 | return 0.3 41 | } 42 | 43 | static func constantOfPlusButtonCenterYOffset(forTabBarHeight _: CGFloat) -> CGFloat { 44 | return -10 45 | } 46 | 47 | static func plusChildViewController() -> UIViewController! { 48 | let vc = PublishViewController() 49 | let nav = UINavigationController(rootViewController: vc) 50 | return nav 51 | } 52 | 53 | static func shouldSelectPlusChildViewController() -> Bool { 54 | return true 55 | } 56 | 57 | override func layoutSubviews() { 58 | super.layoutSubviews() 59 | 60 | // tabbar UI layout setup 61 | let imageViewEdgeWidth: CGFloat = bounds.size.width * 0.7 62 | let imageViewEdgeHeight: CGFloat = imageViewEdgeWidth * 0.9 63 | 64 | let centerOfView = bounds.size.width * 0.5 65 | let labelLineHeight = titleLabel!.font.lineHeight 66 | let verticalMargin = (bounds.size.height - labelLineHeight - imageViewEdgeHeight) * 0.5 67 | 68 | let centerOfImageView = verticalMargin + imageViewEdgeHeight * 0.5 69 | let centerOfTitleLabel = imageViewEdgeHeight + verticalMargin * 2 + labelLineHeight * 0.5 + 10 70 | 71 | // imageView position layout 72 | imageView!.bounds = CGRect(x: 0, y: 0, width: imageViewEdgeWidth, height: imageViewEdgeHeight) 73 | imageView!.center = CGPoint(x: centerOfView, y: centerOfImageView) 74 | 75 | // title position layout 76 | titleLabel!.bounds = CGRect(x: 0, y: 0, width: bounds.size.width, height: labelLineHeight) 77 | titleLabel!.center = CGPoint(x: centerOfView, y: centerOfTitleLabel) 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /Example/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // CYLTabBarControllerDemo 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /Example/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "CYLPlusButtonSubclass.h" 11 | #import "CYLMainRootViewController.h" 12 | 13 | @interface AppDelegate () 14 | @property (nonatomic, strong) NSMutableData *data; 15 | @end 16 | 17 | @implementation AppDelegate 18 | 19 | 20 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 21 | 22 | [UIApplication sharedApplication].statusBarHidden = NO; 23 | // 设置主窗口,并设置根控制器 24 | self.window = [[UIWindow alloc] init]; 25 | self.window.frame = [UIScreen mainScreen].bounds; 26 | [self.window makeKeyAndVisible]; 27 | CYLMainRootViewController *rootViewController = [[CYLMainRootViewController alloc] init]; 28 | [self.window setRootViewController:rootViewController]; 29 | [self setUpNavigationBarAppearance]; 30 | return YES; 31 | } 32 | 33 | #pragma clang diagnostic push 34 | #pragma clang diagnostic ignored "-Wmethod-signatures" 35 | - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { 36 | //设置强制旋转屏幕 37 | if (self.cyl_isForceLandscape) { 38 | //只支持横屏 39 | return UIInterfaceOrientationMaskLandscape; 40 | } else { 41 | //只支持竖屏 42 | return UIInterfaceOrientationMaskPortrait; 43 | } 44 | } 45 | #pragma clang diagnostic pop 46 | 47 | /** 48 | * 设置navigationBar样式 49 | */ 50 | - (void)setUpNavigationBarAppearance { 51 | UINavigationBar *navigationBarAppearance = [UINavigationBar appearance]; 52 | UIColor *backgroundColor = [UIColor cyl_systemBackgroundColor]; 53 | NSDictionary *textAttributes = nil; 54 | UIColor *labelColor = [UIColor cyl_labelColor]; 55 | 56 | if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { 57 | textAttributes = @{ 58 | NSFontAttributeName : [UIFont boldSystemFontOfSize:18], 59 | NSForegroundColorAttributeName : labelColor, 60 | }; 61 | } else { 62 | #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 63 | textAttributes = @{ 64 | UITextAttributeFont : [UIFont boldSystemFontOfSize:18], 65 | UITextAttributeTextColor : labelColor, 66 | UITextAttributeTextShadowColor : [UIColor clearColor], 67 | UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero], 68 | }; 69 | #endif 70 | } 71 | [navigationBarAppearance setBarTintColor:backgroundColor]; 72 | [navigationBarAppearance setTitleTextAttributes:textAttributes]; 73 | } 74 | 75 | @end 76 | -------------------------------------------------------------------------------- /Example/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 23 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Example/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Example/CYLMainRootViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLMainRootViewController.h 3 | // CYLTabBarController 4 | // 5 | // Created by chenyilong on 7/3/2019. 6 | // Copyright © 2019 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | #import 9 | 10 | #if __has_include() 11 | #import 12 | #else 13 | #import "CYLTabBarController.h" 14 | #endif 15 | 16 | NS_ASSUME_NONNULL_BEGIN 17 | 18 | @interface CYLMainRootViewController : UINavigationController 19 | 20 | - (CYLTabBarController *)createNewTabBarWithContext:(NSString *)context; 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /Example/CYLMainRootViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CYLMainRootViewController.m 3 | // CYLTabBarController 4 | // 5 | // Created by chenyilong on 7/3/2019. 6 | // Copyright © 2019 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import "CYLMainRootViewController.h" 10 | #import "MainTabBarController.h" 11 | #import "CYLPlusButtonSubclass.h" 12 | 13 | @interface CYLMainRootViewController () 14 | 15 | @end 16 | 17 | @implementation CYLMainRootViewController 18 | 19 | - (void)viewDidLoad { 20 | [super viewDidLoad]; 21 | self.navigationBarHidden = YES; 22 | self.view.backgroundColor = [UIColor whiteColor]; 23 | [self createNewTabBar]; 24 | } 25 | 26 | - (CYLTabBarController *)createNewTabBar { 27 | [CYLPlusButtonSubclass registerPlusButton]; 28 | return [self createNewTabBarWithContext:nil]; 29 | } 30 | 31 | - (CYLTabBarController *)createNewTabBarWithContext:(NSString *)context { 32 | MainTabBarController *tabBarController = [[MainTabBarController alloc] initWithContext:context]; 33 | self.viewControllers = @[tabBarController]; 34 | return tabBarController; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Example/Classes/Module/Home/CYLHomeViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLHomeViewController.h 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import 10 | #if __has_include() 11 | #import 12 | #else 13 | #import "CYLTabBarController.h" 14 | #endif 15 | 16 | @interface CYLHomeViewController : CYLBaseTableViewController 17 | 18 | - (void)refresh; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Classes/Module/Message/CYLMessageViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLMessageViewController.h 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import 10 | #if __has_include() 11 | #import 12 | #else 13 | #import "CYLTabBarController.h" 14 | #endif 15 | 16 | @interface CYLMessageViewController : CYLBaseTableViewController 17 | 18 | - (void)refresh; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Classes/Module/Message/CYLMessageViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CYLMessageViewController.m 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import "CYLMessageViewController.h" 10 | #import "CYLMainRootViewController.h" 11 | #import 12 | 13 | @implementation CYLMessageViewController 14 | 15 | #pragma mark - View lifecycle 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | self.view.backgroundColor = [UIColor whiteColor]; 20 | self.navigationItem.title = @"消息"; //✅sets navigation bar title.The right way to set the title of the navigation 21 | self.tabBarItem.title = @"消息"; //❌sets tab bar title. Even the `tabBarItem.title` changed, this will be ignored in tabbar. 22 | //self.title = @"消息1"; //❌sets both of these. Do not do this‼️‼️ This may cause something strange like this : http://i68.tinypic.com/282l3x4.jpg . 23 | __weak __typeof(self) weakSelf = self; 24 | self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ 25 | //Call this Block When enter the refresh status automatically 26 | NSUInteger delaySeconds = 1; 27 | dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delaySeconds * NSEC_PER_SEC)); 28 | dispatch_after(when, dispatch_get_main_queue(), ^{ 29 | [weakSelf.tableView.mj_header endRefreshing]; 30 | }); 31 | }]; 32 | } 33 | 34 | - (void)refresh { 35 | [self.tableView.mj_header beginRefreshing]; 36 | NSUInteger delaySeconds = 1; 37 | dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delaySeconds * NSEC_PER_SEC)); 38 | dispatch_after(when, dispatch_get_main_queue(), ^{ 39 | [self.tableView.mj_header endRefreshing]; 40 | }); 41 | } 42 | #pragma mark - Methods 43 | 44 | - (void)viewDidAppear:(BOOL)animated { 45 | [self.navigationItem.leftBarButtonItem cyl_showBadge]; 46 | } 47 | - (void)configureCell:(UITableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath { 48 | [[cell textLabel] setText:[NSString stringWithFormat:@"%@ CYLTabBarController %@", self.tabBarItem.title, @(indexPath.row)]]; 49 | } 50 | 51 | #pragma mark - Table view 52 | 53 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 54 | static NSString * CellIdentifier = @"Cell"; 55 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 56 | if (!cell) { 57 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 58 | } 59 | [self configureCell:cell forIndexPath:indexPath]; 60 | return cell; 61 | } 62 | 63 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 64 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 65 | // NSNumber *badgeNumber = @(indexPath.row); 66 | // self.navigationItem.title = [NSString stringWithFormat:@"首页(%@)", badgeNumber]; //sets navigation bar title. 67 | 68 | // [self.navigationController.tabBarItem setBadgeValue:[NSString stringWithFormat:@"%@", badgeNumber]]; 69 | 70 | // CYLTabBarControllerConfig *tabBarControllerConfig = [[CYLTabBarControllerConfig alloc] init]; 71 | // CYLTabBarController *tabBarController = tabBarControllerConfig.tabBarController; 72 | // tabBarController.delegate = self; 73 | // 74 | // [self cyl_showBadgeValue:[NSString stringWithFormat:@"%@", @(indexPath.row)] animationType:CYLBadgeAnimationTypeScale]; 75 | // [self pushToNewViewController]; 76 | CYLTabBarController *tabBarController = [[CYLMainRootViewController new] createNewTabBarWithContext:NSStringFromClass([self class])]; 77 | [self.navigationController pushViewController:tabBarController animated:YES]; 78 | } 79 | 80 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 81 | return 15; 82 | } 83 | 84 | @end 85 | -------------------------------------------------------------------------------- /Example/Classes/Module/Mine/CYLMineViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLMineViewController.h 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import 10 | #if __has_include() 11 | #import 12 | #else 13 | #import "CYLTabBarController.h" 14 | #endif 15 | 16 | @interface CYLMineViewController : CYLBaseTableViewController 17 | 18 | - (void)testPush; 19 | 20 | - (void)refresh; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Example/Classes/Module/Mine/CYLMineViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CYLMineViewController.m 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import "CYLMineViewController.h" 10 | #import "CYLDetailsViewController.h" 11 | #import 12 | 13 | @implementation CYLMineViewController 14 | 15 | #pragma mark - View lifecycle 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | self.view.backgroundColor = [UIColor whiteColor]; 20 | self.navigationItem.title = @"我的"; //✅sets navigation bar title.The right way to set the title of the navigation 21 | self.tabBarItem.title = @"我的"; //❌sets tab bar title. Even the `tabBarItem.title` changed, this will be ignored in tabbar. 22 | //self.title = @"我的1"; //❌sets both of these. Do not do this‼️‼️ This may cause something strange like this : http://i68.tinypic.com/282l3x4.jpg . 23 | // [self.navigationController.tabBarItem setBadgeValue:@"3"]; 24 | __weak __typeof(self) weakSelf = self; 25 | self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ 26 | //Call this Block When enter the refresh status automatically 27 | NSUInteger delaySeconds = 1; 28 | dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delaySeconds * NSEC_PER_SEC)); 29 | dispatch_after(when, dispatch_get_main_queue(), ^{ 30 | [weakSelf.tableView.mj_header endRefreshing]; 31 | }); 32 | }]; 33 | } 34 | 35 | - (void)refresh { 36 | [self.tableView.mj_header beginRefreshing]; 37 | NSUInteger delaySeconds = 1; 38 | dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delaySeconds * NSEC_PER_SEC)); 39 | dispatch_after(when, dispatch_get_main_queue(), ^{ 40 | [self.tableView.mj_header endRefreshing]; 41 | }); 42 | } 43 | #pragma mark - Methods 44 | 45 | - (void)configureCell:(UITableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath { 46 | [[cell textLabel] setText:[NSString stringWithFormat:@"%@ CYLTabBarController %@", self.tabBarItem.title, @(indexPath.row)]]; 47 | } 48 | 49 | #pragma mark - Table view 50 | 51 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 52 | static NSString * CellIdentifier = @"Cell"; 53 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 54 | if (!cell) { 55 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 56 | } 57 | [self configureCell:cell forIndexPath:indexPath]; 58 | return cell; 59 | } 60 | 61 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 62 | return 30; 63 | } 64 | 65 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 66 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 67 | [self cyl_showBadgeValue:[NSString stringWithFormat:@"%@", @(indexPath.row)] animationType:CYLBadgeAnimationTypeNone]; 68 | [self testPush]; 69 | } 70 | 71 | - (void)testPush { 72 | UIViewController *viewController = [[UIViewController alloc] init]; 73 | viewController.view.backgroundColor = [UIColor redColor]; 74 | [self.navigationController pushViewController:viewController animated:YES]; 75 | } 76 | 77 | @end 78 | -------------------------------------------------------------------------------- /Example/Classes/Module/Other/CYLPlusDemoChildViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLPlusDemoChildViewController.h 3 | // CYLTabBarController 4 | // 5 | // Created by chenyilong on 19/12/2017. 6 | // Copyright © 2017 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CYLPlusDemoChildViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Classes/Module/Other/CYLPlusDemoChildViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CYLPlusDemoChildViewController.m 3 | // CYLTabBarController 4 | // 5 | // Created by chenyilong on 19/12/2017. 6 | // Copyright © 2017 微博@iOS程序犭袁. All rights reserved. 7 | // 8 | 9 | #import "CYLPlusDemoChildViewController.h" 10 | 11 | @interface CYLPlusDemoChildViewController () 12 | 13 | @end 14 | 15 | @implementation CYLPlusDemoChildViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | - (void)dealloc { 28 | NSLog(@"🔴类名与方法名:%@(在第%@行),描述:%@", @(__PRETTY_FUNCTION__), @(__LINE__), @""); 29 | } 30 | /* 31 | #pragma mark - Navigation 32 | 33 | // In a storyboard-based application, you will often want to do a little preparation before navigation 34 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 35 | // Get the new view controller using [segue destinationViewController]. 36 | // Pass the selected object to the new view controller. 37 | } 38 | */ 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /Example/Classes/Module/SameCity/CYLDetailsViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLDetailsViewController.h 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by Robert Dimitrov on 11/8/14. 6 | // Copyright (c) 2014 Robert Dimitrov. All rights reserved. 7 | // 8 | 9 | #import 10 | #if __has_include() 11 | #import 12 | #else 13 | #import "CYLTabBarController.h" 14 | #endif 15 | 16 | @interface CYLDetailsViewController : CYLBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Example/Classes/Module/SameCity/CYLDetailsViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CYLDetailsViewController.m 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import "CYLDetailsViewController.h" 10 | #import "CYLMineViewController.h" 11 | #import "CYLSameCityViewController.h" 12 | #import "CYLHomeViewController.h" 13 | @interface CYLDetailsViewController () 14 | 15 | @end 16 | 17 | @implementation CYLDetailsViewController 18 | 19 | - (void)viewDidLoad { 20 | [super viewDidLoad]; 21 | self.title = @"详情页"; 22 | self.view.backgroundColor = [UIColor orangeColor]; 23 | 24 | UILabel *label = [[UILabel alloc] init]; 25 | label.text = @"点击屏幕可跳转到“我的”,执行testPush"; 26 | label.frame = CGRectMake(20, 150, CGRectGetWidth(self.view.frame) - 2 * 20, 20); 27 | label.autoresizingMask = UIViewAutoresizingFlexibleWidth; 28 | label.textAlignment = NSTextAlignmentCenter; 29 | [self.view addSubview:label]; 30 | } 31 | 32 | - (void)viewDidAppear:(BOOL)animated { 33 | [super viewDidAppear:animated]; 34 | [[self cyl_sharedAppDelegate] cyl_forceUpdateInterfaceOrientation:UIInterfaceOrientationLandscapeLeft]; 35 | } 36 | 37 | - (void)viewDidDisappear:(BOOL)animated { 38 | [super viewDidDisappear:animated]; 39 | [[self cyl_sharedAppDelegate] cyl_forceUpdateInterfaceOrientation:UIInterfaceOrientationPortrait]; 40 | } 41 | 42 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 43 | // [self cyl_popSelectTabBarChildViewControllerAtIndex:4 completion:^(__kindof UIViewController *selectedTabBarChildViewController) { 44 | [self cyl_popSelectTabBarChildViewControllerForClassType:[CYLMineViewController class] completion:^(__kindof UIViewController *selectedTabBarChildViewController) { 45 | CYLMineViewController *mineViewController = selectedTabBarChildViewController; 46 | @try { 47 | [mineViewController testPush]; 48 | } @catch (NSException *exception) { 49 | NSLog(@"🔴类名与方法名:%@(在第%@行),描述:%@", @(__PRETTY_FUNCTION__), @(__LINE__), exception.reason); 50 | } 51 | }]; 52 | } 53 | 54 | @end 55 | -------------------------------------------------------------------------------- /Example/Classes/Module/SameCity/CYLSameCityViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLSameCityViewController.h 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import 10 | #if __has_include() 11 | #import 12 | #else 13 | #import "CYLTabBarController.h" 14 | #endif 15 | 16 | @interface CYLSameCityViewController : CYLBaseTableViewController 17 | 18 | - (void)refresh; 19 | 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Example/Classes/Module/SameCity/CYLSameCityViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CYLSameCityViewController.m 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 10/20/15. 6 | // Copyright © 2018 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import "CYLSameCityViewController.h" 10 | #import "CYLDetailsViewController.h" 11 | #import 12 | 13 | @implementation CYLSameCityViewController 14 | 15 | - (void)viewDidLoad { 16 | [super viewDidLoad]; 17 | self.view.backgroundColor = [UIColor whiteColor]; 18 | self.navigationItem.title = @"同城"; //✅sets navigation bar title.The right way to set the title of the navigation 19 | self.tabBarItem.title = @"同城"; //❌sets tab bar title. Even the `tabBarItem.title` changed, this will be ignored in tabbar. 20 | //self.title = @"同城1"; //❌sets both of these. Do not do this‼️‼️ This may cause something strange like this : http://i68.tinypic.com/282l3x4.jpg . 21 | __weak __typeof(self) weakSelf = self; 22 | self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ 23 | //Call this Block When enter the refresh status automatically 24 | NSUInteger delaySeconds = 1; 25 | dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delaySeconds * NSEC_PER_SEC)); 26 | dispatch_after(when, dispatch_get_main_queue(), ^{ 27 | [weakSelf.tableView.mj_header endRefreshing]; 28 | }); 29 | }]; 30 | } 31 | 32 | - (void)refresh { 33 | [self.tableView.mj_header beginRefreshing]; 34 | NSUInteger delaySeconds = 1; 35 | dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delaySeconds * NSEC_PER_SEC)); 36 | dispatch_after(when, dispatch_get_main_queue(), ^{ 37 | [self.tableView.mj_header endRefreshing]; 38 | }); 39 | } 40 | #pragma mark - Methods 41 | 42 | - (void)configureCell:(UITableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath { 43 | [[cell textLabel] setText:[NSString stringWithFormat:@"%@ CYLTabBarController %@", self.tabBarItem.title, @(indexPath.row)]]; 44 | } 45 | 46 | #pragma mark - Table view 47 | 48 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 49 | static NSString * CellIdentifier = @"Cell"; 50 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 51 | if (!cell) { 52 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 53 | } 54 | [self configureCell:cell forIndexPath:indexPath]; 55 | return cell; 56 | } 57 | 58 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 59 | return 15; 60 | } 61 | 62 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 63 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; 64 | UIViewController *viewController = [[CYLDetailsViewController alloc] init]; 65 | // viewController.hidesBottomBarWhenPushed = YES; // This property needs to be set before pushing viewController to the navigationController's stack. Meanwhile as it is all base on CYLBaseNavigationController, there is no need to do this. 66 | [viewController cyl_setNavigationBarHidden:YES]; 67 | [self.navigationController pushViewController:viewController animated:YES]; 68 | } 69 | 70 | @end 71 | -------------------------------------------------------------------------------- /Example/Classes/Other/LottieResources/green_lottie_tab_mine.json: -------------------------------------------------------------------------------- 1 | {"v":"5.1.16","fr":30,"ip":0,"op":30,"w":60,"h":60,"nm":"Tab_Mine_Active","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Icon_Mine_Active_Line","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,1.407],[5.523,0],[0,-5.523],[-5.523,0],[0,-9.942],[0,0],[-3.893,3.302]],"o":[[0.524,-1.215],[0,-5.523],[-5.523,0],[0,5.523],[9.942,0],[0,0],[0,-5.505],[0,0]],"v":[[9.185,-5.039],[10,-9],[0,-19],[-10,-9],[0,1],[18,19],[-18,19],[-11.636,5.266]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.325,0.843,0.416,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30,29],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.955],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p955_1_1_0"],"t":0,"s":[0],"e":[38]},{"i":{"x":[0.964],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p964_1_1_0"],"t":16,"s":[38],"e":[100]},{"t":26}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Icon_Mine_Active_Main","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.76],"y":[1]},"o":{"x":[0.24],"y":[0]},"n":["0p76_1_0p24_0"],"t":20,"s":[0],"e":[100]},{"t":26}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-8.284],[0,0],[-8.284,0]],"o":[[0,0],[0,-8.284],[8.284,0]],"v":[[15,16.5],[-15,16.5],[0,1.5]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[3.866,0],[0,3.866],[-3.866,0],[0,-3.866]],"o":[[-3.866,0],[0,-3.866],[3.866,0],[0,3.866]],"v":[[0,-2.5],[-7,-9.5],[0,-16.5],[7,-9.5]],"c":true},"ix":2},"nm":"路径 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"合并路径 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.682,0.878,0.69,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33,32.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 2","np":4,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Icon_Mine_Normal","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.8],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p8_1_0p167_0p167"],"t":0,"s":[100],"e":[6]},{"t":10}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,1.407],[5.523,0],[0,-5.523],[-5.523,0],[0,-9.942],[0,0],[-3.893,3.302]],"o":[[0.524,-1.215],[0,-5.523],[-5.523,0],[0,5.523],[9.942,0],[0,0],[0,-5.505],[0,0]],"v":[[9.185,-5.039],[10,-9],[0,-19],[-10,-9],[0,1],[18,19],[-18,19],[-11.636,5.266]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.498,0.498,0.498,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[30,29],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0}],"markers":[]} -------------------------------------------------------------------------------- /Example/Classes/Other/LottieResources/img_tab_home_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Classes/Other/LottieResources/img_tab_home_0.png -------------------------------------------------------------------------------- /Example/Classes/Other/LottieResources/img_tab_home_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Classes/Other/LottieResources/img_tab_home_1.png -------------------------------------------------------------------------------- /Example/Classes/Other/LottieResources/img_tab_home_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Classes/Other/LottieResources/img_tab_home_2.png -------------------------------------------------------------------------------- /Example/Classes/Other/LottieResources/img_tab_me_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Classes/Other/LottieResources/img_tab_me_0.png -------------------------------------------------------------------------------- /Example/Classes/Other/LottieResources/img_tab_me_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Classes/Other/LottieResources/img_tab_me_1.png -------------------------------------------------------------------------------- /Example/Classes/Other/LottieResources/img_tab_message_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Classes/Other/LottieResources/img_tab_message_0.png -------------------------------------------------------------------------------- /Example/Classes/Other/LottieResources/img_tab_message_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Classes/Other/LottieResources/img_tab_message_1.png -------------------------------------------------------------------------------- /Example/Classes/View/CYLPlusButtonSubclass.h: -------------------------------------------------------------------------------- 1 | // 2 | // CYLPlusButtonSubclass.h 3 | // CYLTabBarControllerDemo 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 15/10/24. 6 | // Copyright (c) 2018年 https://github.com/ChenYilong . All rights reserved. 7 | // 8 | 9 | #import "CYLPlusButton.h" 10 | 11 | @interface CYLPlusButtonSubclass : CYLPlusButton 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "size" : "29x29", 15 | "idiom" : "iphone", 16 | "filename" : "Icon-Small.png", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "size" : "29x29", 21 | "idiom" : "iphone", 22 | "filename" : "Icon-Small@2x.png", 23 | "scale" : "2x" 24 | }, 25 | { 26 | "size" : "29x29", 27 | "idiom" : "iphone", 28 | "filename" : "Icon-Small@3x.png", 29 | "scale" : "3x" 30 | }, 31 | { 32 | "size" : "40x40", 33 | "idiom" : "iphone", 34 | "filename" : "Icon-40@2x.png", 35 | "scale" : "2x" 36 | }, 37 | { 38 | "size" : "40x40", 39 | "idiom" : "iphone", 40 | "filename" : "Icon-40@3x.png", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "size" : "57x57", 45 | "idiom" : "iphone", 46 | "filename" : "Icon.png", 47 | "scale" : "1x" 48 | }, 49 | { 50 | "size" : "57x57", 51 | "idiom" : "iphone", 52 | "filename" : "Icon@2x.png", 53 | "scale" : "2x" 54 | }, 55 | { 56 | "size" : "60x60", 57 | "idiom" : "iphone", 58 | "filename" : "Icon-60@2x.png", 59 | "scale" : "2x" 60 | }, 61 | { 62 | "size" : "60x60", 63 | "idiom" : "iphone", 64 | "filename" : "Icon-60@3x.png", 65 | "scale" : "3x" 66 | }, 67 | { 68 | "idiom" : "ipad", 69 | "size" : "20x20", 70 | "scale" : "1x" 71 | }, 72 | { 73 | "idiom" : "ipad", 74 | "size" : "20x20", 75 | "scale" : "2x" 76 | }, 77 | { 78 | "size" : "29x29", 79 | "idiom" : "ipad", 80 | "filename" : "Icon-Small.png", 81 | "scale" : "1x" 82 | }, 83 | { 84 | "size" : "29x29", 85 | "idiom" : "ipad", 86 | "filename" : "Icon-Small@2x.png", 87 | "scale" : "2x" 88 | }, 89 | { 90 | "size" : "40x40", 91 | "idiom" : "ipad", 92 | "filename" : "Icon-40.png", 93 | "scale" : "1x" 94 | }, 95 | { 96 | "size" : "40x40", 97 | "idiom" : "ipad", 98 | "filename" : "Icon-40@2x.png", 99 | "scale" : "2x" 100 | }, 101 | { 102 | "size" : "50x50", 103 | "idiom" : "ipad", 104 | "filename" : "Icon-Small-50.png", 105 | "scale" : "1x" 106 | }, 107 | { 108 | "size" : "50x50", 109 | "idiom" : "ipad", 110 | "filename" : "Icon-Small-50@2x.png", 111 | "scale" : "2x" 112 | }, 113 | { 114 | "size" : "72x72", 115 | "idiom" : "ipad", 116 | "filename" : "Icon-72.png", 117 | "scale" : "1x" 118 | }, 119 | { 120 | "size" : "72x72", 121 | "idiom" : "ipad", 122 | "filename" : "Icon-72@2x.png", 123 | "scale" : "2x" 124 | }, 125 | { 126 | "size" : "76x76", 127 | "idiom" : "ipad", 128 | "filename" : "Icon-76.png", 129 | "scale" : "1x" 130 | }, 131 | { 132 | "size" : "76x76", 133 | "idiom" : "ipad", 134 | "filename" : "Icon-76@2x.png", 135 | "scale" : "2x" 136 | }, 137 | { 138 | "size" : "83.5x83.5", 139 | "idiom" : "ipad", 140 | "filename" : "Icon-83.5@2x.png", 141 | "scale" : "2x" 142 | }, 143 | { 144 | "idiom" : "ios-marketing", 145 | "size" : "1024x1024", 146 | "scale" : "1x" 147 | } 148 | ], 149 | "info" : { 150 | "version" : 1, 151 | "author" : "xcode" 152 | } 153 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-40.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-72.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-72@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-83.5@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-Small-50.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon.png -------------------------------------------------------------------------------- /Example/Images.xcassets/AppIcon.appiconset/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/AppIcon.appiconset/Icon@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default-Landscape-1792h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default-Landscape-1792h@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default-Landscape-2436h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default-Landscape-2436h@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default-Landscape-2688h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default-Landscape-2688h@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default-Portrait-1792h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default-Portrait-1792h@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default-Portrait-2436h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default-Portrait-2436h@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default-Portrait-2688h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default-Portrait-2688h@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default~ipad.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default~ipad@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default~ipad@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default~ipad~landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default~ipad~landscape.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default~ipad~landscape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default~ipad~landscape@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default~ipad~landscape~nostatusbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default~ipad~landscape~nostatusbar.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default~ipad~landscape~nostatusbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default~ipad~landscape~nostatusbar@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default~ipad~nostatusbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default~ipad~nostatusbar.png -------------------------------------------------------------------------------- /Example/Images.xcassets/LaunchImage.launchimage/Default~ipad~nostatusbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/LaunchImage.launchimage/Default~ipad~nostatusbar@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/NavBar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/NavBar/home_bar_scan.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "home_bar_scan@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x", 15 | "filename" : "home_bar_scan@3x.png" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/NavBar/home_bar_scan.imageset/home_bar_scan@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/NavBar/home_bar_scan.imageset/home_bar_scan@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/NavBar/home_bar_scan.imageset/home_bar_scan@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/NavBar/home_bar_scan.imageset/home_bar_scan@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/NavBar/home_title_slogan.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "home_title_slogan@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x", 15 | "filename" : "home_title_slogan@3x.png" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/NavBar/home_title_slogan.imageset/home_title_slogan@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/NavBar/home_title_slogan.imageset/home_title_slogan@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/NavBar/home_title_slogan.imageset/home_title_slogan@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/NavBar/home_title_slogan.imageset/home_title_slogan@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/NavBar/icon_search.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icon_search@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x", 15 | "filename" : "icon_search@3x.png" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/NavBar/icon_search.imageset/icon_search@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/NavBar/icon_search.imageset/icon_search@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/NavBar/icon_search.imageset/icon_search@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/NavBar/icon_search.imageset/icon_search@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/TabBar_Bg_Shadow.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "TabBar_Bg_Shadow@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/TabBar_Bg_Shadow.imageset/TabBar_Bg_Shadow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/TabBar_Bg_Shadow.imageset/TabBar_Bg_Shadow@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/account/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/account/account_highlight.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "account_highlight.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "account_highlight@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "account_highlight@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/account/account_highlight.imageset/account_highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/account/account_highlight.imageset/account_highlight.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/account/account_highlight.imageset/account_highlight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/account/account_highlight.imageset/account_highlight@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/account/account_highlight.imageset/account_highlight@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/account/account_highlight.imageset/account_highlight@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/account/account_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "account_normal.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "account_normal@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "account_normal@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/account/account_normal.imageset/account_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/account/account_normal.imageset/account_normal.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/account/account_normal.imageset/account_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/account/account_normal.imageset/account_normal@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/account/account_normal.imageset/account_normal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/account/account_normal.imageset/account_normal@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/fishpond/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/fishpond/fishpond_highlight.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "fishpond_highlight.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "fishpond_highlight@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "fishpond_highlight@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/fishpond/fishpond_highlight.imageset/fishpond_highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/fishpond/fishpond_highlight.imageset/fishpond_highlight.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/fishpond/fishpond_highlight.imageset/fishpond_highlight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/fishpond/fishpond_highlight.imageset/fishpond_highlight@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/fishpond/fishpond_highlight.imageset/fishpond_highlight@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/fishpond/fishpond_highlight.imageset/fishpond_highlight@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/fishpond/fishpond_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "fishpond_normal.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "fishpond_normal@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "fishpond_normal@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/fishpond/fishpond_normal.imageset/fishpond_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/fishpond/fishpond_normal.imageset/fishpond_normal.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/fishpond/fishpond_normal.imageset/fishpond_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/fishpond/fishpond_normal.imageset/fishpond_normal@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/fishpond/fishpond_normal.imageset/fishpond_normal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/fishpond/fishpond_normal.imageset/fishpond_normal@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/home/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/home/home_highlight.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "home_highlight.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "home_highlight@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "home_highlight@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/home/home_highlight.imageset/home_highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/home/home_highlight.imageset/home_highlight.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/home/home_highlight.imageset/home_highlight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/home/home_highlight.imageset/home_highlight@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/home/home_highlight.imageset/home_highlight@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/home/home_highlight.imageset/home_highlight@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/home/home_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "home_normal.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "home_normal@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "home_normal@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/home/home_normal.imageset/home_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/home/home_normal.imageset/home_normal.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/home/home_normal.imageset/home_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/home/home_normal.imageset/home_normal@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/home/home_normal.imageset/home_normal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/home/home_normal.imageset/home_normal@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/home_select_cover.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "home_select_cover@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "home_select_cover@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/home_select_cover.imageset/home_select_cover@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/home_select_cover.imageset/home_select_cover@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/home_select_cover.imageset/home_select_cover@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/home_select_cover.imageset/home_select_cover@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/lottie_placeholder/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/lottie_placeholder/gray_tabbar_home_animation_lottie_placeholder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "gray_tabbar_home_animation_lottie_placeholder@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/lottie_placeholder/gray_tabbar_home_animation_lottie_placeholder.imageset/gray_tabbar_home_animation_lottie_placeholder@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/lottie_placeholder/gray_tabbar_home_animation_lottie_placeholder.imageset/gray_tabbar_home_animation_lottie_placeholder@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/lottie_placeholder/gray_tabbar_me_animation_lottie_placeholder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "gray_tabbar_me_animation_lottie_placeholder@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/lottie_placeholder/gray_tabbar_me_animation_lottie_placeholder.imageset/gray_tabbar_me_animation_lottie_placeholder@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/lottie_placeholder/gray_tabbar_me_animation_lottie_placeholder.imageset/gray_tabbar_me_animation_lottie_placeholder@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/lottie_placeholder/gray_tabbar_message_animation_lottie_placeholder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "gray_tabbar_message_animation_lottie_placeholder@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/lottie_placeholder/gray_tabbar_message_animation_lottie_placeholder.imageset/gray_tabbar_message_animation_lottie_placeholder@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/lottie_placeholder/gray_tabbar_message_animation_lottie_placeholder.imageset/gray_tabbar_message_animation_lottie_placeholder@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/message/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/message/message_highlight.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "message_highlight.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "message_highlight@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "message_highlight@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/message/message_highlight.imageset/message_highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/message/message_highlight.imageset/message_highlight.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/message/message_highlight.imageset/message_highlight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/message/message_highlight.imageset/message_highlight@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/message/message_highlight.imageset/message_highlight@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/message/message_highlight.imageset/message_highlight@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/message/message_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "message_normal.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "message_normal@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "message_normal@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/message/message_normal.imageset/message_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/message/message_normal.imageset/message_normal.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/message/message_normal.imageset/message_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/message/message_normal.imageset/message_normal@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/message/message_normal.imageset/message_normal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/message/message_normal.imageset/message_normal@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/post/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/post/post_highlight.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "post_highlight@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "post_highlight@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/post/post_highlight.imageset/post_highlight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/post/post_highlight.imageset/post_highlight@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/post/post_highlight.imageset/post_highlight@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/post/post_highlight.imageset/post_highlight@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/post/post_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "post_normal@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "post_normal@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/post/post_normal.imageset/post_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/post/post_normal.imageset/post_normal@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/post/post_normal.imageset/post_normal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/post/post_normal.imageset/post_normal@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/tabbarBg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbarBg@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tabbarBg@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/tabbarBg.imageset/tabbarBg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/tabbarBg.imageset/tabbarBg@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/tabbarBg.imageset/tabbarBg@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/tabbarBg.imageset/tabbarBg@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/tabbar_background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_background@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/tabbar_background.imageset/tabbar_background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/tabbar_background.imageset/tabbar_background@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/tapbar_top_line.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tapbar_top_line@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "original" 23 | } 24 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/tapbar_top_line.imageset/tapbar_top_line@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/tapbar_top_line.imageset/tapbar_top_line@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/videoback.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "videoback@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "videoback@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/videoback.imageset/videoback@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/videoback.imageset/videoback@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/TabBarIcon/videoback.imageset/videoback@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/TabBarIcon/videoback.imageset/videoback@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/home-float-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "home-float-icon.jpg", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "home-float-icon@2x.jpg", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "home-float-icon@3x.jpg", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Example/Images.xcassets/home-float-icon.imageset/home-float-icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/home-float-icon.imageset/home-float-icon.jpg -------------------------------------------------------------------------------- /Example/Images.xcassets/home-float-icon.imageset/home-float-icon@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/home-float-icon.imageset/home-float-icon@2x.jpg -------------------------------------------------------------------------------- /Example/Images.xcassets/home-float-icon.imageset/home-float-icon@3x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/home-float-icon.imageset/home-float-icon@3x.jpg -------------------------------------------------------------------------------- /Example/Images.xcassets/icon_tabbar_plus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_tabbar_plus@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_tabbar_plus@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/Images.xcassets/icon_tabbar_plus.imageset/icon_tabbar_plus@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/icon_tabbar_plus.imageset/icon_tabbar_plus@2x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/icon_tabbar_plus.imageset/icon_tabbar_plus@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/icon_tabbar_plus.imageset/icon_tabbar_plus@3x.png -------------------------------------------------------------------------------- /Example/Images.xcassets/navigationbar_background_tall.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "navigationbar_background_tall@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/Images.xcassets/navigationbar_background_tall.imageset/navigationbar_background_tall@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChenYilong/CYLTabBarController/0d142b175d7c4819d687cd95246824453f73bc43/Example/Images.xcassets/navigationbar_background_tall.imageset/navigationbar_background_tall@2x.png -------------------------------------------------------------------------------- /Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UIRequiresFullScreen 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /Example/MainTabBarController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MainTabBarController.h 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 15/11/3. 6 | // Copyright © 2015年 https://github.com/ChenYilong .All rights reserved. 7 | // 8 | 9 | #import 10 | #if __has_include() 11 | #import 12 | #else 13 | #import "CYLTabBarController.h" 14 | #endif 15 | 16 | @interface MainTabBarController : CYLTabBarController 17 | 18 | - (instancetype)initWithContext:(NSString *)context; 19 | 20 | @end 21 | 22 | -------------------------------------------------------------------------------- /Example/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CYLTabBarController 4 | // 5 | // v1.21.x Created by 微博@iOS程序犭袁 ( http://weibo.com/luohanchenyilong/ ) on 15/10/25. 6 | // Copyright (c) 2018年 https://github.com/ChenYilong .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 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 CYLTabBarController(https://github.com/ChenYilong/CYLTabBarController), L.L.C. All rights reserved. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE 20 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | source 'https://cdn.cocoapods.org/' 4 | 5 | target 'CYLTabBarController' do 6 | # Comment the next line if you don't want to use dynamic frameworks 7 | use_frameworks! 8 | 9 | #pod 'CYLTabBarController', '~> 1.28.5' # 默认不依赖Lottie 10 | pod 'CYLTabBarController/Lottie', '~> 1.29.0' # 依赖Lottie库 11 | 12 | #pod 'CYLTabBarController', :path => './' 13 | #pod 'CYLTabBarController/Lottie', :path => './' 14 | 15 | pod 'MJRefresh' 16 | 17 | end 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CYLTabBarController", 3 | "version": "1.0.0", 4 | "description": "

", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/ChenYilong/CYLTabBarController.git" 12 | }, 13 | "keywords": [], 14 | "author": "", 15 | "license": "ISC", 16 | "bugs": { 17 | "url": "https://github.com/ChenYilong/CYLTabBarController/issues" 18 | }, 19 | "homepage": "https://github.com/ChenYilong/CYLTabBarController#readme", 20 | "config": { 21 | "commitizen": { 22 | "path": "cz-conventional-changelog" 23 | } 24 | } 25 | } 26 | --------------------------------------------------------------------------------