├── DLTabBarController └── DLTabBarControllerDemo │ ├── .DS_Store │ ├── DLTabBarControllerDemo │ ├── Assets.xcassets │ │ ├── Contents.json │ │ ├── TabBar │ │ │ ├── Contents.json │ │ │ ├── main_badge.imageset │ │ │ │ ├── main_badge@2x.png │ │ │ │ └── Contents.json │ │ │ ├── tabbar_home.imageset │ │ │ │ ├── tabbar_home@2x.png │ │ │ │ └── Contents.json │ │ │ ├── tabbar_profile.imageset │ │ │ │ ├── tabbar_profile@2x.png │ │ │ │ └── Contents.json │ │ │ ├── tabbar_discover.imageset │ │ │ │ ├── tabbar_discover@2x.png │ │ │ │ └── Contents.json │ │ │ ├── tabbar_background.imageset │ │ │ │ ├── tabbar_background@2x.png │ │ │ │ └── Contents.json │ │ │ ├── tabbar_home_selected.imageset │ │ │ │ ├── tabbar_home_selected@2x.png │ │ │ │ └── Contents.json │ │ │ ├── tabbar_compose_button.imageset │ │ │ │ ├── tabbar_compose_button@2x.png │ │ │ │ └── Contents.json │ │ │ ├── tabbar_message_center.imageset │ │ │ │ ├── tabbar_message_center@2x.png │ │ │ │ └── Contents.json │ │ │ ├── tabbar_compose_icon_add.imageset │ │ │ │ ├── tabbar_compose_icon_add@2x.png │ │ │ │ └── Contents.json │ │ │ ├── tabbar_profile_selected.imageset │ │ │ │ ├── tabbar_profile_selected@2x.png │ │ │ │ └── Contents.json │ │ │ ├── tabbar_discover_selected.imageset │ │ │ │ ├── tabbar_discover_selected@2x.png │ │ │ │ └── Contents.json │ │ │ ├── tabbar_message_center_selected.imageset │ │ │ │ ├── tabbar_message_center_selected@2x.png │ │ │ │ └── Contents.json │ │ │ ├── tabbar_compose_button_highlighted.imageset │ │ │ │ ├── tabbar_compose_button_highlighted@2x.png │ │ │ │ └── Contents.json │ │ │ └── tabbar_compose_icon_add_highlighted.imageset │ │ │ │ ├── tabbar_compose_icon_add_highlighted@2x.png │ │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── .DS_Store │ ├── Lib │ │ ├── BHBPopView │ │ │ ├── Resource │ │ │ │ ├── music.bundle │ │ │ │ │ ├── composer_open.wav │ │ │ │ │ └── composer_close.wav │ │ │ │ └── images.bundle │ │ │ │ │ ├── compose_slogan@2x.png │ │ │ │ │ ├── compose_slogan@3x.png │ │ │ │ │ ├── tabbar_compose_book@2x.png │ │ │ │ │ ├── tabbar_compose_idea@2x.png │ │ │ │ │ ├── tabbar_compose_idea@3x.png │ │ │ │ │ ├── tabbar_compose_lbs@2x.png │ │ │ │ │ ├── tabbar_compose_lbs@3x.png │ │ │ │ │ ├── tabbar_compose_more@2x.png │ │ │ │ │ ├── tabbar_compose_more@3x.png │ │ │ │ │ ├── tabbar_compose_button@2x.png │ │ │ │ │ ├── tabbar_compose_button@3x.png │ │ │ │ │ ├── tabbar_compose_camera@2x.png │ │ │ │ │ ├── tabbar_compose_camera@3x.png │ │ │ │ │ ├── tabbar_compose_friend@2x.png │ │ │ │ │ ├── tabbar_compose_friend@3x.png │ │ │ │ │ ├── tabbar_compose_music@2x.png │ │ │ │ │ ├── tabbar_compose_music@3x.png │ │ │ │ │ ├── tabbar_compose_photo@2x.png │ │ │ │ │ ├── tabbar_compose_photo@3x.png │ │ │ │ │ ├── tabbar_compose_review@2x.png │ │ │ │ │ ├── tabbar_compose_review@3x.png │ │ │ │ │ ├── tabbar_compose_video@2x.png │ │ │ │ │ ├── tabbar_compose_voice@2x.png │ │ │ │ │ ├── tabbar_compose_voice@3x.png │ │ │ │ │ ├── tabbar_compose_weibo@2x.png │ │ │ │ │ ├── tabbar_compose_weibo@3x.png │ │ │ │ │ ├── tabbar_compose_icon_add@2x.png │ │ │ │ │ ├── tabbar_compose_icon_add@3x.png │ │ │ │ │ ├── tabbar_compose_more_mask@2x.png │ │ │ │ │ ├── tabbar_compose_notloaded@2x.png │ │ │ │ │ ├── tabbar_compose_shooting@2x.png │ │ │ │ │ ├── tabbar_compose_shooting@3x.png │ │ │ │ │ ├── tabbar_compose_transfer@3x.png │ │ │ │ │ ├── tabbar_compose_wbcamera@2x.png │ │ │ │ │ ├── tabbar_compose_wbcamera@3x.png │ │ │ │ │ ├── tabbar_compose_left_button@2x.png │ │ │ │ │ ├── tabbar_compose_below_button@2x.png │ │ │ │ │ ├── tabbar_compose_right_button@2x.png │ │ │ │ │ ├── tabbar_compose_below_background@2x.png │ │ │ │ │ ├── tabbar_compose_background_icon_add@2x.png │ │ │ │ │ ├── tabbar_compose_background_icon_add@3x.png │ │ │ │ │ ├── tabbar_compose_button_highlighted@2x.png │ │ │ │ │ ├── tabbar_compose_button_highlighted@3x.png │ │ │ │ │ ├── tabbar_compose_background_icon_close@2x.png │ │ │ │ │ ├── tabbar_compose_background_icon_close@3x.png │ │ │ │ │ ├── tabbar_compose_icon_add_highlighted@2x.png │ │ │ │ │ ├── tabbar_compose_icon_add_highlighted@3x.png │ │ │ │ │ ├── tabbar_compose_background_icon_return@2x.png │ │ │ │ │ ├── tabbar_compose_background_icon_return@3x.png │ │ │ │ │ ├── tabbar_compose_below_button_highlighted@2x.png │ │ │ │ │ ├── tabbar_compose_left_button_highlighted@2x.png │ │ │ │ │ └── tabbar_compose_right_button_highlighted@2x.png │ │ │ ├── BHBGroup.m │ │ │ ├── BHBGroup.h │ │ │ ├── BHBCustomBtn.h │ │ │ ├── UIButton+BHBSetImage.h │ │ │ ├── UIImageView+BHBSetImage.h │ │ │ ├── BHBItem.h │ │ │ ├── UIImage+BHBEffects.h │ │ │ ├── BHBItem.m │ │ │ ├── UIView+BHBAnimation.h │ │ │ ├── BHBBottomBar.h │ │ │ ├── BHBCustomBtn.m │ │ │ ├── BHBCenterView.h │ │ │ ├── BHBPopView.h │ │ │ ├── UIImageView+BHBSetImage.m │ │ │ ├── UIView+BHBAnimation.m │ │ │ ├── UIButton+BHBSetImage.m │ │ │ ├── BHBPlaySoundTool.h │ │ │ ├── BHBSingleton.h │ │ │ ├── BHBPlaySoundTool.m │ │ │ ├── BHBBottomBar.m │ │ │ ├── UIImage+BHBEffects.m │ │ │ └── BHBPopView.m │ │ ├── UIView+Extension.h │ │ └── UIView+Extension.m │ ├── ViewController.h │ ├── DLTabBarController.h │ ├── AppDelegate.h │ ├── main.m │ ├── DLTabBar.h │ ├── ViewController.m │ ├── Info.plist │ ├── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.storyboard │ ├── AppDelegate.m │ ├── DLTabBar.m │ └── DLTabBarController.m │ ├── DLTabBarControllerDemo.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── ft_david.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── ft_david.xcuserdatad │ │ └── xcschemes │ │ ├── xcschememanagement.plist │ │ └── DLTabBarControllerDemo.xcscheme │ ├── DLTabBarControllerDemoTests │ ├── Info.plist │ └── DLTabBarControllerDemoTests.m │ └── DLTabBarControllerDemoUITests │ ├── Info.plist │ └── DLTabBarControllerDemoUITests.m ├── BHBPopViewDemo ├── BHBPopViewDemo │ ├── BHBPopView │ │ ├── Resource │ │ │ ├── music.bundle │ │ │ │ ├── composer_close.wav │ │ │ │ └── composer_open.wav │ │ │ └── images.bundle │ │ │ │ ├── compose_slogan@2x.png │ │ │ │ ├── compose_slogan@3x.png │ │ │ │ ├── tabbar_compose_lbs@2x.png │ │ │ │ ├── tabbar_compose_lbs@3x.png │ │ │ │ ├── tabbar_compose_book@2x.png │ │ │ │ ├── tabbar_compose_idea@2x.png │ │ │ │ ├── tabbar_compose_idea@3x.png │ │ │ │ ├── tabbar_compose_more@2x.png │ │ │ │ ├── tabbar_compose_more@3x.png │ │ │ │ ├── tabbar_compose_music@2x.png │ │ │ │ ├── tabbar_compose_music@3x.png │ │ │ │ ├── tabbar_compose_photo@2x.png │ │ │ │ ├── tabbar_compose_photo@3x.png │ │ │ │ ├── tabbar_compose_video@2x.png │ │ │ │ ├── tabbar_compose_voice@2x.png │ │ │ │ ├── tabbar_compose_voice@3x.png │ │ │ │ ├── tabbar_compose_weibo@2x.png │ │ │ │ ├── tabbar_compose_weibo@3x.png │ │ │ │ ├── tabbar_compose_button@2x.png │ │ │ │ ├── tabbar_compose_button@3x.png │ │ │ │ ├── tabbar_compose_camera@2x.png │ │ │ │ ├── tabbar_compose_camera@3x.png │ │ │ │ ├── tabbar_compose_friend@2x.png │ │ │ │ ├── tabbar_compose_friend@3x.png │ │ │ │ ├── tabbar_compose_icon_add@2x.png │ │ │ │ ├── tabbar_compose_icon_add@3x.png │ │ │ │ ├── tabbar_compose_review@2x.png │ │ │ │ ├── tabbar_compose_review@3x.png │ │ │ │ ├── tabbar_compose_shooting@2x.png │ │ │ │ ├── tabbar_compose_shooting@3x.png │ │ │ │ ├── tabbar_compose_transfer@3x.png │ │ │ │ ├── tabbar_compose_wbcamera@2x.png │ │ │ │ ├── tabbar_compose_wbcamera@3x.png │ │ │ │ ├── tabbar_compose_more_mask@2x.png │ │ │ │ ├── tabbar_compose_notloaded@2x.png │ │ │ │ ├── tabbar_compose_below_button@2x.png │ │ │ │ ├── tabbar_compose_left_button@2x.png │ │ │ │ ├── tabbar_compose_right_button@2x.png │ │ │ │ ├── tabbar_compose_below_background@2x.png │ │ │ │ ├── tabbar_compose_button_highlighted@2x.png │ │ │ │ ├── tabbar_compose_button_highlighted@3x.png │ │ │ │ ├── tabbar_compose_background_icon_add@2x.png │ │ │ │ ├── tabbar_compose_background_icon_add@3x.png │ │ │ │ ├── tabbar_compose_icon_add_highlighted@2x.png │ │ │ │ ├── tabbar_compose_icon_add_highlighted@3x.png │ │ │ │ ├── tabbar_compose_background_icon_close@2x.png │ │ │ │ ├── tabbar_compose_background_icon_close@3x.png │ │ │ │ ├── tabbar_compose_background_icon_return@2x.png │ │ │ │ ├── tabbar_compose_background_icon_return@3x.png │ │ │ │ ├── tabbar_compose_left_button_highlighted@2x.png │ │ │ │ ├── tabbar_compose_below_button_highlighted@2x.png │ │ │ │ └── tabbar_compose_right_button_highlighted@2x.png │ │ ├── BHBGroup.m │ │ ├── BHBGroup.h │ │ ├── BHBCustomBtn.h │ │ ├── UIButton+BHBSetImage.h │ │ ├── UIImageView+BHBSetImage.h │ │ ├── BHBItem.h │ │ ├── UIImage+BHBEffects.h │ │ ├── BHBItem.m │ │ ├── UIView+BHBAnimation.h │ │ ├── BHBBottomBar.h │ │ ├── BHBCustomBtn.m │ │ ├── BHBCenterView.h │ │ ├── BHBPopView.h │ │ ├── UIImageView+BHBSetImage.m │ │ ├── UIView+BHBAnimation.m │ │ ├── UIButton+BHBSetImage.m │ │ ├── BHBPlaySoundTool.h │ │ ├── BHBSingleton.h │ │ ├── BHBPlaySoundTool.m │ │ ├── BHBBottomBar.m │ │ ├── UIImage+BHBEffects.m │ │ ├── BHBPopView.m │ │ └── BHBCenterView.m │ ├── Images.xcassets │ │ ├── backgroundImage.imageset │ │ │ ├── backgroundImage.png │ │ │ ├── backgroundImage副本.png │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── ViewController.h │ ├── AppDelegate.h │ ├── main.m │ ├── Info.plist │ ├── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.xib │ ├── AppDelegate.m │ └── ViewController.m ├── BHBPopViewDemo.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcuserdata │ │ │ └── bihongbo.xcuserdatad │ │ │ │ ├── UserInterfaceState.xcuserstate │ │ │ │ └── WorkspaceSettings.xcsettings │ │ └── xcshareddata │ │ │ └── BHBPopViewDemo.xccheckout │ └── xcuserdata │ │ └── bihongbo.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ ├── xcschememanagement.plist │ │ └── BHBPopViewDemo.xcscheme └── BHBPopViewDemoTests │ ├── Info.plist │ └── BHBPopViewDemoTests.m ├── LICENSE ├── BHBPopView.podspec └── README.md /DLTabBarController/DLTabBarControllerDemo/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/.DS_Store -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/.DS_Store -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/music.bundle/composer_close.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/music.bundle/composer_close.wav -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/music.bundle/composer_open.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/music.bundle/composer_open.wav -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/compose_slogan@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/compose_slogan@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/compose_slogan@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/compose_slogan@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_lbs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_lbs@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_lbs@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_lbs@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_book@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_book@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_idea@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_idea@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_idea@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_idea@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_more@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_more@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_more@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_music@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_music@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_music@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_music@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_photo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_photo@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_photo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_photo@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_video@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_video@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_voice@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_voice@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_voice@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_voice@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_weibo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_weibo@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_weibo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_weibo@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/Images.xcassets/backgroundImage.imageset/backgroundImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/Images.xcassets/backgroundImage.imageset/backgroundImage.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_button@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_button@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_button@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_camera@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_camera@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_camera@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_camera@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_friend@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_friend@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_friend@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_friend@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_review@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_review@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_review@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_review@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_shooting@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_shooting@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_shooting@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_shooting@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_transfer@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_transfer@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_wbcamera@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_wbcamera@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_wbcamera@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_wbcamera@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/Images.xcassets/backgroundImage.imageset/backgroundImage副本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/Images.xcassets/backgroundImage.imageset/backgroundImage副本.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_more_mask@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_more_mask@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_notloaded@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_notloaded@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_below_button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_below_button@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_left_button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_left_button@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_right_button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_right_button@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_below_background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_below_background@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_button_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_button_highlighted@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_button_highlighted@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_button_highlighted@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_add@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_add@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_add@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_add@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add_highlighted@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add_highlighted@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add_highlighted@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_close@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_close@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_close@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_return@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_return@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_return@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_return@3x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_left_button_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_left_button_highlighted@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_below_button_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_below_button_highlighted@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_right_button_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo/BHBPopView/Resource/images.bundle/tabbar_compose_right_button_highlighted@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/music.bundle/composer_open.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/music.bundle/composer_open.wav -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBGroup.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBGroup.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by bihongbo on 16/3/16. 6 | // Copyright © 2016年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBGroup.h" 10 | 11 | @implementation BHBGroup 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/music.bundle/composer_close.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/music.bundle/composer_close.wav -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo.xcodeproj/project.xcworkspace/xcuserdata/bihongbo.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/BHBPopViewDemo/BHBPopViewDemo.xcodeproj/project.xcworkspace/xcuserdata/bihongbo.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/compose_slogan@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/compose_slogan@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/compose_slogan@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/compose_slogan@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/main_badge.imageset/main_badge@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/main_badge.imageset/main_badge@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_home.imageset/tabbar_home@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_home.imageset/tabbar_home@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_book@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_book@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_idea@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_idea@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_idea@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_idea@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_lbs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_lbs@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_lbs@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_lbs@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_more@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_more@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_more@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_button@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_button@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_button@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_camera@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_camera@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_camera@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_camera@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_friend@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_friend@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_friend@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_friend@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_music@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_music@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_music@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_music@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_photo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_photo@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_photo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_photo@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_review@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_review@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_review@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_review@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_video@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_video@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_voice@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_voice@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_voice@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_voice@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_weibo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_weibo@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_weibo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_weibo@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_profile.imageset/tabbar_profile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_profile.imageset/tabbar_profile@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_more_mask@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_more_mask@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_notloaded@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_notloaded@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_shooting@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_shooting@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_shooting@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_shooting@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_transfer@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_transfer@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_wbcamera@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_wbcamera@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_wbcamera@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_wbcamera@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_discover.imageset/tabbar_discover@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_discover.imageset/tabbar_discover@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_left_button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_left_button@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/14. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_background.imageset/tabbar_background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_background.imageset/tabbar_background@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_below_button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_below_button@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_right_button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_right_button@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBGroup.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBGroup.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by bihongbo on 16/3/16. 6 | // Copyright © 2016年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBGroup.h" 10 | 11 | @implementation BHBGroup 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_below_background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_below_background@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_add@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_add@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_add@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_add@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_button_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_button_highlighted@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_button_highlighted@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_button_highlighted@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_home_selected.imageset/tabbar_home_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_home_selected.imageset/tabbar_home_selected@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_close@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_close@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_close@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add_highlighted@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add_highlighted@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_icon_add_highlighted@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_compose_button.imageset/tabbar_compose_button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_compose_button.imageset/tabbar_compose_button@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_message_center.imageset/tabbar_message_center@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_message_center.imageset/tabbar_message_center@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_return@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_return@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_return@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_background_icon_return@3x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_below_button_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_below_button_highlighted@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_left_button_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_left_button_highlighted@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_right_button_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/Resource/images.bundle/tabbar_compose_right_button_highlighted@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_compose_icon_add.imageset/tabbar_compose_icon_add@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_compose_icon_add.imageset/tabbar_compose_icon_add@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_profile_selected.imageset/tabbar_profile_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_profile_selected.imageset/tabbar_profile_selected@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_discover_selected.imageset/tabbar_discover_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_discover_selected.imageset/tabbar_discover_selected@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBGroup.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBGroup.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by bihongbo on 16/3/16. 6 | // Copyright © 2016年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBItem.h" 10 | 11 | @interface BHBGroup : BHBItem 12 | 13 | @property (nonatomic, strong) NSArray * items; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo.xcodeproj/project.xcworkspace/xcuserdata/ft_david.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo.xcodeproj/project.xcworkspace/xcuserdata/ft_david.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBCustomBtn.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBCustomBtn.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #define ICONHEIGHT 71 12 | #define TITLEHEIGHT 30 13 | 14 | @interface BHBCustomBtn : UIButton 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // DLTabBarControllerDemo 4 | // 5 | // Created by FT_David on 16/5/27. 6 | // Copyright © 2016年 FT_David. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_message_center_selected.imageset/tabbar_message_center_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_message_center_selected.imageset/tabbar_message_center_selected@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/DLTabBarController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DLTabBarController.h 3 | // DLTabBarControllerDemo 4 | // 5 | // Created by FT_David on 16/5/27. 6 | // Copyright © 2016年 FT_David. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface DLTabBarController : UITabBarController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_compose_button_highlighted.imageset/tabbar_compose_button_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_compose_button_highlighted.imageset/tabbar_compose_button_highlighted@2x.png -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/14. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_compose_icon_add_highlighted.imageset/tabbar_compose_icon_add_highlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bb-coder/BHBPopView/HEAD/DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_compose_icon_add_highlighted.imageset/tabbar_compose_icon_add_highlighted@2x.png -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBGroup.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBGroup.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by bihongbo on 16/3/16. 6 | // Copyright © 2016年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBItem.h" 10 | 11 | @interface BHBGroup : BHBItem 12 | 13 | @property (nonatomic, strong) NSArray * items; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBCustomBtn.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBCustomBtn.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #define ICONHEIGHT 71 12 | #define TITLEHEIGHT 30 13 | 14 | @interface BHBCustomBtn : UIButton 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/UIButton+BHBSetImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIButton+BHBSetImage.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIButton (BHBSetImage) 12 | 13 | - (void)bhb_setImage:(NSString *)imagePath; 14 | - (void)bhb_setBGImage:(NSString *)imagePath; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/14. 6 | // Copyright (c) 2015年 毕洪博. 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 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // DLTabBarControllerDemo 4 | // 5 | // Created by FT_David on 16/5/27. 6 | // Copyright © 2016年 FT_David. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/UIButton+BHBSetImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIButton+BHBSetImage.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIButton (BHBSetImage) 12 | 13 | - (void)bhb_setImage:(NSString *)imagePath; 14 | - (void)bhb_setBGImage:(NSString *)imagePath; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/UIImageView+BHBSetImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageView+BHBSetImage.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImageView (BHBSetImage) 12 | 13 | - (void)bhb_setImage:(UIImage *)image; 14 | 15 | - (void)bhb_setImageWithResourcePath:(NSString *)path AutoSize:(BOOL)isAuto; 16 | 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBItem.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/16. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BHBItem : NSObject 12 | 13 | @property (nonatomic,copy) NSString * title; 14 | @property (nonatomic,copy) NSString * icon; 15 | 16 | -(instancetype)initWithTitle:(NSString *)title Icon:(NSString *)icon; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // DLTabBarControllerDemo 4 | // 5 | // Created by FT_David on 16/5/27. 6 | // Copyright © 2016年 FT_David. 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 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo.xcodeproj/project.xcworkspace/xcuserdata/bihongbo.xcuserdatad/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges 6 | 7 | SnapshotAutomaticallyBeforeSignificantChanges 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/UIImage+BHBEffects.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+BHBEffects.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImage (BHBEffects) 12 | 13 | - (UIImage *)bhb_applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/UIImageView+BHBSetImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageView+BHBSetImage.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImageView (BHBSetImage) 12 | 13 | - (void)bhb_setImage:(UIImage *)image; 14 | 15 | - (void)bhb_setImageWithResourcePath:(NSString *)path AutoSize:(BOOL)isAuto; 16 | 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/main_badge.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "main_badge@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 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_home.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_home@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 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBItem.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/16. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BHBItem : NSObject 12 | 13 | @property (nonatomic,copy) NSString * title; 14 | @property (nonatomic,copy) NSString * icon; 15 | 16 | -(instancetype)initWithTitle:(NSString *)title Icon:(NSString *)icon; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_discover.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_discover@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 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_profile.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_profile@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 | } -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/Images.xcassets/backgroundImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "backgroundImage副本.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x", 15 | "filename" : "backgroundImage.png" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/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 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/UIImage+BHBEffects.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+BHBEffects.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImage (BHBEffects) 12 | 13 | - (UIImage *)bhb_applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_home_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_home_selected@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 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_compose_button.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_compose_button@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 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_compose_icon_add.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_compose_icon_add@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 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_message_center.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_message_center@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 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_profile_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_profile_selected@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 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_discover_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_discover_selected@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 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_message_center_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_message_center_selected@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 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_compose_button_highlighted.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_compose_button_highlighted@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 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/TabBar/tabbar_compose_icon_add_highlighted.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tabbar_compose_icon_add_highlighted@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 | } -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBItem.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBItem.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/16. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBItem.h" 10 | 11 | @implementation BHBItem 12 | 13 | -(instancetype)initWithTitle:(NSString *)title Icon:(NSString *)icon{ 14 | self = [super init]; 15 | if (self) { 16 | self.title = title; 17 | self.icon = icon; 18 | } 19 | return self; 20 | } 21 | 22 | - (void)dealloc{ 23 | NSLog(@"BHBItem"); 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/DLTabBar.h: -------------------------------------------------------------------------------- 1 | // 2 | // DLTabBar.h 3 | // DLTabBarControllerDemo 4 | // 5 | // Created by FT_David on 16/5/27. 6 | // Copyright © 2016年 FT_David. All rights reserved. 7 | // 8 | 9 | #import 10 | @class DLTabBar; 11 | 12 | @protocol DLTabBarDelegate 13 | 14 | /** 点击中间按钮的代理 */ 15 | -(void)tabBarDidClickAtCenterButton:(DLTabBar *)tabBar; 16 | 17 | @end 18 | 19 | 20 | @interface DLTabBar : UITabBar 21 | 22 | @property(nonatomic,weak)id delegate; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/UIView+BHBAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+BHBAnimation.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIView (BHBAnimation) 12 | 13 | //淡入 14 | - (void)fadeInWithTime:(NSTimeInterval)time; 15 | //淡出 16 | - (void)fadeOutWithTime:(NSTimeInterval)time; 17 | //缩放 18 | - (void)scalingWithTime:(NSTimeInterval)time andscal:(CGFloat)scal; 19 | //旋转 20 | - (void)RevolvingWithTime:(NSTimeInterval)time andDelta:(CGFloat)delta; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBItem.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBItem.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/16. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBItem.h" 10 | 11 | @implementation BHBItem 12 | 13 | -(instancetype)initWithTitle:(NSString *)title Icon:(NSString *)icon{ 14 | self = [super init]; 15 | if (self) { 16 | self.title = title; 17 | self.icon = icon; 18 | } 19 | return self; 20 | } 21 | 22 | - (void)dealloc{ 23 | NSLog(@"BHBItem"); 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo.xcodeproj/xcuserdata/bihongbo.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/UIView+BHBAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+BHBAnimation.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIView (BHBAnimation) 12 | 13 | //淡入 14 | - (void)fadeInWithTime:(NSTimeInterval)time; 15 | //淡出 16 | - (void)fadeOutWithTime:(NSTimeInterval)time; 17 | //缩放 18 | - (void)scalingWithTime:(NSTimeInterval)time andscal:(CGFloat)scal; 19 | //旋转 20 | - (void)RevolvingWithTime:(NSTimeInterval)time andDelta:(CGFloat)delta; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBBottomBar.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBBottomBar.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #define BHBBOTTOMHEIGHT ((57.0 / 736.0) * [UIScreen mainScreen].bounds.size.height) 10 | 11 | #import 12 | 13 | typedef void (^BackClick)(); 14 | typedef void (^CloseClick)(); 15 | 16 | @interface BHBBottomBar : UIView 17 | 18 | @property (nonatomic,assign) BOOL isMoreBar; 19 | 20 | @property (nonatomic,copy) BackClick backClick; 21 | 22 | @property (nonatomic,copy) CloseClick closeClick; 23 | 24 | //恢复按钮位置 25 | - (void)btnResetPosition; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // DLTabBarControllerDemo 4 | // 5 | // Created by FT_David on 16/5/27. 6 | // Copyright © 2016年 FT_David. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | 11 | @interface ViewController () 12 | 13 | @end 14 | 15 | @implementation ViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view, typically from a nib. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/UIView+Extension.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Extension.h 3 | // 黑马微博2期 4 | // 5 | // Created by apple on 14-10-7. 6 | // Copyright (c) 2014年 heima. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIView (Extension) 12 | @property (nonatomic, assign) CGFloat x; 13 | @property (nonatomic, assign) CGFloat y; 14 | @property (nonatomic, assign) CGFloat centerX; 15 | @property (nonatomic, assign) CGFloat centerY; 16 | @property (nonatomic, assign) CGFloat width; 17 | @property (nonatomic, assign) CGFloat height; 18 | @property (nonatomic, assign) CGSize size; 19 | @property (nonatomic, assign) CGPoint origin; 20 | @end 21 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBBottomBar.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBBottomBar.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #define BHBBOTTOMHEIGHT ((57.0 / 736.0) * [UIScreen mainScreen].bounds.size.height) 10 | 11 | #import 12 | 13 | typedef void (^BackClick)(); 14 | typedef void (^CloseClick)(); 15 | 16 | @interface BHBBottomBar : UIView 17 | 18 | @property (nonatomic,assign) BOOL isMoreBar; 19 | 20 | @property (nonatomic,copy) BackClick backClick; 21 | 22 | @property (nonatomic,copy) CloseClick closeClick; 23 | 24 | //恢复按钮位置 25 | - (void)btnResetPosition; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo.xcodeproj/xcuserdata/bihongbo.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | BHBPopViewDemo.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | F75502341B7E146C00DD6A40 16 | 17 | primary 18 | 19 | 20 | F755024D1B7E146C00DD6A40 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemoTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | com.bhb.$(PRODUCT_NAME:rfc1034identifier) 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 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBCustomBtn.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBCustomBtn.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBCustomBtn.h" 10 | 11 | @implementation BHBCustomBtn 12 | 13 | 14 | - (CGRect)imageRectForContentRect:(CGRect)contentRect{ 15 | CGRect rect = CGRectMake(0, (contentRect.size.height - ICONHEIGHT - TITLEHEIGHT) / 2, contentRect.size.width, ICONHEIGHT); 16 | return rect; 17 | } 18 | 19 | - (CGRect)titleRectForContentRect:(CGRect)contentRect 20 | { 21 | CGRect rect = CGRectMake(0, (contentRect.size.height - ICONHEIGHT - TITLEHEIGHT) / 2 + ICONHEIGHT, contentRect.size.width, TITLEHEIGHT); 22 | return rect; 23 | } 24 | 25 | -(void)setHighlighted:(BOOL)highlighted 26 | { 27 | 28 | } 29 | 30 | - (void)dealloc{ 31 | NSLog(@"BHBCustomBtn"); 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemoTests/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 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemoUITests/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 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBCustomBtn.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBCustomBtn.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBCustomBtn.h" 10 | 11 | @implementation BHBCustomBtn 12 | 13 | 14 | - (CGRect)imageRectForContentRect:(CGRect)contentRect{ 15 | CGRect rect = CGRectMake(0, (contentRect.size.height - ICONHEIGHT - TITLEHEIGHT) / 2, contentRect.size.width, ICONHEIGHT); 16 | return rect; 17 | } 18 | 19 | - (CGRect)titleRectForContentRect:(CGRect)contentRect 20 | { 21 | CGRect rect = CGRectMake(0, (contentRect.size.height - ICONHEIGHT - TITLEHEIGHT) / 2 + ICONHEIGHT, contentRect.size.width, TITLEHEIGHT); 22 | return rect; 23 | } 24 | 25 | -(void)setHighlighted:(BOOL)highlighted 26 | { 27 | 28 | } 29 | 30 | - (void)dealloc{ 31 | NSLog(@"BHBCustomBtn"); 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo.xcodeproj/xcuserdata/ft_david.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DLTabBarControllerDemo.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | AAB468F31CF83DE400B828ED 16 | 17 | primary 18 | 19 | 20 | AAB4690C1CF83DE400B828ED 21 | 22 | primary 23 | 24 | 25 | AAB469171CF83DE400B828ED 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemoTests/BHBPopViewDemoTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBPopViewDemoTests.m 3 | // BHBPopViewDemoTests 4 | // 5 | // Created by 毕洪博 on 15/8/14. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface BHBPopViewDemoTests : XCTestCase 13 | 14 | @end 15 | 16 | @implementation BHBPopViewDemoTests 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 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 maker 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBCenterView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBCenterView.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | @class BHBGroup,BHBItem; 11 | @class BHBCenterView; 12 | 13 | @protocol BHBCenterViewDataSource 14 | @required 15 | - (NSInteger)numberOfItemsWithCenterView:(BHBCenterView *)centerView; 16 | - (BHBItem *)itemWithCenterView:(BHBCenterView *)centerView item:(NSInteger)item; 17 | 18 | @end 19 | 20 | @protocol BHBCenterViewDelegate 21 | 22 | @optional 23 | - (void)didSelectItemWithCenterView:(BHBCenterView *)centerView andItem:(BHBItem *)item; 24 | - (void)didSelectMoreWithCenterView:(BHBCenterView *)centerView andItem:(BHBGroup *)group; 25 | @end 26 | 27 | @interface BHBCenterView : UIScrollView 28 | 29 | @property (nonatomic,weak) id dataSource; 30 | @property (nonatomic,weak) id delegate; 31 | 32 | - (void)reloadData; 33 | 34 | - (void)scrollBack; 35 | 36 | - (void)dismis; 37 | 38 | @end 39 | 40 | #define KBHBRemoveAnimationComplete @"removeAnimation" 41 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBPopView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBPopView.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/14. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #ifndef BHB_INSTANCETYPE 10 | #if __has_feature(objc_instancetype) 11 | #define BHB_INSTANCETYPE instancetype 12 | #else 13 | #define BHB_INSTANCETYPE id 14 | #endif 15 | #endif 16 | 17 | #import 18 | #import "BHBGroup.h" 19 | 20 | typedef void (^DidSelectItemBlock) (BHBItem * item); 21 | 22 | @interface BHBPopView : UIView 23 | 24 | /** 25 | * 直接显示一个popView在某个view上 26 | * 27 | * @param view 父view 28 | * @param imageArray 图标数组 29 | * @param titles 标题数组 30 | * @param block 回调 31 | * @return pop视图 32 | */ 33 | + (BHB_INSTANCETYPE)showToView:(UIView *)view andImages:(NSArray *)imageArray andTitles:(NSArray *)titles andSelectBlock:(DidSelectItemBlock)block; 34 | /** 35 | * 如果显示一个带more功能的,请使用此方法 36 | * 37 | * @param view 父view 38 | * @param array BHBItem类型的集合 39 | * @param block 回调 40 | * @return pop视图 41 | */ 42 | + (BHB_INSTANCETYPE)showToView:(UIView *)view withItems:(NSArray *)array andSelectBlock:(DidSelectItemBlock)block; 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemoTests/DLTabBarControllerDemoTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // DLTabBarControllerDemoTests.m 3 | // DLTabBarControllerDemoTests 4 | // 5 | // Created by FT_David on 16/5/27. 6 | // Copyright © 2016年 FT_David. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface DLTabBarControllerDemoTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation DLTabBarControllerDemoTests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | // Put setup code here. This method is called before the invocation of each test method in the class. 20 | } 21 | 22 | - (void)tearDown { 23 | // Put teardown code here. This method is called after the invocation of each test method in the class. 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample { 28 | // This is an example of a functional test case. 29 | // Use XCTAssert and related functions to verify your tests produce the correct results. 30 | } 31 | 32 | - (void)testPerformanceExample { 33 | // This is an example of a performance test case. 34 | [self measureBlock:^{ 35 | // Put the code you want to measure the time of here. 36 | }]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBCenterView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBCenterView.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | @class BHBGroup,BHBItem; 11 | @class BHBCenterView; 12 | 13 | @protocol BHBCenterViewDataSource 14 | @required 15 | - (NSInteger)numberOfItemsWithCenterView:(BHBCenterView *)centerView; 16 | - (BHBItem *)itemWithCenterView:(BHBCenterView *)centerView item:(NSInteger)item; 17 | 18 | @end 19 | 20 | @protocol BHBCenterViewDelegate 21 | 22 | @optional 23 | - (void)didSelectItemWithCenterView:(BHBCenterView *)centerView andItem:(BHBItem *)item; 24 | - (void)didSelectMoreWithCenterView:(BHBCenterView *)centerView andItem:(BHBGroup *)group; 25 | @end 26 | 27 | @interface BHBCenterView : UIScrollView 28 | 29 | @property (nonatomic,weak) id dataSource; 30 | @property (nonatomic,weak) id delegate; 31 | 32 | - (void)reloadData; 33 | 34 | - (void)scrollBack; 35 | 36 | - (void)dismis; 37 | 38 | @end 39 | 40 | #define KBHBRemoveAnimationComplete @"removeAnimation" 41 | -------------------------------------------------------------------------------- /BHBPopView.podspec: -------------------------------------------------------------------------------- 1 | #enables colorin the terminal bash shell export 2 | Pod::Spec.new do |s| 3 | s.name = "BHBPopView" 4 | s.version = "1.2.0" 5 | s.summary = "Like sina PopView." 6 | s.description = <<-DESC 7 | It is a marquee view used on iOS, which implement by Objective-C. 8 | DESC 9 | s.homepage = "https://github.com/bb-coder/BHBPopView" 10 | # s.screenshots = "http://7xkdhe.com1.z0.glb.clouddn.com/sinaAnimation1.gif" 11 | s.license = 'MIT' 12 | s.author = { "毕洪博" => "bbcoderios@gmail.com" } 13 | s.source = { :git => "https://github.com/bb-coder/BHBPopView.git", :tag => s.version.to_s } 14 | # s.social_media_url = 'bihongbo.com' 15 | 16 | s.platform = :ios, '7.0' 17 | s.ios.deployment_target = '7.0' 18 | s.osx.deployment_target = '10.7' 19 | s.requires_arc = true 20 | 21 | s.source_files = 'BHBPopViewDemo/BHBPopViewDemo/BHBPopView/*' 22 | # s.resources = 'Assets' 23 | 24 | # s.ios.exclude_files = 'Classes/osx' 25 | # s.osx.exclude_files = 'Classes/ios' 26 | # s.public_header_files = 'Classes/**/*.h' 27 | s.frameworks = 'CoreGraphics','UIKit','Foundation' 28 | 29 | end 30 | 31 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBPopView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBPopView.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/14. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #ifndef BHB_INSTANCETYPE 10 | #if __has_feature(objc_instancetype) 11 | #define BHB_INSTANCETYPE instancetype 12 | #else 13 | #define BHB_INSTANCETYPE id 14 | #endif 15 | #endif 16 | 17 | #import 18 | #import "BHBGroup.h" 19 | 20 | typedef void (^DidSelectItemBlock) (BHBItem * item); 21 | 22 | @interface BHBPopView : UIView 23 | 24 | /** 25 | * 直接显示一个popView在某个view上 26 | * 27 | * @param view 父view 28 | * @param imageArray 图标数组 29 | * @param titles 标题数组 30 | * @param block 回调 31 | * @return pop视图 32 | */ 33 | + (BHB_INSTANCETYPE)showToView:(UIView *)view andImages:(NSArray *)imageArray andTitles:(NSArray *)titles andSelectBlock:(DidSelectItemBlock)block; 34 | /** 35 | * 如果显示一个带more功能的,请使用此方法 36 | * 37 | * @param view 父view 38 | * @param array BHBItem类型的集合 39 | * @param block 回调 40 | * @return pop视图 41 | */ 42 | + (BHB_INSTANCETYPE)showToView:(UIView *)view withItems:(NSArray *)array andSelectBlock:(DidSelectItemBlock)block; 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/UIImageView+BHBSetImage.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageView+BHBSetImage.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "UIImageView+BHBSetImage.h" 10 | 11 | @implementation UIImageView (BHBSetImage) 12 | 13 | - (void)bhb_setImage:(UIImage *)image{ 14 | self.image = image; 15 | self.frame = CGRectMake(0, 0, image.size.width, image.size.height); 16 | } 17 | 18 | - (void)bhb_setImageWithResourcePath:(NSString *)path AutoSize:(BOOL)isAuto{ 19 | NSString * filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:path]; 20 | if([[UIDevice currentDevice].systemVersion doubleValue] < 8.0){ 21 | filePath = [filePath stringByAppendingString:@"@2x"]; 22 | } 23 | UIImage * image = [UIImage imageWithContentsOfFile:filePath]; 24 | image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(image.size.height / 2 - 1, image.size.width / 2 - 1, image.size.height / 2 - 1, image.size.width / 2 - 1) resizingMode:UIImageResizingModeStretch]; 25 | if (isAuto) { 26 | [self bhb_setImage:image]; 27 | }else{ 28 | [self setImage:image]; 29 | } 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/UIView+BHBAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+BHBAnimation.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "UIView+BHBAnimation.h" 10 | 11 | @implementation UIView (BHBAnimation) 12 | 13 | //淡入 14 | - (void)fadeInWithTime:(NSTimeInterval)time{ 15 | self.alpha = 0; 16 | [UIView animateWithDuration:time animations:^{ 17 | self.alpha = 1; 18 | } completion:^(BOOL finished) { 19 | 20 | }]; 21 | } 22 | //淡出 23 | - (void)fadeOutWithTime:(NSTimeInterval)time{ 24 | self.alpha = 1; 25 | [UIView animateWithDuration:time animations:^{ 26 | self.alpha = 0; 27 | } completion:^(BOOL finished) { 28 | [self removeFromSuperview]; 29 | }]; 30 | } 31 | //缩放 32 | - (void)scalingWithTime:(NSTimeInterval)time andscal:(CGFloat)scal{ 33 | 34 | [UIView animateWithDuration:time animations:^{ 35 | self.transform = CGAffineTransformMakeScale(scal,scal); 36 | }]; 37 | } 38 | //旋转 39 | - (void)RevolvingWithTime:(NSTimeInterval)time andDelta:(CGFloat)delta{ 40 | [UIView animateWithDuration:time animations:^{ 41 | self.transform = CGAffineTransformMakeRotation(delta); 42 | }]; 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/UIImageView+BHBSetImage.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageView+BHBSetImage.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "UIImageView+BHBSetImage.h" 10 | 11 | @implementation UIImageView (BHBSetImage) 12 | 13 | - (void)bhb_setImage:(UIImage *)image{ 14 | self.image = image; 15 | self.frame = CGRectMake(0, 0, image.size.width, image.size.height); 16 | } 17 | 18 | - (void)bhb_setImageWithResourcePath:(NSString *)path AutoSize:(BOOL)isAuto{ 19 | NSString * filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:path]; 20 | if([[UIDevice currentDevice].systemVersion doubleValue] < 8.0){ 21 | filePath = [filePath stringByAppendingString:@"@2x"]; 22 | } 23 | UIImage * image = [UIImage imageWithContentsOfFile:filePath]; 24 | image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(image.size.height / 2 - 1, image.size.width / 2 - 1, image.size.height / 2 - 1, image.size.width / 2 - 1) resizingMode:UIImageResizingModeStretch]; 25 | if (isAuto) { 26 | [self bhb_setImage:image]; 27 | }else{ 28 | [self setImage:image]; 29 | } 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/UIView+BHBAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+BHBAnimation.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "UIView+BHBAnimation.h" 10 | 11 | @implementation UIView (BHBAnimation) 12 | 13 | //淡入 14 | - (void)fadeInWithTime:(NSTimeInterval)time{ 15 | self.alpha = 0; 16 | [UIView animateWithDuration:time animations:^{ 17 | self.alpha = 1; 18 | } completion:^(BOOL finished) { 19 | 20 | }]; 21 | } 22 | //淡出 23 | - (void)fadeOutWithTime:(NSTimeInterval)time{ 24 | self.alpha = 1; 25 | [UIView animateWithDuration:time animations:^{ 26 | self.alpha = 0; 27 | } completion:^(BOOL finished) { 28 | [self removeFromSuperview]; 29 | }]; 30 | } 31 | //缩放 32 | - (void)scalingWithTime:(NSTimeInterval)time andscal:(CGFloat)scal{ 33 | 34 | [UIView animateWithDuration:time animations:^{ 35 | self.transform = CGAffineTransformMakeScale(scal,scal); 36 | }]; 37 | } 38 | //旋转 39 | - (void)RevolvingWithTime:(NSTimeInterval)time andDelta:(CGFloat)delta{ 40 | [UIView animateWithDuration:time animations:^{ 41 | self.transform = CGAffineTransformMakeRotation(delta); 42 | }]; 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | com.bhb.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/UIButton+BHBSetImage.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIButton+BHBSetImage.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "UIButton+BHBSetImage.h" 10 | 11 | @implementation UIButton (BHBSetImage) 12 | 13 | - (void)bhb_setImage:(NSString *)imagePath{ 14 | NSString * filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:imagePath]; 15 | if([[UIDevice currentDevice].systemVersion doubleValue] < 8.0){ 16 | filePath = [filePath stringByAppendingString:@"@2x"]; 17 | } 18 | UIImage * image = [UIImage imageWithContentsOfFile:filePath]; 19 | [self setImage:image forState:UIControlStateNormal]; 20 | } 21 | 22 | - (void)bhb_setBGImage:(NSString *)imagePath{ 23 | NSString * filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:imagePath]; 24 | if([[UIDevice currentDevice].systemVersion doubleValue] < 8.0){ 25 | filePath = [filePath stringByAppendingString:@"@2x"]; 26 | } 27 | UIImage * image = [UIImage imageWithContentsOfFile:filePath]; 28 | image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(image.size.height / 2 - 1, image.size.width / 2 - 1, image.size.height / 2 - 1, image.size.width / 2 - 1) resizingMode:UIImageResizingModeStretch]; 29 | [self setBackgroundImage:image forState:UIControlStateNormal]; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/UIButton+BHBSetImage.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIButton+BHBSetImage.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "UIButton+BHBSetImage.h" 10 | 11 | @implementation UIButton (BHBSetImage) 12 | 13 | - (void)bhb_setImage:(NSString *)imagePath{ 14 | NSString * filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:imagePath]; 15 | if([[UIDevice currentDevice].systemVersion doubleValue] < 8.0){ 16 | filePath = [filePath stringByAppendingString:@"@2x"]; 17 | } 18 | UIImage * image = [UIImage imageWithContentsOfFile:filePath]; 19 | [self setImage:image forState:UIControlStateNormal]; 20 | } 21 | 22 | - (void)bhb_setBGImage:(NSString *)imagePath{ 23 | NSString * filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:imagePath]; 24 | if([[UIDevice currentDevice].systemVersion doubleValue] < 8.0){ 25 | filePath = [filePath stringByAppendingString:@"@2x"]; 26 | } 27 | UIImage * image = [UIImage imageWithContentsOfFile:filePath]; 28 | image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(image.size.height / 2 - 1, image.size.width / 2 - 1, image.size.height / 2 - 1, image.size.width / 2 - 1) resizingMode:UIImageResizingModeStretch]; 29 | [self setBackgroundImage:image forState:UIControlStateNormal]; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemoUITests/DLTabBarControllerDemoUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // DLTabBarControllerDemoUITests.m 3 | // DLTabBarControllerDemoUITests 4 | // 5 | // Created by FT_David on 16/5/27. 6 | // Copyright © 2016年 FT_David. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface DLTabBarControllerDemoUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation DLTabBarControllerDemoUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | - (void)testExample { 36 | // Use recording to get started writing UI tests. 37 | // Use XCTAssert and related functions to verify your tests produce the correct results. 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBPlaySoundTool.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBPlaySoundTool.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "BHBSingleton.h" 11 | #import 12 | 13 | @interface BHBSoundId : NSObject 14 | { 15 | SystemSoundID _soundID; 16 | } 17 | 18 | /** 19 | * @brief 为播放震动效果初始化 20 | * 21 | * @return self 22 | */ 23 | -(id)initForPlayingVibrate; 24 | 25 | /** 26 | * @brief 为播放系统音效初始化(无需提供音频文件) 27 | * 28 | * @param resourceName 系统音效名称 29 | * @param type 系统音效类型 30 | * 31 | * @return self 32 | */ 33 | -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type; 34 | 35 | /** 36 | * @brief 为播放特定的音频文件初始化(需提供音频文件) 37 | * 38 | * @param filename 音频文件名(加在工程中) 39 | * 40 | * @return self 41 | */ 42 | -(id)initForPlayingSoundEffectWith:(NSString *)filename; 43 | 44 | /** 45 | * @brief 播放音效 46 | */ 47 | -(void)play; 48 | 49 | @end 50 | 51 | @interface BHBPlaySoundTool : NSObject 52 | 53 | BHBSingletonH(PlaySoundTool) 54 | 55 | /** 56 | * 添加一个音效 57 | * 58 | * @param soundID 音效对象 59 | * @param name 音效名字 60 | */ 61 | - (void)addSoundId:(BHBSoundId *)soundID WithName:(NSString *)name; 62 | 63 | /** 64 | * 播放音效 65 | * 66 | * @param name 音效名字 67 | * 68 | * @return 播放是否成功 69 | */ 70 | - (BOOL)playWithSoundName:(NSString *)name; 71 | 72 | /** 73 | * 初始化所有默认音效 74 | */ 75 | - (void)registerAllSoundId; 76 | 77 | @end 78 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBPlaySoundTool.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBPlaySoundTool.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "BHBSingleton.h" 11 | #import 12 | 13 | @interface BHBSoundId : NSObject 14 | { 15 | SystemSoundID _soundID; 16 | } 17 | 18 | /** 19 | * @brief 为播放震动效果初始化 20 | * 21 | * @return self 22 | */ 23 | -(id)initForPlayingVibrate; 24 | 25 | /** 26 | * @brief 为播放系统音效初始化(无需提供音频文件) 27 | * 28 | * @param resourceName 系统音效名称 29 | * @param type 系统音效类型 30 | * 31 | * @return self 32 | */ 33 | -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type; 34 | 35 | /** 36 | * @brief 为播放特定的音频文件初始化(需提供音频文件) 37 | * 38 | * @param filename 音频文件名(加在工程中) 39 | * 40 | * @return self 41 | */ 42 | -(id)initForPlayingSoundEffectWith:(NSString *)filename; 43 | 44 | /** 45 | * @brief 播放音效 46 | */ 47 | -(void)play; 48 | 49 | @end 50 | 51 | @interface BHBPlaySoundTool : NSObject 52 | 53 | BHBSingletonH(PlaySoundTool) 54 | 55 | /** 56 | * 添加一个音效 57 | * 58 | * @param soundID 音效对象 59 | * @param name 音效名字 60 | */ 61 | - (void)addSoundId:(BHBSoundId *)soundID WithName:(NSString *)name; 62 | 63 | /** 64 | * 播放音效 65 | * 66 | * @param name 音效名字 67 | * 68 | * @return 播放是否成功 69 | */ 70 | - (BOOL)playWithSoundName:(NSString *)name; 71 | 72 | /** 73 | * 初始化所有默认音效 74 | */ 75 | - (void)registerAllSoundId; 76 | 77 | @end 78 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/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 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/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 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo.xcodeproj/project.xcworkspace/xcshareddata/BHBPopViewDemo.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | A52955D1-2901-452C-88CC-470AD957EAA9 9 | IDESourceControlProjectName 10 | BHBPopViewDemo 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 47BB9F9CB5B154A61EB7B6C1923B7E1049138B37 14 | https://github.com/bb-coder/BHBPopView.git 15 | 16 | IDESourceControlProjectPath 17 | BHBPopViewDemo/BHBPopViewDemo.xcodeproj 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | 47BB9F9CB5B154A61EB7B6C1923B7E1049138B37 21 | ../../.. 22 | 23 | IDESourceControlProjectURL 24 | https://github.com/bb-coder/BHBPopView.git 25 | IDESourceControlProjectVersion 26 | 111 27 | IDESourceControlProjectWCCIdentifier 28 | 47BB9F9CB5B154A61EB7B6C1923B7E1049138B37 29 | IDESourceControlProjectWCConfigurations 30 | 31 | 32 | IDESourceControlRepositoryExtensionIdentifierKey 33 | public.vcs.git 34 | IDESourceControlWCCIdentifierKey 35 | 47BB9F9CB5B154A61EB7B6C1923B7E1049138B37 36 | IDESourceControlWCCName 37 | BHBPopView 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/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 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/14. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | - (void)applicationWillResignActive:(UIApplication *)application { 24 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 25 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 26 | } 27 | 28 | - (void)applicationDidEnterBackground:(UIApplication *)application { 29 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 30 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 31 | } 32 | 33 | - (void)applicationWillEnterForeground:(UIApplication *)application { 34 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 35 | } 36 | 37 | - (void)applicationDidBecomeActive:(UIApplication *)application { 38 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 39 | } 40 | 41 | - (void)applicationWillTerminate:(UIApplication *)application { 42 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/UIView+Extension.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Extension.m 3 | // 黑马微博2期 4 | // 5 | // Created by apple on 14-10-7. 6 | // Copyright (c) 2014年 heima. All rights reserved. 7 | // 8 | 9 | #import "UIView+Extension.h" 10 | 11 | @implementation UIView (Extension) 12 | 13 | - (void)setX:(CGFloat)x 14 | { 15 | CGRect frame = self.frame; 16 | frame.origin.x = x; 17 | self.frame = frame; 18 | } 19 | 20 | - (void)setY:(CGFloat)y 21 | { 22 | CGRect frame = self.frame; 23 | frame.origin.y = y; 24 | self.frame = frame; 25 | } 26 | 27 | - (CGFloat)x 28 | { 29 | return self.frame.origin.x; 30 | } 31 | 32 | - (CGFloat)y 33 | { 34 | return self.frame.origin.y; 35 | } 36 | 37 | - (void)setCenterX:(CGFloat)centerX 38 | { 39 | CGPoint center = self.center; 40 | center.x = centerX; 41 | self.center = center; 42 | } 43 | 44 | - (CGFloat)centerX 45 | { 46 | return self.center.x; 47 | } 48 | 49 | - (void)setCenterY:(CGFloat)centerY 50 | { 51 | CGPoint center = self.center; 52 | center.y = centerY; 53 | self.center = center; 54 | } 55 | 56 | - (CGFloat)centerY 57 | { 58 | return self.center.y; 59 | } 60 | 61 | - (void)setWidth:(CGFloat)width 62 | { 63 | CGRect frame = self.frame; 64 | frame.size.width = width; 65 | self.frame = frame; 66 | } 67 | 68 | - (void)setHeight:(CGFloat)height 69 | { 70 | CGRect frame = self.frame; 71 | frame.size.height = height; 72 | self.frame = frame; 73 | } 74 | 75 | - (CGFloat)height 76 | { 77 | return self.frame.size.height; 78 | } 79 | 80 | - (CGFloat)width 81 | { 82 | return self.frame.size.width; 83 | } 84 | 85 | - (void)setSize:(CGSize)size 86 | { 87 | CGRect frame = self.frame; 88 | frame.size = size; 89 | self.frame = frame; 90 | } 91 | 92 | - (CGSize)size 93 | { 94 | return self.frame.size; 95 | } 96 | 97 | - (void)setOrigin:(CGPoint)origin 98 | { 99 | CGRect frame = self.frame; 100 | frame.origin = origin; 101 | self.frame = frame; 102 | } 103 | 104 | - (CGPoint)origin 105 | { 106 | return self.frame.origin; 107 | } 108 | @end 109 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // DLTabBarControllerDemo 4 | // 5 | // Created by FT_David on 16/5/27. 6 | // Copyright © 2016年 FT_David. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "DLTabBarController.h" 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 20 | self.window.backgroundColor = [UIColor whiteColor]; 21 | self.window.rootViewController = [[DLTabBarController alloc] init]; 22 | [self.window makeKeyAndVisible]; 23 | return YES; 24 | } 25 | 26 | - (void)applicationWillResignActive:(UIApplication *)application { 27 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 28 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 29 | } 30 | 31 | - (void)applicationDidEnterBackground:(UIApplication *)application { 32 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 33 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 34 | } 35 | 36 | - (void)applicationWillEnterForeground:(UIApplication *)application { 37 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 38 | } 39 | 40 | - (void)applicationDidBecomeActive:(UIApplication *)application { 41 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 42 | } 43 | 44 | - (void)applicationWillTerminate:(UIApplication *)application { 45 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBSingleton.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBSingleton.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #ifndef BHBPopViewDemo_BHBSingleton_h 10 | #define BHBPopViewDemo_BHBSingleton_h 11 | 12 | #define BHBSingletonH(methodName) + (instancetype)shared##methodName; 13 | #if __has_feature(objc_arc) // 是ARC 14 | #define BHBSingletonM(methodName) \ 15 | static id instace = nil; \ 16 | + (id)allocWithZone:(struct _NSZone *)zone \ 17 | { \ 18 | if (instace == nil) { \ 19 | static dispatch_once_t onceToken; \ 20 | dispatch_once(&onceToken, ^{ \ 21 | instace = [super allocWithZone:zone]; \ 22 | }); \ 23 | } \ 24 | return instace; \ 25 | } \ 26 | \ 27 | - (id)init \ 28 | { \ 29 | static dispatch_once_t onceToken; \ 30 | dispatch_once(&onceToken, ^{ \ 31 | instace = [super init]; \ 32 | }); \ 33 | return instace; \ 34 | } \ 35 | \ 36 | + (instancetype)shared##methodName \ 37 | { \ 38 | return [[self alloc] init]; \ 39 | } \ 40 | - (id)copyWithZone:(struct _NSZone *)zone \ 41 | { \ 42 | return instace; \ 43 | } \ 44 | \ 45 | - (id)mutableCopyWithZone:(struct _NSZone *)zone{\ 46 | return instace;\ 47 | } 48 | #else // 不是ARC 49 | #define BHBSingletonM(methodName) \ 50 | static id instace = nil; \ 51 | + (id)allocWithZone:(struct _NSZone *)zone \ 52 | { \ 53 | if (instace == nil) { \ 54 | static dispatch_once_t onceToken; \ 55 | dispatch_once(&onceToken, ^{ \ 56 | instace = [super allocWithZone:zone]; \ 57 | }); \ 58 | } \ 59 | return instace; \ 60 | } \ 61 | \ 62 | - (id)init \ 63 | { \ 64 | static dispatch_once_t onceToken; \ 65 | dispatch_once(&onceToken, ^{ \ 66 | instace = [super init]; \ 67 | }); \ 68 | return instace; \ 69 | } \ 70 | \ 71 | + (instancetype)shared##methodName \ 72 | { \ 73 | return [[self alloc] init]; \ 74 | } \ 75 | \ 76 | + (oneway void)release \ 77 | { \ 78 | \ 79 | } \ 80 | \ 81 | - (id)retain \ 82 | { \ 83 | return self; \ 84 | } \ 85 | \ 86 | - (NSUInteger)retainCount \ 87 | { \ 88 | return 1; \ 89 | } \ 90 | - (id)copyWithZone:(struct _NSZone *)zone \ 91 | { \ 92 | return instace; \ 93 | } \ 94 | - (id)mutableCopyWithZone:(struct _NSZone *)zone \ 95 | { \ 96 | return instace; \ 97 | } 98 | #endif 99 | 100 | 101 | #endif 102 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/DLTabBar.m: -------------------------------------------------------------------------------- 1 | // 2 | // DLTabBar.m 3 | // DLTabBarControllerDemo 4 | // 5 | // Created by FT_David on 16/5/27. 6 | // Copyright © 2016年 FT_David. All rights reserved. 7 | // 8 | 9 | #import "DLTabBar.h" 10 | #import "UIView+Extension.h" 11 | @interface DLTabBar() 12 | 13 | @property (nonatomic, weak) UIButton *centerButton; 14 | 15 | @end 16 | 17 | @implementation DLTabBar 18 | 19 | @dynamic delegate; 20 | 21 | 22 | -(instancetype)initWithFrame:(CGRect)frame 23 | { 24 | self = [super initWithFrame:frame]; 25 | if (self) { 26 | UIButton *centerButton = [[UIButton alloc] init]; 27 | [centerButton setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button"] forState:UIControlStateNormal]; 28 | [centerButton setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_highlighted"] forState:UIControlStateHighlighted]; 29 | [centerButton setImage:[UIImage imageNamed:@"tabbar_compose_icon_add"] forState:UIControlStateNormal]; 30 | [centerButton setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_highlighted"] forState:UIControlStateHighlighted]; 31 | centerButton.size = centerButton.currentBackgroundImage.size; 32 | [centerButton addTarget:self action:@selector(centerButtonAction) forControlEvents:UIControlEventTouchUpInside]; 33 | [self addSubview:centerButton]; 34 | self.centerButton = centerButton; 35 | } 36 | return self; 37 | } 38 | 39 | 40 | - (void)centerButtonAction 41 | { 42 | 43 | if (self.delegate && [self.delegate respondsToSelector:@selector(tabBarDidClickAtCenterButton:)]) { 44 | [self.delegate tabBarDidClickAtCenterButton:self]; 45 | } 46 | } 47 | 48 | - (void)layoutSubviews 49 | { 50 | 51 | [super layoutSubviews]; 52 | 53 | 54 | self.centerButton.centerX = self.width * 0.5; 55 | self.centerButton.centerY = self.height * 0.5; 56 | 57 | CGFloat tabbarButtonW = self.width / 5; 58 | CGFloat tabbarButtonIndex = 0; 59 | for (UIView *child in self.subviews) { 60 | Class class = NSClassFromString(@"UITabBarButton"); 61 | if ([child isKindOfClass:class]) { 62 | 63 | child.width = tabbarButtonW; 64 | 65 | child.x = tabbarButtonIndex * tabbarButtonW; 66 | 67 | tabbarButtonIndex++; 68 | if (tabbarButtonIndex == 2) { 69 | tabbarButtonIndex++; 70 | } 71 | } 72 | } 73 | } 74 | 75 | 76 | @end 77 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBSingleton.h: -------------------------------------------------------------------------------- 1 | // 2 | // BHBSingleton.h 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #ifndef BHBPopViewDemo_BHBSingleton_h 10 | #define BHBPopViewDemo_BHBSingleton_h 11 | 12 | #define BHBSingletonH(methodName) + (instancetype)shared##methodName; 13 | #if __has_feature(objc_arc) // 是ARC 14 | #define BHBSingletonM(methodName) \ 15 | static id instace = nil; \ 16 | + (id)allocWithZone:(struct _NSZone *)zone \ 17 | { \ 18 | if (instace == nil) { \ 19 | static dispatch_once_t onceToken; \ 20 | dispatch_once(&onceToken, ^{ \ 21 | instace = [super allocWithZone:zone]; \ 22 | }); \ 23 | } \ 24 | return instace; \ 25 | } \ 26 | \ 27 | - (id)init \ 28 | { \ 29 | static dispatch_once_t onceToken; \ 30 | dispatch_once(&onceToken, ^{ \ 31 | instace = [super init]; \ 32 | }); \ 33 | return instace; \ 34 | } \ 35 | \ 36 | + (instancetype)shared##methodName \ 37 | { \ 38 | return [[self alloc] init]; \ 39 | } \ 40 | - (id)copyWithZone:(struct _NSZone *)zone \ 41 | { \ 42 | return instace; \ 43 | } \ 44 | \ 45 | - (id)mutableCopyWithZone:(struct _NSZone *)zone{\ 46 | return instace;\ 47 | } 48 | #else // 不是ARC 49 | #define BHBSingletonM(methodName) \ 50 | static id instace = nil; \ 51 | + (id)allocWithZone:(struct _NSZone *)zone \ 52 | { \ 53 | if (instace == nil) { \ 54 | static dispatch_once_t onceToken; \ 55 | dispatch_once(&onceToken, ^{ \ 56 | instace = [super allocWithZone:zone]; \ 57 | }); \ 58 | } \ 59 | return instace; \ 60 | } \ 61 | \ 62 | - (id)init \ 63 | { \ 64 | static dispatch_once_t onceToken; \ 65 | dispatch_once(&onceToken, ^{ \ 66 | instace = [super init]; \ 67 | }); \ 68 | return instace; \ 69 | } \ 70 | \ 71 | + (instancetype)shared##methodName \ 72 | { \ 73 | return [[self alloc] init]; \ 74 | } \ 75 | \ 76 | + (oneway void)release \ 77 | { \ 78 | \ 79 | } \ 80 | \ 81 | - (id)retain \ 82 | { \ 83 | return self; \ 84 | } \ 85 | \ 86 | - (NSUInteger)retainCount \ 87 | { \ 88 | return 1; \ 89 | } \ 90 | - (id)copyWithZone:(struct _NSZone *)zone \ 91 | { \ 92 | return instace; \ 93 | } \ 94 | - (id)mutableCopyWithZone:(struct _NSZone *)zone \ 95 | { \ 96 | return instace; \ 97 | } 98 | #endif 99 | 100 | 101 | #endif 102 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/14. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "BHBPopView.h" 11 | 12 | @interface ViewController () 13 | 14 | @end 15 | 16 | @implementation ViewController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | //添加背景图 21 | [self addBackImage]; 22 | } 23 | 24 | /** 25 | * 添加背景图 26 | */ 27 | - (void)addBackImage{ 28 | UIImageView * backImageView = [[UIImageView alloc]initWithFrame:self.view.bounds]; 29 | backImageView.image = [UIImage imageNamed:@"backgroundImage"]; 30 | [self.view addSubview:backImageView]; 31 | } 32 | 33 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 34 | 35 | BHBItem * item0 = [[BHBItem alloc]initWithTitle:@"Text" Icon:@"images.bundle/tabbar_compose_idea"]; 36 | BHBItem * item1 = [[BHBItem alloc]initWithTitle:@"Albums" Icon:@"images.bundle/tabbar_compose_photo"]; 37 | BHBItem * item2 = [[BHBItem alloc]initWithTitle:@"Camera" Icon:@"images.bundle/tabbar_compose_camera"]; 38 | //第4个按钮内部有一组 39 | BHBGroup * item3 = [[BHBGroup alloc]initWithTitle:@"Check in" Icon:@"images.bundle/tabbar_compose_lbs"]; 40 | BHBItem * item31 = [[BHBItem alloc]initWithTitle:@"Friend Circle" Icon:@"images.bundle/tabbar_compose_friend"]; 41 | BHBItem * item32 = [[BHBItem alloc]initWithTitle:@"Weibo Camera" Icon:@"images.bundle/tabbar_compose_wbcamera"]; 42 | BHBItem * item33 = [[BHBItem alloc]initWithTitle:@"Music" Icon:@"images.bundle/tabbar_compose_music"]; 43 | item3.items = @[item31,item32,item33]; 44 | 45 | BHBItem * item4 = [[BHBItem alloc]initWithTitle:@"Review" Icon:@"images.bundle/tabbar_compose_review"]; 46 | 47 | //第六个按钮内部有一组 48 | BHBGroup * item5 = [[BHBGroup alloc]initWithTitle:@"More" Icon:@"images.bundle/tabbar_compose_more"]; 49 | BHBItem * item51 = [[BHBItem alloc]initWithTitle:@"Friend Circle" Icon:@"images.bundle/tabbar_compose_friend"]; 50 | BHBItem * item52 = [[BHBItem alloc]initWithTitle:@"Weibo Camera" Icon:@"images.bundle/tabbar_compose_wbcamera"]; 51 | BHBItem * item53 = [[BHBItem alloc]initWithTitle:@"Music" Icon:@"images.bundle/tabbar_compose_music"]; 52 | BHBItem * item54 = [[BHBItem alloc]initWithTitle:@"Blog" Icon:@"images.bundle/tabbar_compose_weibo"]; 53 | BHBItem * item55 = [[BHBItem alloc]initWithTitle:@"Collection" Icon:@"images.bundle/tabbar_compose_transfer"]; 54 | BHBItem * item56 = [[BHBItem alloc]initWithTitle:@"Voice" Icon:@"images.bundle/tabbar_compose_voice"]; 55 | item5.items = @[item51,item52,item53,item54,item55,item56]; 56 | 57 | 58 | //添加popview 59 | [BHBPopView showToView:self.view.window withItems:@[item0,item1,item2,item3,item4,item5]andSelectBlock:^(BHBItem *item) { 60 | if ([item isKindOfClass:[BHBGroup class]]) { 61 | NSLog(@"选中%@分组",item.title); 62 | }else{ 63 | NSLog(@"选中%@项",item.title); 64 | } 65 | }]; 66 | 67 | //添加popview 68 | // [BHBPopView showToView:self.view andImages:@[@"images.bundle/tabbar_compose_idea",@"images.bundle/tabbar_compose_photo",@"images.bundle/tabbar_compose_camera",@"images.bundle/tabbar_compose_lbs",@"images.bundle/tabbar_compose_review",@"images.bundle/tabbar_compose_more"] andTitles:@[@"Text",@"Albums",@"Camera",@"Check in",@"Review",@"More"] andSelectBlock:^(BHBItem *item) { 69 | // 70 | // }]; 71 | } 72 | 73 | @end 74 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBPlaySoundTool.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBPlaySoundTool.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBPlaySoundTool.h" 10 | 11 | @implementation BHBSoundId 12 | 13 | - (id)initForPlayingVibrate 14 | { 15 | self = [super init]; 16 | if (self) { 17 | _soundID = kSystemSoundID_Vibrate; 18 | } 19 | return self; 20 | } 21 | 22 | -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type 23 | { 24 | self = [super init]; 25 | if (self) { 26 | NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:resourceName ofType:type]; 27 | if (path) { 28 | SystemSoundID theSoundID; 29 | OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &theSoundID); 30 | if (error == kAudioServicesNoError) { 31 | _soundID = theSoundID; 32 | }else { 33 | NSLog(@"Failed to create sound "); 34 | } 35 | } 36 | 37 | } 38 | return self; 39 | } 40 | 41 | -(id)initForPlayingSoundEffectWith:(NSString *)filename 42 | { 43 | self = [super init]; 44 | if (self) { 45 | NSURL *fileURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil]; 46 | if (fileURL != nil) 47 | { 48 | SystemSoundID theSoundID; 49 | OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &theSoundID); 50 | if (error == kAudioServicesNoError){ 51 | _soundID = theSoundID; 52 | }else { 53 | NSLog(@"Failed to create sound "); 54 | } 55 | } 56 | } 57 | return self; 58 | } 59 | 60 | -(void)play 61 | { 62 | AudioServicesPlaySystemSound(_soundID); 63 | } 64 | 65 | -(void)dealloc 66 | { 67 | AudioServicesDisposeSystemSoundID(_soundID); 68 | } 69 | 70 | 71 | @end 72 | 73 | @interface BHBPlaySoundTool () 74 | 75 | @property (nonatomic,strong) NSMutableDictionary * soundDictinary; 76 | 77 | @end 78 | 79 | @implementation BHBPlaySoundTool 80 | 81 | BHBSingletonM(PlaySoundTool) 82 | 83 | -(NSMutableDictionary *)soundDictinary 84 | { 85 | if (!_soundDictinary) { 86 | _soundDictinary = [NSMutableDictionary dictionary]; 87 | [self registerAllSoundId]; 88 | } 89 | return _soundDictinary; 90 | } 91 | 92 | - (void)addSoundId:(BHBSoundId *)soundID WithName:(NSString *)name{ 93 | [self.soundDictinary setObject:soundID forKey:name]; 94 | } 95 | 96 | //初始化所有音效 97 | - (void)registerAllSoundId{ 98 | BHBSoundId * s1 = [[BHBSoundId alloc]initForPlayingSoundEffectWith:@"music.bundle/composer_open.wav"]; 99 | [self.soundDictinary setObject:s1 forKey:@"open"]; 100 | BHBSoundId * s2 = [[BHBSoundId alloc]initForPlayingSoundEffectWith:@"music.bundle/composer_close.wav"]; 101 | [self.soundDictinary setObject:s2 forKey:@"close"]; 102 | } 103 | 104 | - (BOOL)playWithSoundName:(NSString *)name{ 105 | if (name && ![name isEqualToString:@""]) { 106 | BHBSoundId * soundId = [self.soundDictinary objectForKey:name]; 107 | if (!soundId) { 108 | return NO; 109 | } 110 | else{ 111 | [soundId play]; 112 | return YES; 113 | } 114 | } 115 | return NO; 116 | } 117 | 118 | @end 119 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBPlaySoundTool.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBPlaySoundTool.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBPlaySoundTool.h" 10 | 11 | @implementation BHBSoundId 12 | 13 | - (id)initForPlayingVibrate 14 | { 15 | self = [super init]; 16 | if (self) { 17 | _soundID = kSystemSoundID_Vibrate; 18 | } 19 | return self; 20 | } 21 | 22 | -(id)initForPlayingSystemSoundEffectWith:(NSString *)resourceName ofType:(NSString *)type 23 | { 24 | self = [super init]; 25 | if (self) { 26 | NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:resourceName ofType:type]; 27 | if (path) { 28 | SystemSoundID theSoundID; 29 | OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &theSoundID); 30 | if (error == kAudioServicesNoError) { 31 | _soundID = theSoundID; 32 | }else { 33 | NSLog(@"Failed to create sound "); 34 | } 35 | } 36 | 37 | } 38 | return self; 39 | } 40 | 41 | -(id)initForPlayingSoundEffectWith:(NSString *)filename 42 | { 43 | self = [super init]; 44 | if (self) { 45 | NSURL *fileURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil]; 46 | if (fileURL != nil) 47 | { 48 | SystemSoundID theSoundID; 49 | OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &theSoundID); 50 | if (error == kAudioServicesNoError){ 51 | _soundID = theSoundID; 52 | }else { 53 | NSLog(@"Failed to create sound "); 54 | } 55 | } 56 | } 57 | return self; 58 | } 59 | 60 | -(void)play 61 | { 62 | AudioServicesPlaySystemSound(_soundID); 63 | } 64 | 65 | -(void)dealloc 66 | { 67 | AudioServicesDisposeSystemSoundID(_soundID); 68 | } 69 | 70 | 71 | @end 72 | 73 | @interface BHBPlaySoundTool () 74 | 75 | @property (nonatomic,strong) NSMutableDictionary * soundDictinary; 76 | 77 | @end 78 | 79 | @implementation BHBPlaySoundTool 80 | 81 | BHBSingletonM(PlaySoundTool) 82 | 83 | -(NSMutableDictionary *)soundDictinary 84 | { 85 | if (!_soundDictinary) { 86 | _soundDictinary = [NSMutableDictionary dictionary]; 87 | [self registerAllSoundId]; 88 | } 89 | return _soundDictinary; 90 | } 91 | 92 | - (void)addSoundId:(BHBSoundId *)soundID WithName:(NSString *)name{ 93 | [self.soundDictinary setObject:soundID forKey:name]; 94 | } 95 | 96 | //初始化所有音效 97 | - (void)registerAllSoundId{ 98 | BHBSoundId * s1 = [[BHBSoundId alloc]initForPlayingSoundEffectWith:@"music.bundle/composer_open.wav"]; 99 | [self.soundDictinary setObject:s1 forKey:@"open"]; 100 | BHBSoundId * s2 = [[BHBSoundId alloc]initForPlayingSoundEffectWith:@"music.bundle/composer_close.wav"]; 101 | [self.soundDictinary setObject:s2 forKey:@"close"]; 102 | } 103 | 104 | - (BOOL)playWithSoundName:(NSString *)name{ 105 | if (name && ![name isEqualToString:@""]) { 106 | BHBSoundId * soundId = [self.soundDictinary objectForKey:name]; 107 | if (!soundId) { 108 | return NO; 109 | } 110 | else{ 111 | [soundId play]; 112 | return YES; 113 | } 114 | } 115 | return NO; 116 | } 117 | 118 | @end 119 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 20 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![License MIT](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://raw.githubusercontent.com/bb-coder/BHBPopView/master/LICENSE) 2 | [![CocoaPods](https://img.shields.io/cocoapods/v/BHBPopView.svg?style=flat)](http://cocoapods.org/?q=BHBPopView) 3 | [![CocoaPods](https://img.shields.io/cocoapods/p/BHBPopView.svg?style=flat)](http://cocoapods.org/?q=BHBPopView) 4 | [![Support](https://img.shields.io/badge/support-iOS%207%2B%20-blue.svg?style=flat)](https://www.apple.com/nl/ios/) 5 | 6 | # BHBPopView 7 | 仿新浪微博客户端“加号”按钮弹出动画 8 | 9 | ![演示1](http://7xkdhe.com1.z0.glb.clouddn.com/sinaAnimation1.gif) 10 | ![演示2](http://7xkdhe.com1.z0.glb.clouddn.com/sinaAnimation2.gif) 11 | 12 | 13 | ## 怎么使用: 14 | 15 | ### 0.下载或者在cocoapods中引入: 16 | 17 | pod 'BHBPopView' 18 | 19 | ### 1.导入头文件 20 | 21 | #import "BHBPopView.h" 22 | 23 | ### 2.显示弹出框 24 | //添加popview 25 | [BHBPopView showToView:self.view 26 | andImages:@[@"images.bundle/tabbar_compose_idea", 27 | @"images.bundle/tabbar_compose_photo",@"images.bundle/tabbar_compose_camera", 28 | @"images.bundle/tabbar_compose_lbs",@"images.bundle/tabbar_compose_review", 29 | @"images.bundle/tabbar_compose_more"] 30 | andTitles: 31 | @[@"Text",@"Albums",@"Camera",@"Check in",@"Review",@"More"] 32 | andSelectBlock:^(BHBItem *item) { 33 | 34 | } 35 | ]; 36 | 37 | ### 3.使用带more按钮滑动显示第二屏功能 38 | BHBItem * item0 = [[BHBItem alloc]initWithTitle:@"Text" Icon:@"images.bundle/tabbar_compose_idea"]; 39 | BHBItem * item1 = [[BHBItem alloc]initWithTitle:@"Albums" Icon:@"images.bundle/tabbar_compose_photo"]; 40 | BHBItem * item2 = [[BHBItem alloc]initWithTitle:@"Camera" Icon:@"images.bundle/tabbar_compose_camera"]; 41 | //第4个按钮内部有一组 42 | BHBGroup * item3 = [[BHBGroup alloc]initWithTitle:@"Check in" Icon:@"images.bundle/tabbar_compose_lbs"]; 43 | BHBItem * item31 = [[BHBItem alloc]initWithTitle:@"Friend Circle" Icon:@"images.bundle/tabbar_compose_friend"]; 44 | BHBItem * item32 = [[BHBItem alloc]initWithTitle:@"Weibo Camera" Icon:@"images.bundle/tabbar_compose_wbcamera"]; 45 | BHBItem * item33 = [[BHBItem alloc]initWithTitle:@"Music" Icon:@"images.bundle/tabbar_compose_music"]; 46 | item3.items = @[item31,item32,item33]; 47 | 48 | BHBItem * item4 = [[BHBItem alloc]initWithTitle:@"Review" Icon:@"images.bundle/tabbar_compose_review"]; 49 | 50 | //第六个按钮内部有一组 51 | BHBGroup * item5 = [[BHBGroup alloc]initWithTitle:@"More" Icon:@"images.bundle/tabbar_compose_more"]; 52 | BHBItem * item51 = [[BHBItem alloc]initWithTitle:@"Friend Circle" Icon:@"images.bundle/tabbar_compose_friend"]; 53 | BHBItem * item52 = [[BHBItem alloc]initWithTitle:@"Weibo Camera" Icon:@"images.bundle/tabbar_compose_wbcamera"]; 54 | BHBItem * item53 = [[BHBItem alloc]initWithTitle:@"Music" Icon:@"images.bundle/tabbar_compose_music"]; 55 | BHBItem * item54 = [[BHBItem alloc]initWithTitle:@"Blog" Icon:@"images.bundle/tabbar_compose_weibo"]; 56 | BHBItem * item55 = [[BHBItem alloc]initWithTitle:@"Collection" Icon:@"images.bundle/tabbar_compose_transfer"]; 57 | BHBItem * item56 = [[BHBItem alloc]initWithTitle:@"Voice" Icon:@"images.bundle/tabbar_compose_voice"]; 58 | item5.items = @[item51,item52,item53,item54,item55,item56]; 59 | 60 | 61 | //添加popview 62 | [BHBPopView showToView:self.view.window withItems:@[item0,item1,item2,item3,item4,item5]andSelectBlock:^(BHBItem *item) { 63 | if ([item isKindOfClass:[BHBGroup class]]) { 64 | NSLog(@"选中%@分组",item.title); 65 | }else{ 66 | NSLog(@"选中%@项",item.title); 67 | } 68 | }]; 69 | 70 | 71 | ### 4.使用参考 72 | 使用可参考LiQiankun贡献的DLTabBarController文件夹。 73 | 74 | # 缺陷: 75 | 1.按钮弹出的动画比新浪原版略显生硬。 76 | 77 | # 编写目的: 78 | ### 仅供学习和交流,没有冒犯新浪大大的意思^_^。 79 | 80 | # 灵感: 81 | ## 每次玩微博都强迫症作祟,跟个傻X一样不停的点这个,会不会有人跟我一样?😁 82 | ## 对动画优化有建议的请issue我。 83 | ## 没事跟我一样闲的蛋疼请issue我。 84 | 85 | good luck! 86 | 87 | ## Update log 88 | 89 | ### 1.1版本更新: 90 | - 优化弹出时间 91 | - 优化内存问题 92 | - 增加带层级关系的分组功能(替代原来的more方案) 93 | - 兼容iOS7真机找不到图片的问题 94 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBBottomBar.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBBottomBar.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBBottomBar.h" 10 | #import "UIImageView+BHBSetImage.h" 11 | #import "UIButton+BHBSetImage.h" 12 | #import "UIView+BHBAnimation.h" 13 | 14 | @interface BHBBottomBar () 15 | 16 | @property (nonatomic,weak) UIImageView * background; 17 | @property (nonatomic,weak) UIButton * closeBtn; 18 | @property (nonatomic,weak) UIButton * backBtn; 19 | @property (nonatomic,weak) UIButton * secondCloseBtn; 20 | 21 | @end 22 | 23 | @implementation BHBBottomBar 24 | 25 | - (instancetype)initWithFrame:(CGRect)frame 26 | { 27 | self = [super initWithFrame:frame]; 28 | if (self) { 29 | UIImageView * back = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)]; 30 | [back bhb_setImageWithResourcePath:@"images.bundle/tabbar_compose_below_background" AutoSize:NO]; 31 | [self addSubview:back]; 32 | self.background = back; 33 | 34 | UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom]; 35 | btn.frame = CGRectMake(0, 0, BHBBOTTOMHEIGHT / 2, BHBBOTTOMHEIGHT / 2); 36 | btn.center = CGPointMake(frame.size.width / 2, frame.size.height / 2); 37 | [btn bhb_setImage:@"images.bundle/tabbar_compose_background_icon_add"]; 38 | btn.userInteractionEnabled = NO; 39 | [self addSubview:btn]; 40 | [btn RevolvingWithTime:.25 andDelta:(M_PI_4)]; 41 | self.closeBtn = btn; 42 | 43 | UIButton * backbtn = [UIButton buttonWithType:UIButtonTypeCustom]; 44 | backbtn.frame = CGRectMake(0, 0, frame.size.width / 2, frame.size.height); 45 | [backbtn bhb_setImage:@"images.bundle/tabbar_compose_background_icon_return"]; 46 | [backbtn bhb_setBGImage:@"images.bundle/tabbar_compose_left_button"]; 47 | [self addSubview:backbtn]; 48 | [backbtn addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; 49 | backbtn.alpha = 0; 50 | backbtn.userInteractionEnabled = NO; 51 | self.backBtn = backbtn; 52 | 53 | UIButton * secCloseBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 54 | secCloseBtn.frame = CGRectMake(frame.size.width / 2, 0, frame.size.width / 2, frame.size.height); 55 | [secCloseBtn bhb_setImage:@"images.bundle/tabbar_compose_background_icon_close"]; 56 | [secCloseBtn bhb_setBGImage:@"images.bundle/tabbar_compose_right_button"]; 57 | [self addSubview:secCloseBtn]; 58 | [secCloseBtn addTarget:self action:@selector(close) forControlEvents:UIControlEventTouchUpInside]; 59 | secCloseBtn.alpha = 0; 60 | secCloseBtn.userInteractionEnabled = NO; 61 | self.secondCloseBtn = secCloseBtn; 62 | 63 | } 64 | return self; 65 | } 66 | 67 | - (void)close 68 | { 69 | [self fadeOutWithTime:.25]; 70 | [self btnResetPosition]; 71 | if (self.closeClick) { 72 | self.closeClick(); 73 | } 74 | } 75 | 76 | - (void)back:(UIButton *)btn{ 77 | self.isMoreBar = NO; 78 | if (self.backClick) { 79 | self.backClick(); 80 | } 81 | } 82 | 83 | - (void)setIsMoreBar:(BOOL)isMoreBar 84 | { 85 | _isMoreBar = isMoreBar; 86 | if (isMoreBar) { 87 | [UIView animateWithDuration:.25 animations:^{ 88 | self.closeBtn.alpha = 0; 89 | self.backBtn.alpha = 1; 90 | self.secondCloseBtn.alpha = 1; 91 | self.backBtn.userInteractionEnabled = YES; 92 | self.secondCloseBtn.userInteractionEnabled = YES; 93 | }]; 94 | }else{ 95 | [UIView animateWithDuration:.25 animations:^{ 96 | self.closeBtn.alpha = 1; 97 | self.backBtn.alpha = 0; 98 | self.secondCloseBtn.alpha = 0; 99 | self.backBtn.userInteractionEnabled = NO; 100 | self.secondCloseBtn.userInteractionEnabled = NO; 101 | }]; 102 | } 103 | } 104 | 105 | //恢复按钮位置 106 | - (void)btnResetPosition{ 107 | if (self.closeBtn) { 108 | [self.closeBtn RevolvingWithTime:.25 andDelta:0]; 109 | } 110 | } 111 | 112 | - (void)dealloc{ 113 | NSLog(@"BHBBottomBar"); 114 | } 115 | 116 | @end 117 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBBottomBar.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBBottomBar.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBBottomBar.h" 10 | #import "UIImageView+BHBSetImage.h" 11 | #import "UIButton+BHBSetImage.h" 12 | #import "UIView+BHBAnimation.h" 13 | 14 | @interface BHBBottomBar () 15 | 16 | @property (nonatomic,weak) UIImageView * background; 17 | @property (nonatomic,weak) UIButton * closeBtn; 18 | @property (nonatomic,weak) UIButton * backBtn; 19 | @property (nonatomic,weak) UIButton * secondCloseBtn; 20 | 21 | @end 22 | 23 | @implementation BHBBottomBar 24 | 25 | - (instancetype)initWithFrame:(CGRect)frame 26 | { 27 | self = [super initWithFrame:frame]; 28 | if (self) { 29 | UIImageView * back = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)]; 30 | [back bhb_setImageWithResourcePath:@"images.bundle/tabbar_compose_below_background" AutoSize:NO]; 31 | [self addSubview:back]; 32 | self.background = back; 33 | 34 | UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom]; 35 | btn.frame = CGRectMake(0, 0, BHBBOTTOMHEIGHT / 2, BHBBOTTOMHEIGHT / 2); 36 | btn.center = CGPointMake(frame.size.width / 2, frame.size.height / 2); 37 | [btn bhb_setImage:@"images.bundle/tabbar_compose_background_icon_add"]; 38 | btn.userInteractionEnabled = NO; 39 | [self addSubview:btn]; 40 | [btn RevolvingWithTime:.25 andDelta:(M_PI_4)]; 41 | self.closeBtn = btn; 42 | 43 | UIButton * backbtn = [UIButton buttonWithType:UIButtonTypeCustom]; 44 | backbtn.frame = CGRectMake(0, 0, frame.size.width / 2, frame.size.height); 45 | [backbtn bhb_setImage:@"images.bundle/tabbar_compose_background_icon_return"]; 46 | [backbtn bhb_setBGImage:@"images.bundle/tabbar_compose_left_button"]; 47 | [self addSubview:backbtn]; 48 | [backbtn addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside]; 49 | backbtn.alpha = 0; 50 | backbtn.userInteractionEnabled = NO; 51 | self.backBtn = backbtn; 52 | 53 | UIButton * secCloseBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 54 | secCloseBtn.frame = CGRectMake(frame.size.width / 2, 0, frame.size.width / 2, frame.size.height); 55 | [secCloseBtn bhb_setImage:@"images.bundle/tabbar_compose_background_icon_close"]; 56 | [secCloseBtn bhb_setBGImage:@"images.bundle/tabbar_compose_right_button"]; 57 | [self addSubview:secCloseBtn]; 58 | [secCloseBtn addTarget:self action:@selector(close) forControlEvents:UIControlEventTouchUpInside]; 59 | secCloseBtn.alpha = 0; 60 | secCloseBtn.userInteractionEnabled = NO; 61 | self.secondCloseBtn = secCloseBtn; 62 | 63 | } 64 | return self; 65 | } 66 | 67 | - (void)close 68 | { 69 | [self fadeOutWithTime:.25]; 70 | [self btnResetPosition]; 71 | if (self.closeClick) { 72 | self.closeClick(); 73 | } 74 | } 75 | 76 | - (void)back:(UIButton *)btn{ 77 | self.isMoreBar = NO; 78 | if (self.backClick) { 79 | self.backClick(); 80 | } 81 | } 82 | 83 | - (void)setIsMoreBar:(BOOL)isMoreBar 84 | { 85 | _isMoreBar = isMoreBar; 86 | if (isMoreBar) { 87 | [UIView animateWithDuration:.25 animations:^{ 88 | self.closeBtn.alpha = 0; 89 | self.backBtn.alpha = 1; 90 | self.secondCloseBtn.alpha = 1; 91 | self.backBtn.userInteractionEnabled = YES; 92 | self.secondCloseBtn.userInteractionEnabled = YES; 93 | }]; 94 | }else{ 95 | [UIView animateWithDuration:.25 animations:^{ 96 | self.closeBtn.alpha = 1; 97 | self.backBtn.alpha = 0; 98 | self.secondCloseBtn.alpha = 0; 99 | self.backBtn.userInteractionEnabled = NO; 100 | self.secondCloseBtn.userInteractionEnabled = NO; 101 | }]; 102 | } 103 | } 104 | 105 | //恢复按钮位置 106 | - (void)btnResetPosition{ 107 | if (self.closeBtn) { 108 | [self.closeBtn RevolvingWithTime:.25 andDelta:0]; 109 | } 110 | } 111 | 112 | - (void)dealloc{ 113 | NSLog(@"BHBBottomBar"); 114 | } 115 | 116 | @end 117 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo.xcodeproj/xcuserdata/bihongbo.xcuserdatad/xcschemes/BHBPopViewDemo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 75 | 77 | 83 | 84 | 85 | 86 | 87 | 88 | 94 | 96 | 102 | 103 | 104 | 105 | 107 | 108 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo.xcodeproj/xcuserdata/ft_david.xcuserdatad/xcschemes/DLTabBarControllerDemo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 74 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/DLTabBarController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DLTabBarController.m 3 | // DLTabBarControllerDemo 4 | // 5 | // Created by FT_David on 16/5/27. 6 | // Copyright © 2016年 FT_David. All rights reserved. 7 | // 8 | 9 | #import "DLTabBarController.h" 10 | #import "ViewController.h" 11 | #import "DLTabBar.h" 12 | #import "BHBPopView.h" 13 | @interface DLTabBarController () 14 | 15 | @end 16 | 17 | @implementation DLTabBarController 18 | 19 | - (void)viewDidLoad { 20 | [super viewDidLoad]; 21 | 22 | [self setupViewControllers]; 23 | [self setupTabbar]; 24 | 25 | } 26 | 27 | 28 | -(void)setupViewControllers 29 | { 30 | // 1.初始化子控制器 31 | ViewController *home = [[ViewController alloc] init]; 32 | [self addChildVc:home title:@"首页" image:@"tabbar_home" selectedImage:@"tabbar_home_selected"]; 33 | 34 | ViewController *messageCenter = [[ViewController alloc] init]; 35 | [self addChildVc:messageCenter title:@"消息" image:@"tabbar_message_center" selectedImage:@"tabbar_message_center_selected"]; 36 | 37 | ViewController *discover = [[ViewController alloc] init]; 38 | [self addChildVc:discover title:@"发现" image:@"tabbar_discover" selectedImage:@"tabbar_discover_selected"]; 39 | 40 | ViewController *profile = [[ViewController alloc] init]; 41 | [self addChildVc:profile title:@"我" image:@"tabbar_profile" selectedImage:@"tabbar_profile_selected"]; 42 | } 43 | 44 | -(void)setupTabbar 45 | { 46 | 47 | DLTabBar *tabBar = [[DLTabBar alloc] init]; 48 | [self setValue:tabBar forKeyPath:@"tabBar"]; 49 | } 50 | 51 | #pragma mark - DLTabBarDelegate 52 | -(void)tabBarDidClickAtCenterButton:(DLTabBar *)tabBar 53 | { 54 | 55 | BHBItem * item0 = [[BHBItem alloc]initWithTitle:@"Text" Icon:@"images.bundle/tabbar_compose_idea"]; 56 | BHBItem * item1 = [[BHBItem alloc]initWithTitle:@"Albums" Icon:@"images.bundle/tabbar_compose_photo"]; 57 | BHBItem * item2 = [[BHBItem alloc]initWithTitle:@"Camera" Icon:@"images.bundle/tabbar_compose_camera"]; 58 | //第4个按钮内部有一组 59 | BHBGroup * item3 = [[BHBGroup alloc]initWithTitle:@"Check in" Icon:@"images.bundle/tabbar_compose_lbs"]; 60 | BHBItem * item31 = [[BHBItem alloc]initWithTitle:@"Friend Circle" Icon:@"images.bundle/tabbar_compose_friend"]; 61 | BHBItem * item32 = [[BHBItem alloc]initWithTitle:@"Weibo Camera" Icon:@"images.bundle/tabbar_compose_wbcamera"]; 62 | BHBItem * item33 = [[BHBItem alloc]initWithTitle:@"Music" Icon:@"images.bundle/tabbar_compose_music"]; 63 | item3.items = @[item31,item32,item33]; 64 | 65 | BHBItem * item4 = [[BHBItem alloc]initWithTitle:@"Review" Icon:@"images.bundle/tabbar_compose_review"]; 66 | 67 | //第六个按钮内部有一组 68 | BHBGroup * item5 = [[BHBGroup alloc]initWithTitle:@"More" Icon:@"images.bundle/tabbar_compose_more"]; 69 | BHBItem * item51 = [[BHBItem alloc]initWithTitle:@"Friend Circle" Icon:@"images.bundle/tabbar_compose_friend"]; 70 | BHBItem * item52 = [[BHBItem alloc]initWithTitle:@"Weibo Camera" Icon:@"images.bundle/tabbar_compose_wbcamera"]; 71 | BHBItem * item53 = [[BHBItem alloc]initWithTitle:@"Music" Icon:@"images.bundle/tabbar_compose_music"]; 72 | BHBItem * item54 = [[BHBItem alloc]initWithTitle:@"Blog" Icon:@"images.bundle/tabbar_compose_weibo"]; 73 | BHBItem * item55 = [[BHBItem alloc]initWithTitle:@"Collection" Icon:@"images.bundle/tabbar_compose_transfer"]; 74 | BHBItem * item56 = [[BHBItem alloc]initWithTitle:@"Voice" Icon:@"images.bundle/tabbar_compose_voice"]; 75 | item5.items = @[item51,item52,item53,item54,item55,item56]; 76 | 77 | 78 | //添加popview 79 | [BHBPopView showToView:self.view.window withItems:@[item0,item1,item2,item3,item4,item5]andSelectBlock:^(BHBItem *item) { 80 | if ([item isKindOfClass:[BHBGroup class]]) { 81 | NSLog(@"选中%@分组",item.title); 82 | }else{ 83 | NSLog(@"选中%@项",item.title); 84 | } 85 | }]; 86 | 87 | } 88 | 89 | 90 | - (void)addChildVc:(UIViewController *)childVc title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage 91 | { 92 | childVc.title = title; 93 | childVc.tabBarItem.image = [UIImage imageNamed:image]; 94 | childVc.tabBarItem.selectedImage = [[UIImage imageNamed:selectedImage] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 95 | 96 | NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary]; 97 | textAttrs[NSForegroundColorAttributeName] = [UIColor colorWithRed:123/255.0 green:123/255.0 blue:123/255.0 alpha:1]; 98 | NSMutableDictionary *selectTextAttrs = [NSMutableDictionary dictionary]; 99 | selectTextAttrs[NSForegroundColorAttributeName] = [UIColor orangeColor]; 100 | [childVc.tabBarItem setTitleTextAttributes:textAttrs forState:UIControlStateNormal]; 101 | [childVc.tabBarItem setTitleTextAttributes:selectTextAttrs forState:UIControlStateSelected]; 102 | UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:childVc]; 103 | 104 | [self addChildViewController:nav]; 105 | } 106 | 107 | 108 | - (void)didReceiveMemoryWarning { 109 | [super didReceiveMemoryWarning]; 110 | 111 | } 112 | 113 | 114 | 115 | 116 | 117 | @end 118 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/UIImage+BHBEffects.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+BHBEffects.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "UIImage+BHBEffects.h" 10 | #import 11 | #import 12 | 13 | @implementation UIImage (BHBEffects) 14 | 15 | - (UIImage *)bhb_applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage 16 | { 17 | if (self.size.width < 1 || self.size.height < 1) { 18 | return nil; 19 | } 20 | if (!self.CGImage) { 21 | return nil; 22 | } 23 | if (maskImage && !maskImage.CGImage) { 24 | return nil; 25 | } 26 | 27 | CGRect imageRect = { CGPointZero, self.size }; 28 | UIImage *effectImage = self; 29 | 30 | BOOL hasBlur = blurRadius > __FLT_EPSILON__; 31 | BOOL hasSaturationChange = fabs(saturationDeltaFactor - 1.) > __FLT_EPSILON__; 32 | if (hasBlur || hasSaturationChange) { 33 | UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); 34 | CGContextRef effectInContext = UIGraphicsGetCurrentContext(); 35 | CGContextScaleCTM(effectInContext, 1.0, -1.0); 36 | CGContextTranslateCTM(effectInContext, 0, -self.size.height); 37 | CGContextDrawImage(effectInContext, imageRect, self.CGImage); 38 | 39 | vImage_Buffer effectInBuffer; 40 | 41 | 42 | effectInBuffer.data = CGBitmapContextGetData(effectInContext); 43 | effectInBuffer.width = CGBitmapContextGetWidth(effectInContext); 44 | effectInBuffer.height = CGBitmapContextGetHeight(effectInContext); 45 | effectInBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectInContext); 46 | 47 | UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); 48 | CGContextRef effectOutContext = UIGraphicsGetCurrentContext(); 49 | vImage_Buffer effectOutBuffer; 50 | effectOutBuffer.data = CGBitmapContextGetData(effectOutContext); 51 | effectOutBuffer.width = CGBitmapContextGetWidth(effectOutContext); 52 | effectOutBuffer.height = CGBitmapContextGetHeight(effectOutContext); 53 | effectOutBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectOutContext); 54 | 55 | if (hasBlur) { 56 | CGFloat inputRadius = blurRadius * [[UIScreen mainScreen] scale]; 57 | unsigned int radius = floor(inputRadius * 3. * sqrt(2 * M_PI) / 4 + 0.5); 58 | if (radius % 2 != 1) { 59 | radius += 1; 60 | } 61 | vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend); 62 | vImageBoxConvolve_ARGB8888(&effectOutBuffer, &effectInBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend); 63 | vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend); 64 | } 65 | BOOL effectImageBuffersAreSwapped = NO; 66 | if (hasSaturationChange) { 67 | CGFloat s = saturationDeltaFactor; 68 | CGFloat floatingPointSaturationMatrix[] = { 69 | 0.0722 + 0.9278 * s, 0.0722 - 0.0722 * s, 0.0722 - 0.0722 * s, 0, 70 | 0.7152 - 0.7152 * s, 0.7152 + 0.2848 * s, 0.7152 - 0.7152 * s, 0, 71 | 0.2126 - 0.2126 * s, 0.2126 - 0.2126 * s, 0.2126 + 0.7873 * s, 0, 72 | 0, 0, 0, 1, 73 | }; 74 | const int32_t divisor = 256; 75 | NSUInteger matrixSize = sizeof(floatingPointSaturationMatrix)/sizeof(floatingPointSaturationMatrix[0]); 76 | int16_t saturationMatrix[matrixSize]; 77 | for (NSUInteger i = 0; i < matrixSize; ++i) { 78 | saturationMatrix[i] = (int16_t)roundf(floatingPointSaturationMatrix[i] * divisor); 79 | } 80 | if (hasBlur) { 81 | vImageMatrixMultiply_ARGB8888(&effectOutBuffer, &effectInBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags); 82 | effectImageBuffersAreSwapped = YES; 83 | } 84 | else { 85 | vImageMatrixMultiply_ARGB8888(&effectInBuffer, &effectOutBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags); 86 | } 87 | } 88 | if (!effectImageBuffersAreSwapped) 89 | effectImage = UIGraphicsGetImageFromCurrentImageContext(); 90 | UIGraphicsEndImageContext(); 91 | 92 | if (effectImageBuffersAreSwapped) 93 | effectImage = UIGraphicsGetImageFromCurrentImageContext(); 94 | UIGraphicsEndImageContext(); 95 | } 96 | 97 | UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); 98 | CGContextRef outputContext = UIGraphicsGetCurrentContext(); 99 | CGContextScaleCTM(outputContext, 1.0, -1.0); 100 | CGContextTranslateCTM(outputContext, 0, -self.size.height); 101 | 102 | CGContextDrawImage(outputContext, imageRect, self.CGImage); 103 | 104 | if (hasBlur) { 105 | CGContextSaveGState(outputContext); 106 | if (maskImage) { 107 | CGContextClipToMask(outputContext, imageRect, maskImage.CGImage); 108 | } 109 | CGContextDrawImage(outputContext, imageRect, effectImage.CGImage); 110 | CGContextRestoreGState(outputContext); 111 | } 112 | 113 | if (tintColor) { 114 | CGContextSaveGState(outputContext); 115 | CGContextSetFillColorWithColor(outputContext, tintColor.CGColor); 116 | CGContextFillRect(outputContext, imageRect); 117 | CGContextRestoreGState(outputContext); 118 | } 119 | 120 | UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext(); 121 | UIGraphicsEndImageContext(); 122 | 123 | return outputImage; 124 | } 125 | 126 | 127 | 128 | @end 129 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/UIImage+BHBEffects.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+BHBEffects.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "UIImage+BHBEffects.h" 10 | #import 11 | #import 12 | 13 | @implementation UIImage (BHBEffects) 14 | 15 | - (UIImage *)bhb_applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage 16 | { 17 | if (self.size.width < 1 || self.size.height < 1) { 18 | return nil; 19 | } 20 | if (!self.CGImage) { 21 | return nil; 22 | } 23 | if (maskImage && !maskImage.CGImage) { 24 | return nil; 25 | } 26 | 27 | CGRect imageRect = { CGPointZero, self.size }; 28 | UIImage *effectImage = self; 29 | 30 | BOOL hasBlur = blurRadius > __FLT_EPSILON__; 31 | BOOL hasSaturationChange = fabs(saturationDeltaFactor - 1.) > __FLT_EPSILON__; 32 | if (hasBlur || hasSaturationChange) { 33 | UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); 34 | CGContextRef effectInContext = UIGraphicsGetCurrentContext(); 35 | CGContextScaleCTM(effectInContext, 1.0, -1.0); 36 | CGContextTranslateCTM(effectInContext, 0, -self.size.height); 37 | CGContextDrawImage(effectInContext, imageRect, self.CGImage); 38 | 39 | vImage_Buffer effectInBuffer; 40 | 41 | 42 | effectInBuffer.data = CGBitmapContextGetData(effectInContext); 43 | effectInBuffer.width = CGBitmapContextGetWidth(effectInContext); 44 | effectInBuffer.height = CGBitmapContextGetHeight(effectInContext); 45 | effectInBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectInContext); 46 | 47 | UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); 48 | CGContextRef effectOutContext = UIGraphicsGetCurrentContext(); 49 | vImage_Buffer effectOutBuffer; 50 | effectOutBuffer.data = CGBitmapContextGetData(effectOutContext); 51 | effectOutBuffer.width = CGBitmapContextGetWidth(effectOutContext); 52 | effectOutBuffer.height = CGBitmapContextGetHeight(effectOutContext); 53 | effectOutBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectOutContext); 54 | 55 | if (hasBlur) { 56 | CGFloat inputRadius = blurRadius * [[UIScreen mainScreen] scale]; 57 | unsigned int radius = floor(inputRadius * 3. * sqrt(2 * M_PI) / 4 + 0.5); 58 | if (radius % 2 != 1) { 59 | radius += 1; 60 | } 61 | vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend); 62 | vImageBoxConvolve_ARGB8888(&effectOutBuffer, &effectInBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend); 63 | vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend); 64 | } 65 | BOOL effectImageBuffersAreSwapped = NO; 66 | if (hasSaturationChange) { 67 | CGFloat s = saturationDeltaFactor; 68 | CGFloat floatingPointSaturationMatrix[] = { 69 | 0.0722 + 0.9278 * s, 0.0722 - 0.0722 * s, 0.0722 - 0.0722 * s, 0, 70 | 0.7152 - 0.7152 * s, 0.7152 + 0.2848 * s, 0.7152 - 0.7152 * s, 0, 71 | 0.2126 - 0.2126 * s, 0.2126 - 0.2126 * s, 0.2126 + 0.7873 * s, 0, 72 | 0, 0, 0, 1, 73 | }; 74 | const int32_t divisor = 256; 75 | NSUInteger matrixSize = sizeof(floatingPointSaturationMatrix)/sizeof(floatingPointSaturationMatrix[0]); 76 | int16_t saturationMatrix[matrixSize]; 77 | for (NSUInteger i = 0; i < matrixSize; ++i) { 78 | saturationMatrix[i] = (int16_t)roundf(floatingPointSaturationMatrix[i] * divisor); 79 | } 80 | if (hasBlur) { 81 | vImageMatrixMultiply_ARGB8888(&effectOutBuffer, &effectInBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags); 82 | effectImageBuffersAreSwapped = YES; 83 | } 84 | else { 85 | vImageMatrixMultiply_ARGB8888(&effectInBuffer, &effectOutBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags); 86 | } 87 | } 88 | if (!effectImageBuffersAreSwapped) 89 | effectImage = UIGraphicsGetImageFromCurrentImageContext(); 90 | UIGraphicsEndImageContext(); 91 | 92 | if (effectImageBuffersAreSwapped) 93 | effectImage = UIGraphicsGetImageFromCurrentImageContext(); 94 | UIGraphicsEndImageContext(); 95 | } 96 | 97 | UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); 98 | CGContextRef outputContext = UIGraphicsGetCurrentContext(); 99 | CGContextScaleCTM(outputContext, 1.0, -1.0); 100 | CGContextTranslateCTM(outputContext, 0, -self.size.height); 101 | 102 | CGContextDrawImage(outputContext, imageRect, self.CGImage); 103 | 104 | if (hasBlur) { 105 | CGContextSaveGState(outputContext); 106 | if (maskImage) { 107 | CGContextClipToMask(outputContext, imageRect, maskImage.CGImage); 108 | } 109 | CGContextDrawImage(outputContext, imageRect, effectImage.CGImage); 110 | CGContextRestoreGState(outputContext); 111 | } 112 | 113 | if (tintColor) { 114 | CGContextSaveGState(outputContext); 115 | CGContextSetFillColorWithColor(outputContext, tintColor.CGColor); 116 | CGContextFillRect(outputContext, imageRect); 117 | CGContextRestoreGState(outputContext); 118 | } 119 | 120 | UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext(); 121 | UIGraphicsEndImageContext(); 122 | 123 | return outputImage; 124 | } 125 | 126 | 127 | 128 | @end 129 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBPopView.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBPopView.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/14. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBPopView.h" 10 | #import "UIImage+BHBEffects.h" 11 | #import "UIView+BHBAnimation.h" 12 | #import "UIImageView+BHBSetImage.h" 13 | #import "BHBPlaySoundTool.h" 14 | #import "BHBBottomBar.h" 15 | #import "BHBCustomBtn.h" 16 | #import "UIButton+BHBSetImage.h" 17 | #import "BHBCenterView.h" 18 | 19 | 20 | @interface BHBPopView () 21 | 22 | @property (nonatomic,weak) UIImageView * background; 23 | @property (nonatomic,weak) UIImageView * logo; 24 | @property (nonatomic,weak) BHBBottomBar * bottomBar; 25 | @property (nonatomic,weak) BHBCenterView * centerView; 26 | 27 | @property (nonatomic,strong) NSArray * items; 28 | @property (nonatomic,copy) DidSelectItemBlock selectBlock; 29 | 30 | 31 | @end 32 | 33 | @implementation BHBPopView 34 | 35 | - (instancetype)initWithFrame:(CGRect)frame 36 | { 37 | self = [super initWithFrame:frame]; 38 | if (self) { 39 | UIImageView * iv = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)]; 40 | [self addSubview:iv]; 41 | self.background = iv; 42 | UIImageView * logo = [[UIImageView alloc]init]; 43 | [logo bhb_setImageWithResourcePath:@"images.bundle/compose_slogan" AutoSize:YES]; 44 | logo.center = CGPointMake(frame.size.width / 2, frame.size.height * 0.2); 45 | [self addSubview:logo]; 46 | self.logo = logo; 47 | BHBBottomBar * bar = [[BHBBottomBar alloc]initWithFrame:CGRectMake(0, frame.size.height - BHBBOTTOMHEIGHT, frame.size.width, BHBBOTTOMHEIGHT)]; 48 | __weak typeof(self) weakSelf = self; 49 | bar.backClick = ^{ 50 | [weakSelf.centerView scrollBack]; 51 | }; 52 | bar.closeClick = ^{ 53 | [[BHBPlaySoundTool sharedPlaySoundTool] playWithSoundName:@"close"]; 54 | [weakSelf hideItems]; 55 | [weakSelf hide]; 56 | }; 57 | [self addSubview:bar]; 58 | self.bottomBar = bar; 59 | BHBCenterView * centerView = [[BHBCenterView alloc]initWithFrame:CGRectMake(0, self.frame.size.height * 0.37, self.frame.size.width, self.frame.size.height * 0.4)]; 60 | [self addSubview:centerView]; 61 | centerView.delegate = self; 62 | centerView.dataSource = self; 63 | centerView.clipsToBounds = NO; 64 | self.centerView = centerView; 65 | 66 | } 67 | return self; 68 | } 69 | 70 | - (void)removeitemsComplete{ 71 | self.superview.userInteractionEnabled = YES; 72 | } 73 | 74 | 75 | - (void)showItems{ 76 | [self.centerView reloadData]; 77 | } 78 | 79 | - (void)hideItems{ 80 | [self.centerView dismis]; 81 | } 82 | 83 | 84 | + (BHB_INSTANCETYPE)showToView:(UIView *)view withItems:(NSArray *)array andSelectBlock:(DidSelectItemBlock)block{ 85 | [[BHBPlaySoundTool sharedPlaySoundTool] playWithSoundName:@"open"]; 86 | [self viewNotEmpty:view]; 87 | BHBPopView * popView = [[BHBPopView alloc]initWithFrame:view.bounds]; 88 | popView.background.image = [self imageWithView:view]; 89 | [view addSubview:popView]; 90 | popView.selectBlock = block; 91 | [popView fadeInWithTime:0.25]; 92 | popView.items = array; 93 | [popView showItems]; 94 | return popView; 95 | } 96 | 97 | + (BHB_INSTANCETYPE)showToView:(UIView *)view andImages:(NSArray *)imageArray andTitles:(NSArray *)titles andSelectBlock:(DidSelectItemBlock)block{ 98 | NSUInteger count = imageArray.count; 99 | NSMutableArray * items = [NSMutableArray array]; 100 | for (int i = 0; i < count; i++) { 101 | BHBItem * item = [[BHBItem alloc]initWithTitle:titles[i] Icon:imageArray[i]]; 102 | [items addObject:item]; 103 | } 104 | return [self showToView:view withItems:items andSelectBlock:block]; 105 | } 106 | 107 | + (UIImage *)imageWithView:(UIView *)view{ 108 | UIGraphicsBeginImageContextWithOptions(CGSizeMake(view.frame.size.width, view.frame.size.height), NO, [[UIScreen mainScreen] scale]); 109 | [view.layer renderInContext:UIGraphicsGetCurrentContext()]; 110 | UIImage * image = UIGraphicsGetImageFromCurrentImageContext(); 111 | UIColor *tintColor = [UIColor colorWithWhite:0.95 alpha:0.78]; 112 | image = [image bhb_applyBlurWithRadius:15 tintColor:tintColor saturationDeltaFactor:1 maskImage:nil]; 113 | UIGraphicsEndImageContext(); 114 | 115 | return image; 116 | } 117 | 118 | + (void)viewNotEmpty:(UIView *)view{ 119 | if (view == nil) { 120 | view = (UIView *)[[UIApplication sharedApplication] delegate]; 121 | } 122 | 123 | } 124 | 125 | + (void)hideFromView:(UIView *)view{ 126 | [self viewNotEmpty:view]; 127 | [view.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 128 | UIView * subV = (UIView *)obj; 129 | [subV isKindOfClass:[self class]]; 130 | [BHBPopView hideWithView:subV]; 131 | }]; 132 | } 133 | 134 | - (void)hide{ 135 | [BHBPopView hideWithView:self]; 136 | } 137 | 138 | + (void)hideWithView:(UIView *)view{ 139 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.35 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 140 | [view fadeOutWithTime:0.35]; 141 | }); 142 | } 143 | 144 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 145 | { 146 | [[BHBPlaySoundTool sharedPlaySoundTool] playWithSoundName:@"close"]; 147 | [self.bottomBar btnResetPosition]; 148 | [self.bottomBar fadeOutWithTime:.25]; 149 | [self hideItems]; 150 | [self hide]; 151 | } 152 | 153 | #pragma mark centerview delegate and datasource 154 | - (NSInteger)numberOfItemsWithCenterView:(BHBCenterView *)centerView 155 | { 156 | return self.items.count; 157 | } 158 | 159 | -(BHBItem *)itemWithCenterView:(BHBCenterView *)centerView item:(NSInteger)item 160 | { 161 | return self.items[item]; 162 | } 163 | 164 | -(void)didSelectItemWithCenterView:(BHBCenterView *)centerView andItem:(BHBItem *)item 165 | { 166 | if (self.selectBlock) { 167 | self.selectBlock(item); 168 | } 169 | [[BHBPlaySoundTool sharedPlaySoundTool] playWithSoundName:@"open"]; 170 | [self hide]; 171 | } 172 | 173 | - (void)didSelectMoreWithCenterView:(BHBCenterView *)centerView andItem:(BHBGroup *)group 174 | { 175 | if (self.selectBlock) { 176 | self.selectBlock(group); 177 | } 178 | [[BHBPlaySoundTool sharedPlaySoundTool] playWithSoundName:@"open"]; 179 | self.bottomBar.isMoreBar = YES; 180 | } 181 | 182 | - (void)dealloc{ 183 | NSLog(@"BHBPopView"); 184 | } 185 | 186 | @end 187 | -------------------------------------------------------------------------------- /DLTabBarController/DLTabBarControllerDemo/DLTabBarControllerDemo/Lib/BHBPopView/BHBPopView.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBPopView.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/14. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBPopView.h" 10 | #import "UIImage+BHBEffects.h" 11 | #import "UIView+BHBAnimation.h" 12 | #import "UIImageView+BHBSetImage.h" 13 | #import "BHBPlaySoundTool.h" 14 | #import "BHBBottomBar.h" 15 | #import "BHBCustomBtn.h" 16 | #import "UIButton+BHBSetImage.h" 17 | #import "BHBCenterView.h" 18 | 19 | 20 | @interface BHBPopView () 21 | 22 | @property (nonatomic,weak) UIImageView * background; 23 | @property (nonatomic,weak) UIImageView * logo; 24 | @property (nonatomic,weak) BHBBottomBar * bottomBar; 25 | @property (nonatomic,weak) BHBCenterView * centerView; 26 | 27 | @property (nonatomic,strong) NSArray * items; 28 | @property (nonatomic,copy) DidSelectItemBlock selectBlock; 29 | 30 | 31 | @end 32 | 33 | @implementation BHBPopView 34 | 35 | - (instancetype)initWithFrame:(CGRect)frame 36 | { 37 | self = [super initWithFrame:frame]; 38 | if (self) { 39 | UIImageView * iv = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)]; 40 | [self addSubview:iv]; 41 | self.background = iv; 42 | UIImageView * logo = [[UIImageView alloc]init]; 43 | [logo bhb_setImageWithResourcePath:@"images.bundle/compose_slogan" AutoSize:YES]; 44 | logo.center = CGPointMake(frame.size.width / 2, frame.size.height * 0.2); 45 | [self addSubview:logo]; 46 | self.logo = logo; 47 | BHBBottomBar * bar = [[BHBBottomBar alloc]initWithFrame:CGRectMake(0, frame.size.height - BHBBOTTOMHEIGHT, frame.size.width, BHBBOTTOMHEIGHT)]; 48 | __weak typeof(self) weakSelf = self; 49 | bar.backClick = ^{ 50 | [weakSelf.centerView scrollBack]; 51 | }; 52 | bar.closeClick = ^{ 53 | [[BHBPlaySoundTool sharedPlaySoundTool] playWithSoundName:@"close"]; 54 | [weakSelf hideItems]; 55 | [weakSelf hide]; 56 | }; 57 | [self addSubview:bar]; 58 | self.bottomBar = bar; 59 | BHBCenterView * centerView = [[BHBCenterView alloc]initWithFrame:CGRectMake(0, self.frame.size.height * 0.37, self.frame.size.width, self.frame.size.height * 0.4)]; 60 | [self addSubview:centerView]; 61 | centerView.delegate = self; 62 | centerView.dataSource = self; 63 | centerView.clipsToBounds = NO; 64 | self.centerView = centerView; 65 | 66 | } 67 | return self; 68 | } 69 | 70 | - (void)removeitemsComplete{ 71 | self.superview.userInteractionEnabled = YES; 72 | } 73 | 74 | 75 | - (void)showItems{ 76 | [self.centerView reloadData]; 77 | } 78 | 79 | - (void)hideItems{ 80 | [self.centerView dismis]; 81 | } 82 | 83 | 84 | + (BHB_INSTANCETYPE)showToView:(UIView *)view withItems:(NSArray *)array andSelectBlock:(DidSelectItemBlock)block{ 85 | [[BHBPlaySoundTool sharedPlaySoundTool] playWithSoundName:@"open"]; 86 | [self viewNotEmpty:view]; 87 | BHBPopView * popView = [[BHBPopView alloc]initWithFrame:view.bounds]; 88 | popView.background.image = [self imageWithView:view]; 89 | [view addSubview:popView]; 90 | popView.selectBlock = block; 91 | [popView fadeInWithTime:0.25]; 92 | popView.items = array; 93 | [popView showItems]; 94 | return popView; 95 | } 96 | 97 | + (BHB_INSTANCETYPE)showToView:(UIView *)view andImages:(NSArray *)imageArray andTitles:(NSArray *)titles andSelectBlock:(DidSelectItemBlock)block{ 98 | NSUInteger count = imageArray.count; 99 | NSMutableArray * items = [NSMutableArray array]; 100 | for (int i = 0; i < count; i++) { 101 | BHBItem * item = [[BHBItem alloc]initWithTitle:titles[i] Icon:imageArray[i]]; 102 | [items addObject:item]; 103 | } 104 | return [self showToView:view withItems:items andSelectBlock:block]; 105 | } 106 | 107 | + (UIImage *)imageWithView:(UIView *)view{ 108 | UIGraphicsBeginImageContextWithOptions(CGSizeMake(view.frame.size.width, view.frame.size.height), NO, [[UIScreen mainScreen] scale]); 109 | [view.layer renderInContext:UIGraphicsGetCurrentContext()]; 110 | UIImage * image = UIGraphicsGetImageFromCurrentImageContext(); 111 | UIColor *tintColor = [UIColor colorWithWhite:0.95 alpha:0.78]; 112 | image = [image bhb_applyBlurWithRadius:15 tintColor:tintColor saturationDeltaFactor:1 maskImage:nil]; 113 | UIGraphicsEndImageContext(); 114 | 115 | return image; 116 | } 117 | 118 | + (void)viewNotEmpty:(UIView *)view{ 119 | if (view == nil) { 120 | view = (UIView *)[[UIApplication sharedApplication] delegate]; 121 | } 122 | 123 | } 124 | 125 | + (void)hideFromView:(UIView *)view{ 126 | [self viewNotEmpty:view]; 127 | [view.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 128 | UIView * subV = (UIView *)obj; 129 | [subV isKindOfClass:[self class]]; 130 | [BHBPopView hideWithView:subV]; 131 | }]; 132 | } 133 | 134 | - (void)hide{ 135 | [BHBPopView hideWithView:self]; 136 | } 137 | 138 | + (void)hideWithView:(UIView *)view{ 139 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.35 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 140 | [view fadeOutWithTime:0.35]; 141 | }); 142 | } 143 | 144 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 145 | { 146 | [[BHBPlaySoundTool sharedPlaySoundTool] playWithSoundName:@"close"]; 147 | [self.bottomBar btnResetPosition]; 148 | [self.bottomBar fadeOutWithTime:.25]; 149 | [self hideItems]; 150 | [self hide]; 151 | } 152 | 153 | #pragma mark centerview delegate and datasource 154 | - (NSInteger)numberOfItemsWithCenterView:(BHBCenterView *)centerView 155 | { 156 | return self.items.count; 157 | } 158 | 159 | -(BHBItem *)itemWithCenterView:(BHBCenterView *)centerView item:(NSInteger)item 160 | { 161 | return self.items[item]; 162 | } 163 | 164 | -(void)didSelectItemWithCenterView:(BHBCenterView *)centerView andItem:(BHBItem *)item 165 | { 166 | if (self.selectBlock) { 167 | self.selectBlock(item); 168 | } 169 | [[BHBPlaySoundTool sharedPlaySoundTool] playWithSoundName:@"open"]; 170 | [self hide]; 171 | } 172 | 173 | - (void)didSelectMoreWithCenterView:(BHBCenterView *)centerView andItem:(BHBGroup *)group 174 | { 175 | if (self.selectBlock) { 176 | self.selectBlock(group); 177 | } 178 | [[BHBPlaySoundTool sharedPlaySoundTool] playWithSoundName:@"open"]; 179 | self.bottomBar.isMoreBar = YES; 180 | } 181 | 182 | - (void)dealloc{ 183 | NSLog(@"BHBPopView"); 184 | } 185 | 186 | @end 187 | -------------------------------------------------------------------------------- /BHBPopViewDemo/BHBPopViewDemo/BHBPopView/BHBCenterView.m: -------------------------------------------------------------------------------- 1 | // 2 | // BHBCenterView.m 3 | // BHBPopViewDemo 4 | // 5 | // Created by 毕洪博 on 15/8/15. 6 | // Copyright (c) 2015年 毕洪博. All rights reserved. 7 | // 8 | 9 | #import "BHBCenterView.h" 10 | #import "BHBCustomBtn.h" 11 | #import "UIButton+BHBSetImage.h" 12 | #import "BHBItem.h" 13 | #import "UIView+BHBAnimation.h" 14 | #import "BHBGroup.h" 15 | 16 | @interface BHBCenterView () 17 | 18 | @property (nonatomic,strong) NSMutableArray * visableBtnArray; 19 | @property (nonatomic,strong) NSMutableArray * homeBtns; 20 | @property (nonatomic,strong) NSMutableArray * moreBtns; 21 | @property (nonatomic,strong) BHBGroup * currentGroup; 22 | @property (nonatomic,assign) BOOL btnCanceled; 23 | 24 | @end 25 | 26 | @implementation BHBCenterView 27 | @dynamic delegate; 28 | 29 | -(NSMutableArray *)homeBtns 30 | { 31 | if (!_homeBtns) { 32 | _homeBtns = [NSMutableArray array]; 33 | } 34 | return _homeBtns; 35 | } 36 | 37 | -(NSMutableArray *)visableBtnArray 38 | { 39 | if (!_visableBtnArray) { 40 | _visableBtnArray = [NSMutableArray array]; 41 | } 42 | return _visableBtnArray; 43 | } 44 | 45 | - (NSMutableArray *)moreBtns{ 46 | if (!_moreBtns) { 47 | _moreBtns = [[NSMutableArray alloc] init]; 48 | } 49 | return _moreBtns; 50 | } 51 | 52 | - (void)reloadData{ 53 | // NSAssert(self.delegate, @"BHBCenterView`s delegate was nil."); 54 | NSAssert(self.dataSource, @"BHBCenterView`s dataSource was nil."); 55 | NSAssert([self.dataSource respondsToSelector:@selector(numberOfItemsWithCenterView:)], @"BHBCenterView`s was unimplementation numberOfItemsWithCenterView:."); 56 | NSAssert([self.dataSource respondsToSelector:@selector(itemWithCenterView:item:)], @"BHBCenterView`s was unimplementation itemWithCenterView:item:."); 57 | [self.homeBtns makeObjectsPerformSelector:@selector(removeFromSuperview)]; 58 | [self.moreBtns makeObjectsPerformSelector:@selector(removeFromSuperlayer)]; 59 | [self.homeBtns removeAllObjects]; 60 | [self.moreBtns removeAllObjects]; 61 | NSUInteger count = [self.dataSource numberOfItemsWithCenterView:self]; 62 | NSMutableArray * items = [NSMutableArray array]; 63 | for (int i = 0; i < count; i ++) { 64 | [items addObject:[self.dataSource itemWithCenterView:self item:i]]; 65 | } 66 | [self layoutBtnsWith:items isMore:NO]; 67 | [self btnPositonAnimation:NO]; 68 | } 69 | 70 | - (void)layoutBtnsWith:(NSArray *)items isMore:(BOOL)isMore{ 71 | if(isMore){ 72 | [self.moreBtns makeObjectsPerformSelector:@selector(removeFromSuperview)]; 73 | [self.moreBtns removeAllObjects]; 74 | } 75 | BHBItem * item; 76 | for (int i = 0; i < items.count; i ++) { 77 | item = items[i]; 78 | BHBCustomBtn * btn = [BHBCustomBtn buttonWithType:UIButtonTypeCustom]; 79 | [btn bhb_setImage:[NSString stringWithFormat:@"%@",item.icon]]; 80 | [btn.imageView setContentMode:UIViewContentModeCenter]; 81 | [btn setTitle:item.title forState:UIControlStateNormal]; 82 | btn.titleLabel.textAlignment = NSTextAlignmentCenter; 83 | [btn setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal]; 84 | btn.titleLabel.font = [UIFont systemFontOfSize:14]; 85 | CGFloat x = (i % 3) * self.frame.size.width / 3.0; 86 | CGFloat y = (i / 3) * self.frame.size.height / 2.0; 87 | if (isMore) { 88 | x += [UIScreen mainScreen].bounds.size.width; 89 | [self.moreBtns addObject:btn]; 90 | } 91 | else { 92 | [self.homeBtns addObject:btn]; 93 | } 94 | CGFloat width = self.frame.size.width / 3.0; 95 | CGFloat height = self.frame.size.height / 2; 96 | [btn addTarget:self action:@selector(didClickBtn:) forControlEvents:UIControlEventTouchUpInside]; 97 | [btn addTarget:self action:@selector(didTouchBtn:) forControlEvents:UIControlEventTouchDown]; 98 | [btn addTarget:self action:@selector(didCancelBtn:) forControlEvents:UIControlEventTouchDragInside]; 99 | [self addSubview:btn]; 100 | btn.frame = CGRectMake(x, y, width, height); 101 | } 102 | } 103 | 104 | - (void)didTouchBtn:(BHBCustomBtn *)btn{ 105 | [btn scalingWithTime:.15 andscal:1.2]; 106 | } 107 | 108 | - (void)didCancelBtn:(BHBCustomBtn *)btn{ 109 | self.btnCanceled = YES; 110 | [btn scalingWithTime:.15 andscal:1]; 111 | } 112 | 113 | - (void)scrollBack{ 114 | [self.visableBtnArray removeAllObjects]; 115 | [self.homeBtns enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 116 | [self.visableBtnArray addObject:obj]; 117 | }]; 118 | [self setContentOffset:CGPointMake(0, 0) animated:YES]; 119 | } 120 | 121 | - (void)didClickBtn:(BHBCustomBtn *)btn{ 122 | if (self.btnCanceled) { 123 | self.btnCanceled = NO; 124 | return; 125 | } 126 | 127 | BHBItem * item; 128 | NSInteger index; 129 | if([self.homeBtns containsObject:btn]){ 130 | index = [self.homeBtns indexOfObject:btn]; 131 | item = [self.dataSource itemWithCenterView:self item:index]; 132 | } 133 | if ([self.moreBtns containsObject:btn]) { 134 | index = [self.moreBtns indexOfObject:btn]; 135 | item = [self.currentGroup.items objectAtIndex:index]; 136 | } 137 | [btn scalingWithTime:.25 andscal:1]; 138 | if([item isKindOfClass:[BHBGroup class]]){ 139 | BHBGroup * group = (BHBGroup *)item; 140 | self.currentGroup = group; 141 | if (!self.delegate || ![self.delegate respondsToSelector:@selector(didSelectMoreWithCenterView:andItem:)]) { 142 | return; 143 | } 144 | [self layoutBtnsWith:group.items isMore:YES]; 145 | [self.visableBtnArray removeAllObjects]; 146 | [self.moreBtns enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 147 | [self.visableBtnArray addObject:obj]; 148 | }]; 149 | [self setContentOffset:CGPointMake(self.frame.size.width, 0) animated:YES]; 150 | [self.delegate didSelectMoreWithCenterView:self andItem:group]; 151 | return; 152 | } 153 | else{ 154 | [btn scalingWithTime:.25 andscal:1.7]; 155 | [btn fadeOutWithTime:.25]; 156 | [self.visableBtnArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 157 | BHBCustomBtn * b = obj; 158 | if (b != btn) { 159 | [b scalingWithTime:.25 andscal:0.3]; 160 | [b fadeOutWithTime:.25]; 161 | } 162 | }]; 163 | if (!self.delegate || ![self.delegate respondsToSelector:@selector(didSelectItemWithCenterView:andItem:)]) { 164 | return; 165 | } 166 | [self.delegate didSelectItemWithCenterView:self andItem:item]; 167 | } 168 | } 169 | 170 | 171 | - (void)dismis{ 172 | [self btnPositonAnimation:YES]; 173 | } 174 | 175 | - (void)removeAnimation{ 176 | [self.visableBtnArray enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 177 | BHBCustomBtn * btn = obj; 178 | CGFloat x = btn.frame.origin.x; 179 | CGFloat y = btn.frame.origin.y; 180 | CGFloat width = btn.frame.size.width; 181 | CGFloat height = btn.frame.size.height; 182 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)((self.visableBtnArray.count - idx) * 0.03 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 183 | [UIView animateWithDuration:.5 delay:0 usingSpringWithDamping:0.9 initialSpringVelocity:5 options:0 animations:^{ 184 | btn.alpha = 0; 185 | btn.frame = CGRectMake(x, [UIScreen mainScreen].bounds.size.height - self.frame.origin.y + y, width, height); 186 | } completion:^(BOOL finished) { 187 | if ([btn isEqual:[self.visableBtnArray firstObject]]) { 188 | self.superview.superview.userInteractionEnabled = YES; 189 | } 190 | }]; 191 | }); 192 | 193 | }]; 194 | 195 | } 196 | 197 | - (void)moveInAnimation{ 198 | 199 | [self.visableBtnArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 200 | BHBCustomBtn * btn = obj; 201 | CGFloat x = btn.frame.origin.x; 202 | CGFloat y = btn.frame.origin.y; 203 | CGFloat width = btn.frame.size.width; 204 | CGFloat height = btn.frame.size.height; 205 | btn.frame = CGRectMake(x, [UIScreen mainScreen].bounds.size.height + y - self.frame.origin.y, width, height); 206 | btn.alpha = 0.0; 207 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(idx * 0.03 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 208 | [UIView animateWithDuration:0.25 delay:0 usingSpringWithDamping:0.75 initialSpringVelocity:25 options:UIViewAnimationOptionCurveEaseIn animations:^{ 209 | btn.alpha = 1; 210 | btn.frame = CGRectMake(x, y, width, height); 211 | } completion:^(BOOL finished) { 212 | if ([btn isEqual:[self.visableBtnArray lastObject]]) { 213 | self.superview.superview.userInteractionEnabled = YES; 214 | } 215 | }]; 216 | }); 217 | 218 | }]; 219 | } 220 | 221 | - (void)btnPositonAnimation:(BOOL)isDismis{ 222 | if (self.visableBtnArray.count <= 0) { 223 | [self.homeBtns enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 224 | [self.visableBtnArray addObject:obj]; 225 | }]; 226 | } 227 | self.superview.superview.userInteractionEnabled = NO; 228 | if (isDismis) { 229 | [self removeAnimation]; 230 | }else{ 231 | [self moveInAnimation]; 232 | } 233 | 234 | } 235 | 236 | - (void)dealloc{ 237 | NSLog(@"BHBCenterView"); 238 | } 239 | 240 | @end 241 | --------------------------------------------------------------------------------