Repository: Bonway/BBGestureBack Branch: master Commit: ce4364bc34d0 Files: 109 Total size: 192.8 KB Directory structure: gitextract_fgu9pioj/ ├── BBGestureBack.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata/ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata/ │ │ ├── Bonway.xcuserdatad/ │ │ │ └── UserInterfaceState.xcuserstate │ │ └── user.xcuserdatad/ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata/ │ ├── Bonway.xcuserdatad/ │ │ ├── xcdebugger/ │ │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes/ │ │ ├── BBGestureBack_Full_oc.xcscheme │ │ ├── BBGestureBack_Full_swift.xcscheme │ │ ├── BBGestureBack_SysFull_oc.xcscheme │ │ └── xcschememanagement.plist │ └── user.xcuserdatad/ │ ├── xcdebugger/ │ │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes/ │ └── xcschememanagement.plist ├── BBGestureBack_Full_oc/ │ ├── Assets.xcassets/ │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── Navigation/ │ │ │ ├── Contents.json │ │ │ └── bb_navigation_back.imageset/ │ │ │ └── Contents.json │ │ ├── TabBar/ │ │ │ ├── Contents.json │ │ │ ├── TabBarHomeNormal.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── TabBarHomeSelected.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── TabBarUserNormal.imageset/ │ │ │ │ └── Contents.json │ │ │ └── TabBarUserSelected.imageset/ │ │ │ └── Contents.json │ │ └── logo.imageset/ │ │ └── Contents.json │ ├── Base.lproj/ │ │ └── LaunchScreen.storyboard │ ├── Classes/ │ │ ├── Home/ │ │ │ ├── Index/ │ │ │ │ ├── HomeViewController.h │ │ │ │ └── HomeViewController.m │ │ │ ├── ViewController.h │ │ │ └── ViewController.m │ │ ├── Main/ │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── BBGestureBack/ │ │ │ │ ├── BBGestureBack.h │ │ │ │ ├── BBGestureBackConst.h │ │ │ │ ├── BBGestureBackConst.m │ │ │ │ ├── BBGestureBaseController.h │ │ │ │ └── BBGestureBaseController.m │ │ │ ├── BBNavigation/ │ │ │ │ ├── BBNavigationController.h │ │ │ │ └── BBNavigationController.m │ │ │ ├── BBTabBar/ │ │ │ │ ├── BBTabBarController.h │ │ │ │ └── BBTabBarController.m │ │ │ └── BBUserGuider/ │ │ │ ├── BBUserGuiderController.h │ │ │ └── BBUserGuiderController.m │ │ ├── Resource/ │ │ │ └── BBUserGuider.bundle/ │ │ │ ├── Root.plist │ │ │ └── en.lproj/ │ │ │ └── Root.strings │ │ └── User/ │ │ └── Index/ │ │ ├── UserViewController.h │ │ └── UserViewController.m │ ├── Info.plist │ └── main.m ├── BBGestureBack_Full_swift/ │ ├── Assets.xcassets/ │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── Navigation/ │ │ │ ├── Contents.json │ │ │ └── bb_navigation_back.imageset/ │ │ │ └── Contents.json │ │ ├── TabBar/ │ │ │ ├── Contents.json │ │ │ ├── TabBarHomeNormal.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── TabBarHomeSelected.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── TabBarUserNormal.imageset/ │ │ │ │ └── Contents.json │ │ │ └── TabBarUserSelected.imageset/ │ │ │ └── Contents.json │ │ └── logo.imageset/ │ │ └── Contents.json │ ├── Base.lproj/ │ │ └── LaunchScreen.storyboard │ ├── Classes/ │ │ ├── Home/ │ │ │ ├── Index/ │ │ │ │ └── HomeViewController.swift │ │ │ └── ViewController.swift │ │ ├── Main/ │ │ │ ├── AppDelegate.swift │ │ │ ├── BBGestureBack/ │ │ │ │ ├── BBGestureBackConst.swift │ │ │ │ └── BBGestureBaseController.swift │ │ │ ├── BBNavigation/ │ │ │ │ └── BBNavigationController.swift │ │ │ ├── BBTabBar/ │ │ │ │ └── BBTabBarController.swift │ │ │ └── BBUserGuider/ │ │ │ └── BBUserGuiderController.swift │ │ ├── Resource/ │ │ │ └── BBUserGuider.bundle/ │ │ │ ├── Root.plist │ │ │ └── en.lproj/ │ │ │ └── Root.strings │ │ └── User/ │ │ └── Index/ │ │ └── UserViewController.swift │ └── Info.plist ├── BBGestureBack_SysFull_oc/ │ ├── Assets.xcassets/ │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── TabBar/ │ │ │ ├── Contents.json │ │ │ ├── TabBarHomeNormal.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── TabBarHomeSelected.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── TabBarUserNormal.imageset/ │ │ │ │ └── Contents.json │ │ │ └── TabBarUserSelected.imageset/ │ │ │ └── Contents.json │ │ └── logo.imageset/ │ │ └── Contents.json │ ├── Base.lproj/ │ │ └── LaunchScreen.storyboard │ ├── Classes/ │ │ ├── Home/ │ │ │ ├── Index/ │ │ │ │ ├── HomeViewController.h │ │ │ │ └── HomeViewController.m │ │ │ ├── ViewController.h │ │ │ └── ViewController.m │ │ ├── Main/ │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── BBNavigation/ │ │ │ │ ├── BBNavigationController.h │ │ │ │ └── BBNavigationController.m │ │ │ └── BBTabBar/ │ │ │ ├── BBTabBarController.h │ │ │ └── BBTabBarController.m │ │ └── User/ │ │ └── Index/ │ │ ├── UserViewController.h │ │ └── UserViewController.m │ ├── Info.plist │ └── main.m ├── BBGestureBack_SysFull_swift/ │ ├── Assets.xcassets/ │ │ ├── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── TabBar/ │ │ │ ├── Contents.json │ │ │ ├── TabBarHomeNormal.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── TabBarHomeSelected.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── TabBarUserNormal.imageset/ │ │ │ │ └── Contents.json │ │ │ └── TabBarUserSelected.imageset/ │ │ │ └── Contents.json │ │ └── logo.imageset/ │ │ └── Contents.json │ ├── Base.lproj/ │ │ └── LaunchScreen.storyboard │ ├── Classes/ │ │ ├── Home/ │ │ │ ├── Index/ │ │ │ │ └── HomeViewController.swift │ │ │ └── ViewController.swift │ │ ├── Main/ │ │ │ ├── AppDelegate.swift │ │ │ ├── BBNavigation/ │ │ │ │ └── BBNavigationController.swift │ │ │ └── BBTabBar/ │ │ │ └── BBTabBarController.swift │ │ └── User/ │ │ └── Index/ │ │ └── UserViewController.swift │ └── Info.plist └── README.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: BBGestureBack.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 48; objects = { /* Begin PBXBuildFile section */ CEC3BBC8206354CE0003CF06 /* BBGestureBackConst.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC3BBC7206354CE0003CF06 /* BBGestureBackConst.m */; }; CEDECB9C205CC3CD00C08340 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CEDECB9B205CC3CD00C08340 /* Assets.xcassets */; }; CEDECB9F205CC3CD00C08340 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CEDECB9D205CC3CD00C08340 /* LaunchScreen.storyboard */; }; CEDECBA2205CC3CD00C08340 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDECBA1205CC3CD00C08340 /* main.m */; }; CEDECBCD205CC54D00C08340 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDECBC7205CC54D00C08340 /* ViewController.m */; }; CEDECBCE205CC54D00C08340 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDECBCA205CC54D00C08340 /* AppDelegate.m */; }; CEDECBD2205CC76800C08340 /* BBTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDECBD1205CC76800C08340 /* BBTabBarController.m */; }; CEDECBD7205CC82800C08340 /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDECBD6205CC82800C08340 /* HomeViewController.m */; }; CEDECBDB205CC8BC00C08340 /* BBNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDECBDA205CC8BC00C08340 /* BBNavigationController.m */; }; CEDECBE0205CC94100C08340 /* UserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDECBDF205CC94100C08340 /* UserViewController.m */; }; CEDECBE3205CCA4100C08340 /* BBGestureBaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDECBE2205CCA4100C08340 /* BBGestureBaseController.m */; }; CF395E1420BD496B00434CC7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CF395E1320BD496B00434CC7 /* Assets.xcassets */; }; CF395E1720BD496B00434CC7 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CF395E1520BD496B00434CC7 /* LaunchScreen.storyboard */; }; CF395E2720BD4BD300434CC7 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF395E1F20BD4BD300434CC7 /* ViewController.swift */; }; CF395E2820BD4BD300434CC7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF395E2420BD4BD300434CC7 /* AppDelegate.swift */; }; CF395E2A20BD4C5800434CC7 /* BBTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF395E2920BD4C5800434CC7 /* BBTabBarController.swift */; }; CF395E2C20BD4DC400434CC7 /* BBNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF395E2B20BD4DC400434CC7 /* BBNavigationController.swift */; }; CF395E2E20BD4DE300434CC7 /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF395E2D20BD4DE300434CC7 /* HomeViewController.swift */; }; CF395E3020BD4DF400434CC7 /* UserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF395E2F20BD4DF400434CC7 /* UserViewController.swift */; }; CF73731D20B5592C00BBE7AC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CF73731C20B5592C00BBE7AC /* Assets.xcassets */; }; CF73732020B5592C00BBE7AC /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CF73731E20B5592C00BBE7AC /* LaunchScreen.storyboard */; }; CF73732320B5592C00BBE7AC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CF73732220B5592C00BBE7AC /* main.m */; }; CF73734C20B559D200BBE7AC /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CF73734520B559D200BBE7AC /* ViewController.m */; }; CF73734D20B559D200BBE7AC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CF73734B20B559D200BBE7AC /* AppDelegate.m */; }; CF73735120B55B0D00BBE7AC /* BBNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = CF73735020B55B0D00BBE7AC /* BBNavigationController.m */; }; CF73735520B55CA400BBE7AC /* BBTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = CF73735420B55CA400BBE7AC /* BBTabBarController.m */; }; CF73735820B55D0B00BBE7AC /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CF73735720B55D0B00BBE7AC /* HomeViewController.m */; }; CF73735C20B55D3300BBE7AC /* UserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CF73735B20B55D3300BBE7AC /* UserViewController.m */; }; CF808DF122520E6A008F9500 /* BBUserGuiderController.m in Sources */ = {isa = PBXBuildFile; fileRef = CF808DF022520E6A008F9500 /* BBUserGuiderController.m */; }; CF9A6C07207C9DE3004DD232 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF9A6C06207C9DE3004DD232 /* ViewController.swift */; }; CF9A6C0B207CA005004DD232 /* BBGestureBackConst.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF9A6C0A207CA005004DD232 /* BBGestureBackConst.swift */; }; CF9B76542252F3C100E6031F /* BBUserGuider.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CF9B76532252F3C100E6031F /* BBUserGuider.bundle */; }; CF9B765722533D0B00E6031F /* BBUserGuiderController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF9B765622533D0B00E6031F /* BBUserGuiderController.swift */; }; CF9B765A22534ABF00E6031F /* BBUserGuider.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CF9B765922534ABF00E6031F /* BBUserGuider.bundle */; }; CFD0E975207A621C00E58465 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CFD0E974207A621C00E58465 /* Assets.xcassets */; }; CFD0E978207A621C00E58465 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CFD0E976207A621C00E58465 /* LaunchScreen.storyboard */; }; CFD0E9A3207BBA5000E58465 /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFD0E9A2207BBA5000E58465 /* HomeViewController.swift */; }; CFD0E9A6207BBAA200E58465 /* UserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFD0E9A5207BBAA200E58465 /* UserViewController.swift */; }; CFD0E9AB207BBB3C00E58465 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFD0E9AA207BBB3C00E58465 /* AppDelegate.swift */; }; CFD0E9AD207BBC9A00E58465 /* BBTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFD0E9AC207BBC9A00E58465 /* BBTabBarController.swift */; }; CFD0E9AF207BBCD800E58465 /* BBNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFD0E9AE207BBCD800E58465 /* BBNavigationController.swift */; }; CFD0E9B1207BBD1E00E58465 /* BBGestureBaseController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFD0E9B0207BBD1E00E58465 /* BBGestureBaseController.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ CEC3BBC6206354AC0003CF06 /* BBGestureBackConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBGestureBackConst.h; sourceTree = ""; }; CEC3BBC7206354CE0003CF06 /* BBGestureBackConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBGestureBackConst.m; sourceTree = ""; }; CEDECB8F205CC3CD00C08340 /* BBGestureBack_Full_oc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BBGestureBack_Full_oc.app; sourceTree = BUILT_PRODUCTS_DIR; }; CEDECB9B205CC3CD00C08340 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; CEDECB9E205CC3CD00C08340 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; CEDECBA0205CC3CD00C08340 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; CEDECBA1205CC3CD00C08340 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; CEDECBC6205CC54D00C08340 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; CEDECBC7205CC54D00C08340 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; CEDECBC9205CC54D00C08340 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; CEDECBCA205CC54D00C08340 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; CEDECBD0205CC76800C08340 /* BBTabBarController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BBTabBarController.h; sourceTree = ""; }; CEDECBD1205CC76800C08340 /* BBTabBarController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BBTabBarController.m; sourceTree = ""; }; CEDECBD5205CC82800C08340 /* HomeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = ""; }; CEDECBD6205CC82800C08340 /* HomeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = ""; }; CEDECBD9205CC8BC00C08340 /* BBNavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BBNavigationController.h; sourceTree = ""; }; CEDECBDA205CC8BC00C08340 /* BBNavigationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BBNavigationController.m; sourceTree = ""; }; CEDECBDE205CC94100C08340 /* UserViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserViewController.h; sourceTree = ""; }; CEDECBDF205CC94100C08340 /* UserViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserViewController.m; sourceTree = ""; }; CEDECBE1205CCA4100C08340 /* BBGestureBaseController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BBGestureBaseController.h; sourceTree = ""; }; CEDECBE2205CCA4100C08340 /* BBGestureBaseController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BBGestureBaseController.m; sourceTree = ""; }; CF395E0A20BD496B00434CC7 /* BBGestureBack_SysFull_swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BBGestureBack_SysFull_swift.app; sourceTree = BUILT_PRODUCTS_DIR; }; CF395E1320BD496B00434CC7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; CF395E1620BD496B00434CC7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; CF395E1820BD496B00434CC7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; CF395E1F20BD4BD300434CC7 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; CF395E2420BD4BD300434CC7 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; CF395E2920BD4C5800434CC7 /* BBTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BBTabBarController.swift; sourceTree = ""; }; CF395E2B20BD4DC400434CC7 /* BBNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BBNavigationController.swift; sourceTree = ""; }; CF395E2D20BD4DE300434CC7 /* HomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; CF395E2F20BD4DF400434CC7 /* UserViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserViewController.swift; sourceTree = ""; }; CF73731120B5592A00BBE7AC /* BBGestureBack_SysFull_oc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BBGestureBack_SysFull_oc.app; sourceTree = BUILT_PRODUCTS_DIR; }; CF73731C20B5592C00BBE7AC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; CF73731F20B5592C00BBE7AC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; CF73732120B5592C00BBE7AC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; CF73732220B5592C00BBE7AC /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; CF73734520B559D200BBE7AC /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; CF73734720B559D200BBE7AC /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; CF73734A20B559D200BBE7AC /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; CF73734B20B559D200BBE7AC /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; CF73734F20B55B0D00BBE7AC /* BBNavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BBNavigationController.h; sourceTree = ""; }; CF73735020B55B0D00BBE7AC /* BBNavigationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BBNavigationController.m; sourceTree = ""; }; CF73735320B55CA400BBE7AC /* BBTabBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBTabBarController.h; sourceTree = ""; }; CF73735420B55CA400BBE7AC /* BBTabBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBTabBarController.m; sourceTree = ""; }; CF73735620B55D0B00BBE7AC /* HomeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = ""; }; CF73735720B55D0B00BBE7AC /* HomeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = ""; }; CF73735A20B55D3300BBE7AC /* UserViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserViewController.h; sourceTree = ""; }; CF73735B20B55D3300BBE7AC /* UserViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserViewController.m; sourceTree = ""; }; CF808DEF22520E6A008F9500 /* BBUserGuiderController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BBUserGuiderController.h; sourceTree = ""; }; CF808DF022520E6A008F9500 /* BBUserGuiderController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BBUserGuiderController.m; sourceTree = ""; }; CF9A6C06207C9DE3004DD232 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; CF9A6C0A207CA005004DD232 /* BBGestureBackConst.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BBGestureBackConst.swift; sourceTree = ""; }; CF9B76532252F3C100E6031F /* BBUserGuider.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = BBUserGuider.bundle; sourceTree = ""; }; CF9B765622533D0B00E6031F /* BBUserGuiderController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BBUserGuiderController.swift; sourceTree = ""; }; CF9B765922534ABF00E6031F /* BBUserGuider.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = BBUserGuider.bundle; sourceTree = ""; }; CFD0E96B207A621C00E58465 /* BBGestureBack_Full_swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BBGestureBack_Full_swift.app; sourceTree = BUILT_PRODUCTS_DIR; }; CFD0E974207A621C00E58465 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; CFD0E977207A621C00E58465 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; CFD0E979207A621C00E58465 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; CFD0E9A2207BBA5000E58465 /* HomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; CFD0E9A5207BBAA200E58465 /* UserViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserViewController.swift; sourceTree = ""; }; CFD0E9AA207BBB3C00E58465 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; CFD0E9AC207BBC9A00E58465 /* BBTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BBTabBarController.swift; sourceTree = ""; }; CFD0E9AE207BBCD800E58465 /* BBNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BBNavigationController.swift; sourceTree = ""; }; CFD0E9B0207BBD1E00E58465 /* BBGestureBaseController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BBGestureBaseController.swift; sourceTree = ""; }; CFE80F3722547FF2001CFA34 /* BBGestureBack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BBGestureBack.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ CEDECB8C205CC3CD00C08340 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; CF395E0720BD496B00434CC7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; CF73730E20B5592A00BBE7AC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; CFD0E968207A621C00E58465 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ CEDECB86205CC3CD00C08340 = { isa = PBXGroup; children = ( CEDECB91205CC3CD00C08340 /* BBGestureBack_Full_oc */, CFD0E96C207A621C00E58465 /* BBGestureBack_Full_swift */, CF73731220B5592A00BBE7AC /* BBGestureBack_SysFull_oc */, CF395E0B20BD496B00434CC7 /* BBGestureBack_SysFull_swift */, CEDECB90205CC3CD00C08340 /* Products */, ); sourceTree = ""; }; CEDECB90205CC3CD00C08340 /* Products */ = { isa = PBXGroup; children = ( CEDECB8F205CC3CD00C08340 /* BBGestureBack_Full_oc.app */, CFD0E96B207A621C00E58465 /* BBGestureBack_Full_swift.app */, CF73731120B5592A00BBE7AC /* BBGestureBack_SysFull_oc.app */, CF395E0A20BD496B00434CC7 /* BBGestureBack_SysFull_swift.app */, ); name = Products; sourceTree = ""; }; CEDECB91205CC3CD00C08340 /* BBGestureBack_Full_oc */ = { isa = PBXGroup; children = ( CEDECBC4205CC54D00C08340 /* Classes */, CEDECB9B205CC3CD00C08340 /* Assets.xcassets */, CEDECB9D205CC3CD00C08340 /* LaunchScreen.storyboard */, CEDECBA0205CC3CD00C08340 /* Info.plist */, CEDECBA1205CC3CD00C08340 /* main.m */, ); path = BBGestureBack_Full_oc; sourceTree = ""; }; CEDECBC4205CC54D00C08340 /* Classes */ = { isa = PBXGroup; children = ( CF9B76522252F39D00E6031F /* Resource */, CEDECBC5205CC54D00C08340 /* Home */, CEDECBDC205CC90F00C08340 /* User */, CEDECBC8205CC54D00C08340 /* Main */, ); path = Classes; sourceTree = ""; }; CEDECBC5205CC54D00C08340 /* Home */ = { isa = PBXGroup; children = ( CEDECBD3205CC7F500C08340 /* Index */, CEDECBC6205CC54D00C08340 /* ViewController.h */, CEDECBC7205CC54D00C08340 /* ViewController.m */, ); path = Home; sourceTree = ""; }; CEDECBC8205CC54D00C08340 /* Main */ = { isa = PBXGroup; children = ( CEDECBC9205CC54D00C08340 /* AppDelegate.h */, CEDECBCA205CC54D00C08340 /* AppDelegate.m */, CF808DEE22520DE3008F9500 /* BBUserGuider */, CEDECBD8205CC88500C08340 /* BBNavigation */, CEDECBCB205CC54D00C08340 /* BBGestureBack */, CEDECBCF205CC72C00C08340 /* BBTabBar */, ); path = Main; sourceTree = ""; }; CEDECBCB205CC54D00C08340 /* BBGestureBack */ = { isa = PBXGroup; children = ( CFE80F3722547FF2001CFA34 /* BBGestureBack.h */, CEC3BBC6206354AC0003CF06 /* BBGestureBackConst.h */, CEC3BBC7206354CE0003CF06 /* BBGestureBackConst.m */, CEDECBE1205CCA4100C08340 /* BBGestureBaseController.h */, CEDECBE2205CCA4100C08340 /* BBGestureBaseController.m */, ); path = BBGestureBack; sourceTree = ""; }; CEDECBCF205CC72C00C08340 /* BBTabBar */ = { isa = PBXGroup; children = ( CEDECBD0205CC76800C08340 /* BBTabBarController.h */, CEDECBD1205CC76800C08340 /* BBTabBarController.m */, ); path = BBTabBar; sourceTree = ""; }; CEDECBD3205CC7F500C08340 /* Index */ = { isa = PBXGroup; children = ( CEDECBD5205CC82800C08340 /* HomeViewController.h */, CEDECBD6205CC82800C08340 /* HomeViewController.m */, ); path = Index; sourceTree = ""; }; CEDECBD8205CC88500C08340 /* BBNavigation */ = { isa = PBXGroup; children = ( CEDECBD9205CC8BC00C08340 /* BBNavigationController.h */, CEDECBDA205CC8BC00C08340 /* BBNavigationController.m */, ); path = BBNavigation; sourceTree = ""; }; CEDECBDC205CC90F00C08340 /* User */ = { isa = PBXGroup; children = ( CEDECBDD205CC92300C08340 /* Index */, ); path = User; sourceTree = ""; }; CEDECBDD205CC92300C08340 /* Index */ = { isa = PBXGroup; children = ( CEDECBDE205CC94100C08340 /* UserViewController.h */, CEDECBDF205CC94100C08340 /* UserViewController.m */, ); path = Index; sourceTree = ""; }; CF395E0B20BD496B00434CC7 /* BBGestureBack_SysFull_swift */ = { isa = PBXGroup; children = ( CF395E1D20BD4BD300434CC7 /* Classes */, CF395E1320BD496B00434CC7 /* Assets.xcassets */, CF395E1520BD496B00434CC7 /* LaunchScreen.storyboard */, CF395E1820BD496B00434CC7 /* Info.plist */, ); path = BBGestureBack_SysFull_swift; sourceTree = ""; }; CF395E1D20BD4BD300434CC7 /* Classes */ = { isa = PBXGroup; children = ( CF395E1E20BD4BD300434CC7 /* Home */, CF395E2120BD4BD300434CC7 /* User */, CF395E2320BD4BD300434CC7 /* Main */, ); path = Classes; sourceTree = ""; }; CF395E1E20BD4BD300434CC7 /* Home */ = { isa = PBXGroup; children = ( CF395E1F20BD4BD300434CC7 /* ViewController.swift */, CF395E2020BD4BD300434CC7 /* Index */, ); path = Home; sourceTree = ""; }; CF395E2020BD4BD300434CC7 /* Index */ = { isa = PBXGroup; children = ( CF395E2D20BD4DE300434CC7 /* HomeViewController.swift */, ); path = Index; sourceTree = ""; }; CF395E2120BD4BD300434CC7 /* User */ = { isa = PBXGroup; children = ( CF395E2220BD4BD300434CC7 /* Index */, ); path = User; sourceTree = ""; }; CF395E2220BD4BD300434CC7 /* Index */ = { isa = PBXGroup; children = ( CF395E2F20BD4DF400434CC7 /* UserViewController.swift */, ); path = Index; sourceTree = ""; }; CF395E2320BD4BD300434CC7 /* Main */ = { isa = PBXGroup; children = ( CF395E2420BD4BD300434CC7 /* AppDelegate.swift */, CF395E2520BD4BD300434CC7 /* BBNavigation */, CF395E2620BD4BD300434CC7 /* BBTabBar */, ); path = Main; sourceTree = ""; }; CF395E2520BD4BD300434CC7 /* BBNavigation */ = { isa = PBXGroup; children = ( CF395E2B20BD4DC400434CC7 /* BBNavigationController.swift */, ); path = BBNavigation; sourceTree = ""; }; CF395E2620BD4BD300434CC7 /* BBTabBar */ = { isa = PBXGroup; children = ( CF395E2920BD4C5800434CC7 /* BBTabBarController.swift */, ); path = BBTabBar; sourceTree = ""; }; CF73731220B5592A00BBE7AC /* BBGestureBack_SysFull_oc */ = { isa = PBXGroup; children = ( CF73734320B559D200BBE7AC /* Classes */, CF73731C20B5592C00BBE7AC /* Assets.xcassets */, CF73731E20B5592C00BBE7AC /* LaunchScreen.storyboard */, CF73732120B5592C00BBE7AC /* Info.plist */, CF73732220B5592C00BBE7AC /* main.m */, ); path = BBGestureBack_SysFull_oc; sourceTree = ""; }; CF73734320B559D200BBE7AC /* Classes */ = { isa = PBXGroup; children = ( CF73734420B559D200BBE7AC /* Home */, CF73734820B559D200BBE7AC /* User */, CF73734920B559D200BBE7AC /* Main */, ); path = Classes; sourceTree = ""; }; CF73734420B559D200BBE7AC /* Home */ = { isa = PBXGroup; children = ( CF73734620B559D200BBE7AC /* Index */, CF73734720B559D200BBE7AC /* ViewController.h */, CF73734520B559D200BBE7AC /* ViewController.m */, ); path = Home; sourceTree = ""; }; CF73734620B559D200BBE7AC /* Index */ = { isa = PBXGroup; children = ( CF73735620B55D0B00BBE7AC /* HomeViewController.h */, CF73735720B55D0B00BBE7AC /* HomeViewController.m */, ); path = Index; sourceTree = ""; }; CF73734820B559D200BBE7AC /* User */ = { isa = PBXGroup; children = ( CF73735920B55D1F00BBE7AC /* Index */, ); path = User; sourceTree = ""; }; CF73734920B559D200BBE7AC /* Main */ = { isa = PBXGroup; children = ( CF73735220B55C7200BBE7AC /* BBTabBar */, CF73734E20B55A9B00BBE7AC /* BBNavigation */, CF73734A20B559D200BBE7AC /* AppDelegate.h */, CF73734B20B559D200BBE7AC /* AppDelegate.m */, ); path = Main; sourceTree = ""; }; CF73734E20B55A9B00BBE7AC /* BBNavigation */ = { isa = PBXGroup; children = ( CF73734F20B55B0D00BBE7AC /* BBNavigationController.h */, CF73735020B55B0D00BBE7AC /* BBNavigationController.m */, ); path = BBNavigation; sourceTree = ""; }; CF73735220B55C7200BBE7AC /* BBTabBar */ = { isa = PBXGroup; children = ( CF73735320B55CA400BBE7AC /* BBTabBarController.h */, CF73735420B55CA400BBE7AC /* BBTabBarController.m */, ); path = BBTabBar; sourceTree = ""; }; CF73735920B55D1F00BBE7AC /* Index */ = { isa = PBXGroup; children = ( CF73735A20B55D3300BBE7AC /* UserViewController.h */, CF73735B20B55D3300BBE7AC /* UserViewController.m */, ); path = Index; sourceTree = ""; }; CF808DEE22520DE3008F9500 /* BBUserGuider */ = { isa = PBXGroup; children = ( CF808DEF22520E6A008F9500 /* BBUserGuiderController.h */, CF808DF022520E6A008F9500 /* BBUserGuiderController.m */, ); path = BBUserGuider; sourceTree = ""; }; CF9B76522252F39D00E6031F /* Resource */ = { isa = PBXGroup; children = ( CF9B76532252F3C100E6031F /* BBUserGuider.bundle */, ); path = Resource; sourceTree = ""; }; CF9B765522533C2C00E6031F /* BBUserGuider */ = { isa = PBXGroup; children = ( CF9B765622533D0B00E6031F /* BBUserGuiderController.swift */, ); path = BBUserGuider; sourceTree = ""; }; CF9B765822534ABF00E6031F /* Resource */ = { isa = PBXGroup; children = ( CF9B765922534ABF00E6031F /* BBUserGuider.bundle */, ); path = Resource; sourceTree = ""; }; CFD0E96C207A621C00E58465 /* BBGestureBack_Full_swift */ = { isa = PBXGroup; children = ( CFD0E999207A67DA00E58465 /* Classes */, CFD0E974207A621C00E58465 /* Assets.xcassets */, CFD0E976207A621C00E58465 /* LaunchScreen.storyboard */, CFD0E979207A621C00E58465 /* Info.plist */, ); path = BBGestureBack_Full_swift; sourceTree = ""; }; CFD0E999207A67DA00E58465 /* Classes */ = { isa = PBXGroup; children = ( CF9B765822534ABF00E6031F /* Resource */, CFD0E99A207A67DA00E58465 /* Home */, CFD0E99C207A67DA00E58465 /* User */, CFD0E99E207A67DA00E58465 /* Main */, ); path = Classes; sourceTree = ""; }; CFD0E99A207A67DA00E58465 /* Home */ = { isa = PBXGroup; children = ( CF9A6C06207C9DE3004DD232 /* ViewController.swift */, CFD0E9A1207BBA2600E58465 /* Index */, ); path = Home; sourceTree = ""; }; CFD0E99C207A67DA00E58465 /* User */ = { isa = PBXGroup; children = ( CFD0E9A4207BBA9000E58465 /* Index */, ); path = User; sourceTree = ""; }; CFD0E99E207A67DA00E58465 /* Main */ = { isa = PBXGroup; children = ( CFD0E9AA207BBB3C00E58465 /* AppDelegate.swift */, CF9B765522533C2C00E6031F /* BBUserGuider */, CFD0E9A9207BBAF300E58465 /* BBGestureBack */, CFD0E9A7207BBAF300E58465 /* BBNavigation */, CFD0E9A8207BBAF300E58465 /* BBTabBar */, ); path = Main; sourceTree = ""; }; CFD0E9A1207BBA2600E58465 /* Index */ = { isa = PBXGroup; children = ( CFD0E9A2207BBA5000E58465 /* HomeViewController.swift */, ); path = Index; sourceTree = ""; }; CFD0E9A4207BBA9000E58465 /* Index */ = { isa = PBXGroup; children = ( CFD0E9A5207BBAA200E58465 /* UserViewController.swift */, ); path = Index; sourceTree = ""; }; CFD0E9A7207BBAF300E58465 /* BBNavigation */ = { isa = PBXGroup; children = ( CFD0E9AE207BBCD800E58465 /* BBNavigationController.swift */, ); path = BBNavigation; sourceTree = ""; }; CFD0E9A8207BBAF300E58465 /* BBTabBar */ = { isa = PBXGroup; children = ( CFD0E9AC207BBC9A00E58465 /* BBTabBarController.swift */, ); path = BBTabBar; sourceTree = ""; }; CFD0E9A9207BBAF300E58465 /* BBGestureBack */ = { isa = PBXGroup; children = ( CF9A6C0A207CA005004DD232 /* BBGestureBackConst.swift */, CFD0E9B0207BBD1E00E58465 /* BBGestureBaseController.swift */, ); path = BBGestureBack; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ CEDECB8E205CC3CD00C08340 /* BBGestureBack_Full_oc */ = { isa = PBXNativeTarget; buildConfigurationList = CEDECBBB205CC3CD00C08340 /* Build configuration list for PBXNativeTarget "BBGestureBack_Full_oc" */; buildPhases = ( CEDECB8B205CC3CD00C08340 /* Sources */, CEDECB8C205CC3CD00C08340 /* Frameworks */, CEDECB8D205CC3CD00C08340 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = BBGestureBack_Full_oc; productName = BBGestureBack; productReference = CEDECB8F205CC3CD00C08340 /* BBGestureBack_Full_oc.app */; productType = "com.apple.product-type.application"; }; CF395E0920BD496B00434CC7 /* BBGestureBack_SysFull_swift */ = { isa = PBXNativeTarget; buildConfigurationList = CF395E1920BD496B00434CC7 /* Build configuration list for PBXNativeTarget "BBGestureBack_SysFull_swift" */; buildPhases = ( CF395E0620BD496B00434CC7 /* Sources */, CF395E0720BD496B00434CC7 /* Frameworks */, CF395E0820BD496B00434CC7 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = BBGestureBack_SysFull_swift; productName = BBGestureBack_SysFull_swift; productReference = CF395E0A20BD496B00434CC7 /* BBGestureBack_SysFull_swift.app */; productType = "com.apple.product-type.application"; }; CF73731020B5592A00BBE7AC /* BBGestureBack_SysFull_oc */ = { isa = PBXNativeTarget; buildConfigurationList = CF73734020B5592C00BBE7AC /* Build configuration list for PBXNativeTarget "BBGestureBack_SysFull_oc" */; buildPhases = ( CF73730D20B5592A00BBE7AC /* Sources */, CF73730E20B5592A00BBE7AC /* Frameworks */, CF73730F20B5592A00BBE7AC /* Resources */, ); buildRules = ( ); dependencies = ( ); name = BBGestureBack_SysFull_oc; productName = BBGestureBack_SysFull_oc; productReference = CF73731120B5592A00BBE7AC /* BBGestureBack_SysFull_oc.app */; productType = "com.apple.product-type.application"; }; CFD0E96A207A621C00E58465 /* BBGestureBack_Full_swift */ = { isa = PBXNativeTarget; buildConfigurationList = CFD0E996207A621D00E58465 /* Build configuration list for PBXNativeTarget "BBGestureBack_Full_swift" */; buildPhases = ( CFD0E967207A621C00E58465 /* Sources */, CFD0E968207A621C00E58465 /* Frameworks */, CFD0E969207A621C00E58465 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = BBGestureBack_Full_swift; productName = BBGestureBack_Full_swift; productReference = CFD0E96B207A621C00E58465 /* BBGestureBack_Full_swift.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ CEDECB87205CC3CD00C08340 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0930; LastUpgradeCheck = 0920; ORGANIZATIONNAME = Bonway; TargetAttributes = { CEDECB8E205CC3CD00C08340 = { CreatedOnToolsVersion = 9.2; ProvisioningStyle = Automatic; }; CF395E0920BD496B00434CC7 = { CreatedOnToolsVersion = 9.3; ProvisioningStyle = Automatic; }; CF73731020B5592A00BBE7AC = { CreatedOnToolsVersion = 9.3; ProvisioningStyle = Automatic; }; CFD0E96A207A621C00E58465 = { CreatedOnToolsVersion = 9.2; ProvisioningStyle = Automatic; }; }; }; buildConfigurationList = CEDECB8A205CC3CD00C08340 /* Build configuration list for PBXProject "BBGestureBack" */; compatibilityVersion = "Xcode 8.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = CEDECB86205CC3CD00C08340; productRefGroup = CEDECB90205CC3CD00C08340 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( CEDECB8E205CC3CD00C08340 /* BBGestureBack_Full_oc */, CFD0E96A207A621C00E58465 /* BBGestureBack_Full_swift */, CF73731020B5592A00BBE7AC /* BBGestureBack_SysFull_oc */, CF395E0920BD496B00434CC7 /* BBGestureBack_SysFull_swift */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ CEDECB8D205CC3CD00C08340 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CEDECB9F205CC3CD00C08340 /* LaunchScreen.storyboard in Resources */, CF9B76542252F3C100E6031F /* BBUserGuider.bundle in Resources */, CEDECB9C205CC3CD00C08340 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; CF395E0820BD496B00434CC7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CF395E1720BD496B00434CC7 /* LaunchScreen.storyboard in Resources */, CF395E1420BD496B00434CC7 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; CF73730F20B5592A00BBE7AC /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CF73732020B5592C00BBE7AC /* LaunchScreen.storyboard in Resources */, CF73731D20B5592C00BBE7AC /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; CFD0E969207A621C00E58465 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( CFD0E978207A621C00E58465 /* LaunchScreen.storyboard in Resources */, CF9B765A22534ABF00E6031F /* BBUserGuider.bundle in Resources */, CFD0E975207A621C00E58465 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ CEDECB8B205CC3CD00C08340 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CEDECBE0205CC94100C08340 /* UserViewController.m in Sources */, CEDECBCD205CC54D00C08340 /* ViewController.m in Sources */, CF808DF122520E6A008F9500 /* BBUserGuiderController.m in Sources */, CEDECBA2205CC3CD00C08340 /* main.m in Sources */, CEDECBCE205CC54D00C08340 /* AppDelegate.m in Sources */, CEDECBD7205CC82800C08340 /* HomeViewController.m in Sources */, CEC3BBC8206354CE0003CF06 /* BBGestureBackConst.m in Sources */, CEDECBD2205CC76800C08340 /* BBTabBarController.m in Sources */, CEDECBE3205CCA4100C08340 /* BBGestureBaseController.m in Sources */, CEDECBDB205CC8BC00C08340 /* BBNavigationController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; CF395E0620BD496B00434CC7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CF395E2E20BD4DE300434CC7 /* HomeViewController.swift in Sources */, CF395E3020BD4DF400434CC7 /* UserViewController.swift in Sources */, CF395E2820BD4BD300434CC7 /* AppDelegate.swift in Sources */, CF395E2720BD4BD300434CC7 /* ViewController.swift in Sources */, CF395E2A20BD4C5800434CC7 /* BBTabBarController.swift in Sources */, CF395E2C20BD4DC400434CC7 /* BBNavigationController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; CF73730D20B5592A00BBE7AC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CF73735C20B55D3300BBE7AC /* UserViewController.m in Sources */, CF73734C20B559D200BBE7AC /* ViewController.m in Sources */, CF73732320B5592C00BBE7AC /* main.m in Sources */, CF73734D20B559D200BBE7AC /* AppDelegate.m in Sources */, CF73735120B55B0D00BBE7AC /* BBNavigationController.m in Sources */, CF73735520B55CA400BBE7AC /* BBTabBarController.m in Sources */, CF73735820B55D0B00BBE7AC /* HomeViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; CFD0E967207A621C00E58465 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CFD0E9AB207BBB3C00E58465 /* AppDelegate.swift in Sources */, CF9B765722533D0B00E6031F /* BBUserGuiderController.swift in Sources */, CFD0E9B1207BBD1E00E58465 /* BBGestureBaseController.swift in Sources */, CFD0E9AF207BBCD800E58465 /* BBNavigationController.swift in Sources */, CFD0E9AD207BBC9A00E58465 /* BBTabBarController.swift in Sources */, CF9A6C07207C9DE3004DD232 /* ViewController.swift in Sources */, CFD0E9A6207BBAA200E58465 /* UserViewController.swift in Sources */, CF9A6C0B207CA005004DD232 /* BBGestureBackConst.swift in Sources */, CFD0E9A3207BBA5000E58465 /* HomeViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ CEDECB9D205CC3CD00C08340 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( CEDECB9E205CC3CD00C08340 /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; }; CF395E1520BD496B00434CC7 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( CF395E1620BD496B00434CC7 /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; }; CF73731E20B5592C00BBE7AC /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( CF73731F20B5592C00BBE7AC /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; }; CFD0E976207A621C00E58465 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( CFD0E977207A621C00E58465 /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ CEDECBB9205CC3CD00C08340 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 11.2; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; }; CEDECBBA205CC3CD00C08340 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 11.2; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; CEDECBBC205CC3CD00C08340 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = "$(SRCROOT)/BBGestureBack_Full_oc/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = Bonway.com.gestureBack; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; CEDECBBD205CC3CD00C08340 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = "$(SRCROOT)/BBGestureBack_Full_oc/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = Bonway.com.gestureBack; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; CF395E1A20BD496B00434CC7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = BBGestureBack_SysFull_swift/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.bonway.BBGestureBack-SysFull-swift"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; CF395E1B20BD496B00434CC7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = BBGestureBack_SysFull_swift/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.bonway.BBGestureBack-SysFull-swift"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; CF73733A20B5592C00BBE7AC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = BBGestureBack_SysFull_oc/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = Bonway.com.gestureBack; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; CF73733B20B5592C00BBE7AC /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = BBGestureBack_SysFull_oc/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = Bonway.com.gestureBack; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; CFD0E990207A621D00E58465 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = BBGestureBack_Full_swift/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = Bonway.com.gestureBack; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; CFD0E991207A621D00E58465 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = BBGestureBack_Full_swift/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = Bonway.com.gestureBack; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ CEDECB8A205CC3CD00C08340 /* Build configuration list for PBXProject "BBGestureBack" */ = { isa = XCConfigurationList; buildConfigurations = ( CEDECBB9205CC3CD00C08340 /* Debug */, CEDECBBA205CC3CD00C08340 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; CEDECBBB205CC3CD00C08340 /* Build configuration list for PBXNativeTarget "BBGestureBack_Full_oc" */ = { isa = XCConfigurationList; buildConfigurations = ( CEDECBBC205CC3CD00C08340 /* Debug */, CEDECBBD205CC3CD00C08340 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; CF395E1920BD496B00434CC7 /* Build configuration list for PBXNativeTarget "BBGestureBack_SysFull_swift" */ = { isa = XCConfigurationList; buildConfigurations = ( CF395E1A20BD496B00434CC7 /* Debug */, CF395E1B20BD496B00434CC7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; CF73734020B5592C00BBE7AC /* Build configuration list for PBXNativeTarget "BBGestureBack_SysFull_oc" */ = { isa = XCConfigurationList; buildConfigurations = ( CF73733A20B5592C00BBE7AC /* Debug */, CF73733B20B5592C00BBE7AC /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; CFD0E996207A621D00E58465 /* Build configuration list for PBXNativeTarget "BBGestureBack_Full_swift" */ = { isa = XCConfigurationList; buildConfigurations = ( CFD0E990207A621D00E58465 /* Debug */, CFD0E991207A621D00E58465 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = CEDECB87205CC3CD00C08340 /* Project object */; } ================================================ FILE: BBGestureBack.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: BBGestureBack.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ================================================ IDEDidComputeMac32BitWarning ================================================ FILE: BBGestureBack.xcodeproj/xcuserdata/Bonway.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist ================================================ ================================================ FILE: BBGestureBack.xcodeproj/xcuserdata/Bonway.xcuserdatad/xcschemes/BBGestureBack_Full_oc.xcscheme ================================================ ================================================ FILE: BBGestureBack.xcodeproj/xcuserdata/Bonway.xcuserdatad/xcschemes/BBGestureBack_Full_swift.xcscheme ================================================ ================================================ FILE: BBGestureBack.xcodeproj/xcuserdata/Bonway.xcuserdatad/xcschemes/BBGestureBack_SysFull_oc.xcscheme ================================================ ================================================ FILE: BBGestureBack.xcodeproj/xcuserdata/Bonway.xcuserdatad/xcschemes/xcschememanagement.plist ================================================ SchemeUserState BBGestureBack_Full_oc.xcscheme isShown orderHint 0 BBGestureBack_Full_swift.xcscheme isShown orderHint 1 BBGestureBack_SysFull_oc.xcscheme isShown orderHint 2 BBGestureBack_SysFull_swift.xcscheme orderHint 3 BBGestureBack_SysFull_swift.xcscheme_^#shared#^_ orderHint 3 SuppressBuildableAutocreation CEDECB8E205CC3CD00C08340 primary CF73731020B5592A00BBE7AC primary CFD0E96A207A621C00E58465 primary ================================================ FILE: BBGestureBack.xcodeproj/xcuserdata/user.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist ================================================ ================================================ FILE: BBGestureBack.xcodeproj/xcuserdata/user.xcuserdatad/xcschemes/xcschememanagement.plist ================================================ SchemeUserState BBGestureBack.xcscheme orderHint 0 ================================================ FILE: BBGestureBack_Full_oc/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "size" : "20x20", "idiom" : "iphone", "filename" : "20@2x-1.png", "scale" : "2x" }, { "size" : "20x20", "idiom" : "iphone", "filename" : "20@3x.png", "scale" : "3x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "29@2x-1.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "29@3x.png", "scale" : "3x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "40@2x-1.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "40@3x.png", "scale" : "3x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "60@2x.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "60@3x.png", "scale" : "3x" }, { "size" : "20x20", "idiom" : "ipad", "filename" : "20@1x.png", "scale" : "1x" }, { "size" : "20x20", "idiom" : "ipad", "filename" : "20@2x.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "29@1x.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "29@2x.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "40@1x.png", "scale" : "1x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "40@2x.png", "scale" : "2x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "76@1x.png", "scale" : "1x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "76@2x.png", "scale" : "2x" }, { "size" : "83.5x83.5", "idiom" : "ipad", "filename" : "83.5@2x.png", "scale" : "2x" }, { "size" : "1024x1024", "idiom" : "ios-marketing", "filename" : "1024@1x.png", "scale" : "1x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_oc/Assets.xcassets/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_oc/Assets.xcassets/Navigation/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_oc/Assets.xcassets/Navigation/bb_navigation_back.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "bb_navigation_back@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "bb_navigation_back@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_oc/Assets.xcassets/TabBar/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_oc/Assets.xcassets/TabBar/TabBarHomeNormal.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarHomeNormal@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarHomeNormal@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" }, "properties" : { "template-rendering-intent" : "original" } } ================================================ FILE: BBGestureBack_Full_oc/Assets.xcassets/TabBar/TabBarHomeSelected.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarHomeSelected@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarHomeSelected@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_oc/Assets.xcassets/TabBar/TabBarUserNormal.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarUserNormal@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarUserNormal@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" }, "properties" : { "template-rendering-intent" : "original" } } ================================================ FILE: BBGestureBack_Full_oc/Assets.xcassets/TabBar/TabBarUserSelected.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarUserSelected@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarUserSelected@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_oc/Assets.xcassets/logo.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "logo@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "logo@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_oc/Base.lproj/LaunchScreen.storyboard ================================================ ================================================ FILE: BBGestureBack_Full_oc/Classes/Home/Index/HomeViewController.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import #import "BBGestureBaseController.h" @interface HomeViewController : BBGestureBaseController @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Home/Index/HomeViewController.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import "HomeViewController.h" #import "ViewController.h" @interface HomeViewController () @end @implementation HomeViewController - (void)viewDidLoad { [super viewDidLoad]; UIButton *sysBtn = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; sysBtn.backgroundColor = [UIColor blueColor]; [sysBtn setTitle:@"sysPush" forState:UIControlStateNormal]; [sysBtn addTarget:self action:@selector(sysPushClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:sysBtn]; } -(void)sysPushClick{ [self.navigationController pushViewController:[ViewController new] animated:YES]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Home/ViewController.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import #import "BBGestureBaseController.h" @interface ViewController : BBGestureBaseController @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Home/ViewController.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import "ViewController.h" #import "AppDelegate.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //iOS12.1 UINavigationController + UITabBarController( UITabBar 磨砂),在 系统的 popViewControllerAnimated 会遇到tabbar布局错乱的问题,所以需添加以下方法。 //当然你也可以自己选择添加到底层的navigationController,或 baseViewController中,进行处理。 [[UITabBar appearance]setTranslucent:NO]; //--------------------------------------- self.view.backgroundColor = [UIColor whiteColor]; UIButton *popBtn = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 150, 50)]; popBtn.backgroundColor = [UIColor redColor]; [popBtn setTitle:@"BBPop" forState:UIControlStateNormal]; [popBtn addTarget:self action:@selector(popClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:popBtn]; UIButton *popToVCBtn = [[UIButton alloc]initWithFrame:CGRectMake(100, 200, 150, 50)]; popToVCBtn.backgroundColor = [UIColor redColor]; [popToVCBtn setTitle:@"BBPopToVC" forState:UIControlStateNormal]; [popToVCBtn addTarget:self action:@selector(popToClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:popToVCBtn]; UIButton *popToRootBtn = [[UIButton alloc]initWithFrame:CGRectMake(100, 300, 150, 50)]; popToRootBtn.backgroundColor = [UIColor redColor]; [popToRootBtn setTitle:@"BBPopToRootVC" forState:UIControlStateNormal]; [popToRootBtn addTarget:self action:@selector(popToRootClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:popToRootBtn]; UIButton *sysPopBtn = [[UIButton alloc]initWithFrame:CGRectMake(100, 400, 150, 50)]; sysPopBtn.backgroundColor = [UIColor blueColor]; [sysPopBtn setTitle:@"sysPop" forState:UIControlStateNormal]; [sysPopBtn addTarget:self action:@selector(sysPopClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:sysPopBtn]; } -(void)popClick{ [self bb_popViewController]; } -(void)popToClick{ UIViewController *viewController = self.navigationController.viewControllers[0]; [self bb_popToViewController:viewController]; } -(void)popToRootClick{ [self bb_popToRootViewController]; } -(void)sysPopClick{ [self.navigationController popViewControllerAnimated:YES]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/AppDelegate.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import #import "BBGestureBaseController.h" @interface AppDelegate : UIResponder @property (nonatomic, strong) BBGestureBaseView *gestureBaseView; @property (strong, nonatomic) UIWindow *window; + (AppDelegate* )shareAppDelegate; - (void)setupRootViewController:(UIViewController *)rootViewController; @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/AppDelegate.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import "AppDelegate.h" #import "BBGestureBack.h" #import "BBUserGuiderController.h" @interface AppDelegate () @end @implementation AppDelegate + (AppDelegate* )shareAppDelegate { return (AppDelegate*)[UIApplication sharedApplication].delegate; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.backgroundColor = [UIColor whiteColor]; [self setupRootController]; [self.window makeKeyAndVisible]; return YES; } - (void)applicationWillResignActive:(UIApplication *)application { // 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. // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. } - (void)applicationDidEnterBackground:(UIApplication *)application { // 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. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } - (void)applicationWillEnterForeground:(UIApplication *)application { // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. } - (void)applicationDidBecomeActive:(UIApplication *)application { // 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. } - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } - (void)setupRootController { if (![BBUserDefault boolForKey:kBBFirstLaunch]) { [BBUserDefault setBool:YES forKey:kBBFirstLaunch]; [self setupRootViewController:[[BBUserGuiderController alloc]init]]; }else{ [self setupRootViewController:[[BBTabBarController alloc] init]]; } } - (void)setupRootViewController:(UIViewController *)rootViewController { rootViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [UIView transitionWithView:self.window duration:0.5f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ BOOL oldState = [UIView areAnimationsEnabled]; [UIView setAnimationsEnabled:NO]; [UIApplication sharedApplication].keyWindow.rootViewController = rootViewController; [UIView setAnimationsEnabled:oldState]; } completion:nil]; if (!self.gestureBaseView) { self.window.rootViewController = rootViewController; self.gestureBaseView = [[BBGestureBaseView alloc] initWithFrame:CGRectMake(0, 0, self.window.frame.size.width, self.window.frame.size.height)]; [self.window insertSubview:self.gestureBaseView atIndex:0]; }else{ [self.gestureBaseView removeObserver]; self.window.rootViewController = rootViewController; [self.gestureBaseView addObserver]; [self.window sendSubviewToBack:self.gestureBaseView]; } self.gestureBaseView.hidden = YES; } @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/BBGestureBack/BBGestureBack.h ================================================ // // BBGestureBack.h // BBGestureBack // // Created by Bonway on 2019/4/3. // Copyright © 2019 Bonway. All rights reserved. // #ifndef BBGestureBack_h #define BBGestureBack_h #import "BBGestureBackConst.h" #import "BBTabBarController.h" #import "BBGestureBaseController.h" #endif /* BBGestureBack_h */ ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/BBGestureBack/BBGestureBackConst.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import #import #ifdef DEBUG #define BBLog(...) NSLog(__VA_ARGS__) #else #define BBLog(...) #endif #define BBWeakSelf __weak typeof(self) weakSelf = self; #define BBUserDefault [NSUserDefaults standardUserDefaults] #define BBDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead) #define BBObjectMsgSend(...) ((void (*)(void *, SEL, UIView *))objc_msgSend)(__VA_ARGS__) #define BBObjectMsgTarget(target) (__bridge void *)(target) #define BBColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0] #pragma mark - 手机型号 #define BBSCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height #define BBIS_IPHONEX ((BBSCREEN_HEIGHT-812)==0 || (BBSCREEN_HEIGHT-896)==0) //The ifrst user guider image (第一次引导图) UIKIT_EXTERN NSString *const kBBFirstLaunch; // Open iPhone X Style.(是否打开Phone X风格) UIKIT_EXTERN const Boolean kBBIsOpenIphoneXStyle; // The default is 40, iPhone X Style Corner。(默认为40,iPhone X 圆角弧度) UIKIT_EXTERN const CGFloat kBBIphoneXStyleCorner; // The default is 3, User guider image count。(默认为3,用户引导图总页数) UIKIT_EXTERN const NSInteger kBBUserGuiderImgCount; // Screen system to return gesture.(是否屏蔽系统返回手势) UIKIT_EXTERN const Boolean kBBIsCanleSystemPan; // The distance from the left can be automatically returned.(距离左边多少距离,可以自动返回) UIKIT_EXTERN const CGFloat kBBDistanceToLeft; // BottomView Scaling.(底层缩放比例) UIKIT_EXTERN const CGFloat kBBWindowToScale; // BottomView alpha.(底层透明度) UIKIT_EXTERN const CGFloat kBBMaskingAlpha; // Automatic return speed.(自动返回速度) UIKIT_EXTERN const CGFloat kBBGestureSpeed; // Range of drag and drop.(拖拽的范围,大于此值才有效果) UIKIT_EXTERN const CGFloat kBBDistanceToPan; // The default is 0, 0 for full screen return, and also for distance.(默认为0,0为全屏返回,也可指定距离) UIKIT_EXTERN const CGFloat kBBDistanceToStart; ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/BBGestureBack/BBGestureBackConst.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import NSString *const kBBFirstLaunch = @"BBFirstLaunch"; const Boolean kBBIsOpenIphoneXStyle = YES; const CGFloat kBBIphoneXStyleCorner = 40.0; const NSInteger kBBUserGuiderImgCount = 3; const Boolean kBBIsCanleSystemPan = YES; const CGFloat kBBDistanceToLeft = 70.0; const CGFloat kBBWindowToScale = 0.95; const CGFloat kBBMaskingAlpha = 0.9; const CGFloat kBBGestureSpeed = 0.3; const CGFloat kBBDistanceToPan = 10.0; const CGFloat kBBDistanceToStart = 0.0; ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/BBGestureBack/BBGestureBaseController.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import typedef enum _BBPopType { BBPopTypeViewController = 0, BBPopTypeToViewController, BBPopTypeToRootViewController } BBPopType; @interface BBGestureBaseController : UIViewController @property (nonatomic) BBPopType blankType;// default is BBPopTypeViewController. @property (nonatomic) Boolean isEnablePanGesture;// default is YES. - (void)bb_popViewController; - (void)bb_popToViewController:(UIViewController *)viewController; - (void)bb_popToRootViewController; @end @interface BBGestureBaseView : UIView @property (nonatomic, strong) UIImageView *imgView; @property (nonatomic, strong) UIView *maskView; @property (nonatomic, strong) NSMutableArray *arrayImage; - (void)showEffectChange:(CGPoint)pt; - (void)restore; - (void)screenShot; - (void)removeObserver; - (void)addObserver; @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/BBGestureBack/BBGestureBaseController.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import "BBGestureBaseController.h" #import #import "AppDelegate.h" #import "BBGestureBackConst.h" static char bbListenTabbarViewMove[] = "bbListenTabbarViewMove"; @interface BBGestureBaseController () @property (nonatomic,strong)UIBarButtonItem *bbBackBarItem; @end @implementation BBGestureBaseController - (id)init{ self = [super init]; if (self) { self.isEnablePanGesture = YES; self.blankType = BBPopTypeViewController; } return self; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; if (self.navigationController.viewControllers.count > 1) { self.navigationItem.leftBarButtonItem = self.bbBackBarItem; } } -(UIBarButtonItem *)bbBackBarItem{ if (!_bbBackBarItem) { UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [backBtn setImage:[UIImage imageNamed:@"bb_navigation_back"] forState:UIControlStateNormal]; backBtn.imageView.contentMode = UIViewContentModeCenter; [backBtn addTarget:self action:@selector(dismissSelf) forControlEvents:UIControlEventTouchUpInside]; _bbBackBarItem = [[UIBarButtonItem alloc]initWithCustomView:backBtn]; backBtn.frame = CGRectMake(0, 0, 44, 44); backBtn.contentEdgeInsets = UIEdgeInsetsMake(0, -25, 0,0); } return _bbBackBarItem; } - (void)dismissSelf{ switch (self.blankType) { case BBPopTypeViewController: [self bb_popViewController]; break; case BBPopTypeToRootViewController: [self bb_popToRootViewController]; break; default: break; } } -(void)bb_basePopViewController:(UIViewController *)viewController PopType:(BBPopType)popType{ AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; UIViewController *rootVC = appDelegate.window.rootViewController; UIViewController *presentedVC = rootVC.presentedViewController; appDelegate.gestureBaseView.hidden = NO; appDelegate.gestureBaseView.maskView.backgroundColor = [UIColor colorWithHue:0 saturation:0 brightness:0 alpha:kBBMaskingAlpha]; appDelegate.gestureBaseView.imgView.transform = CGAffineTransformMakeScale(kBBWindowToScale, kBBWindowToScale); [UIView animateWithDuration:kBBGestureSpeed animations:^{ rootVC.view.transform = CGAffineTransformMakeTranslation(([UIScreen mainScreen].bounds.size.width), 0); presentedVC.view.transform = CGAffineTransformMakeTranslation(([UIScreen mainScreen].bounds.size.width), 0); if (BBIS_IPHONEX && kBBIsOpenIphoneXStyle) { rootVC.view.layer.masksToBounds = YES; rootVC.view.layer.cornerRadius = kBBIphoneXStyleCorner; presentedVC.view.layer.masksToBounds = YES; presentedVC.view.layer.cornerRadius = kBBIphoneXStyleCorner; } } completion:^(BOOL finished) { switch (popType) { case BBPopTypeViewController: [self.navigationController popViewControllerAnimated:NO]; break; case BBPopTypeToViewController: [self.navigationController popToViewController:viewController animated:NO]; break; case BBPopTypeToRootViewController: [self.navigationController popToRootViewControllerAnimated:NO]; break; default: break; } rootVC.view.transform = CGAffineTransformIdentity; presentedVC.view.transform = CGAffineTransformIdentity; if (BBIS_IPHONEX && kBBIsOpenIphoneXStyle) { rootVC.view.layer.masksToBounds = NO; rootVC.view.layer.cornerRadius = 0; presentedVC.view.layer.masksToBounds = NO; presentedVC.view.layer.cornerRadius = 0; } appDelegate.gestureBaseView.hidden = YES; }]; } - (void)bb_popViewController{ [self bb_basePopViewController:nil PopType:BBPopTypeViewController]; } -(void)bb_popToRootViewController{ [self bb_basePopViewController:nil PopType:BBPopTypeToRootViewController]; } -(void)bb_popToViewController:(UIViewController *)viewController{ [self bb_basePopViewController:viewController PopType:BBPopTypeToViewController]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end @interface BBGestureBaseView() @property(nonatomic,weak)UIView *rootControllerView; @end @implementation BBGestureBaseView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.arrayImage = [NSMutableArray array]; self.backgroundColor = [UIColor blackColor]; self.imgView = [[UIImageView alloc] initWithFrame:self.bounds]; if (BBIS_IPHONEX && kBBIsOpenIphoneXStyle) { self.imgView.layer.masksToBounds = YES; self.imgView.layer.cornerRadius = kBBIphoneXStyleCorner; } self.maskView = [[UIView alloc] initWithFrame:self.bounds]; self.maskView.backgroundColor = [UIColor colorWithHue:0 saturation:0 brightness:0 alpha:kBBMaskingAlpha]; [self addSubview: self.imgView]; [self addSubview: self.maskView]; [self addObserver]; } return self; } - (void)removeObserver { [self.rootControllerView removeObserver:self forKeyPath:@"transform" context:bbListenTabbarViewMove]; } - (void)addObserver { self.rootControllerView = [AppDelegate shareAppDelegate].window.rootViewController.view; [self.rootControllerView addObserver:self forKeyPath:@"transform" options:NSKeyValueObservingOptionNew context:bbListenTabbarViewMove]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if (context == bbListenTabbarViewMove){ NSValue *value = [change objectForKey:NSKeyValueChangeNewKey]; CGAffineTransform newTransform = [value CGAffineTransformValue]; [self showEffectChange:CGPointMake(newTransform.tx, 0) ]; } } - (void)showEffectChange:(CGPoint)pt{ if (pt.x > 0){ _maskView.backgroundColor = [UIColor colorWithHue:0 saturation:0 brightness:0 alpha:-pt.x / ([UIScreen mainScreen].bounds.size.width) * kBBMaskingAlpha + kBBMaskingAlpha]; _imgView.transform = CGAffineTransformMakeScale(kBBWindowToScale + (pt.x / ([UIScreen mainScreen].bounds.size.width) * (1 - kBBWindowToScale)), kBBWindowToScale + (pt.x / ([UIScreen mainScreen].bounds.size.width) * (1 - kBBWindowToScale))); } if (pt.x < 0){ _maskView.backgroundColor = [UIColor colorWithHue:0 saturation:0 brightness:0 alpha:0.5]; _imgView.transform = CGAffineTransformIdentity; } } - (void)restore { if (_maskView && _imgView){ _maskView.backgroundColor = [UIColor colorWithHue:0 saturation:0 brightness:0 alpha:kBBMaskingAlpha]; _imgView.transform = CGAffineTransformMakeScale(kBBWindowToScale, kBBWindowToScale); } } - (void)screenShot{ AppDelegate *appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate; UIGraphicsBeginImageContextWithOptions(CGSizeMake([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height), YES, 0); [appDelegate.window.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); CGImageRef imageRef = viewImage.CGImage; UIImage *sendImage = [[UIImage alloc] initWithCGImage:imageRef]; self.imgView.image = sendImage; self.imgView.transform = CGAffineTransformMakeScale(kBBWindowToScale, kBBWindowToScale); } - (void)dealloc{ [self removeObserver]; } - (void)layoutSubviews{ [super layoutSubviews]; } @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/BBNavigation/BBNavigationController.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import @interface BBNavigationController : UINavigationController @property (strong ,nonatomic) NSMutableArray *arrayScreenshot; @property (nonatomic, strong) UIPanGestureRecognizer *panGesture; @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/BBNavigation/BBNavigationController.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import "BBNavigationController.h" #import "BBGestureBack.h" #import "AppDelegate.h" @interface BBNavigationController () @end @implementation BBNavigationController -(NSMutableArray *)arrayScreenshot{ if (!_arrayScreenshot) { _arrayScreenshot = [NSMutableArray array]; } return _arrayScreenshot; } - (void)viewDidLoad{ [super viewDidLoad]; //屏蔽系统的手势 self.interactivePopGestureRecognizer.enabled = !kBBIsCanleSystemPan; self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; _panGesture.delegate = self; [self.view addGestureRecognizer:_panGesture]; } - (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer { if (gestureRecognizer.view == self.view && [gestureRecognizer locationInView:self.view].x < (kBBDistanceToStart == 0 ? UIScreen.mainScreen.bounds.size.width : kBBDistanceToStart)) { BBGestureBaseController *topView = (BBGestureBaseController *)self.topViewController; if (!topView.isEnablePanGesture) return NO; else { CGPoint translate = [gestureRecognizer translationInView:self.view]; BOOL possible = translate.x != 0 && fabs(translate.y) == 0; if (possible) return YES; else return NO; return YES; } } return NO; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { if ([otherGestureRecognizer isKindOfClass:NSClassFromString(@"UIScrollViewPanGestureRecognizer")] || [otherGestureRecognizer isKindOfClass:NSClassFromString(@"UIPanGestureRecognizer")]|| [otherGestureRecognizer isKindOfClass:NSClassFromString(@"UIScrollViewPagingSwipeGestureRecognizer")]) { UIView *aView = otherGestureRecognizer.view; if ([aView isKindOfClass:[UIScrollView class]]) { UIScrollView *sv = (UIScrollView *)aView; if (sv.contentOffset.x==0) { if ([otherGestureRecognizer isKindOfClass:NSClassFromString(@"UIScrollViewPanGestureRecognizer")] && otherGestureRecognizer.state != UIGestureRecognizerStateBegan) { return NO; }else{ return YES; } } } return NO; } return YES; } - (void)handlePanGesture:(UIPanGestureRecognizer *)panGesture { AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; UIViewController *rootVC = appDelegate.window.rootViewController; UIViewController *presentedVC = rootVC.presentedViewController; if (self.viewControllers.count == 1) { return; } if (panGesture.state == UIGestureRecognizerStateBegan) { if (BBIS_IPHONEX && kBBIsOpenIphoneXStyle) { rootVC.view.layer.masksToBounds = YES; rootVC.view.layer.cornerRadius = kBBIphoneXStyleCorner; presentedVC.view.layer.masksToBounds = YES; presentedVC.view.layer.cornerRadius = kBBIphoneXStyleCorner; } appDelegate.gestureBaseView.hidden = NO; } else if (panGesture.state == UIGestureRecognizerStateChanged) { CGPoint point_inView = [panGesture translationInView:self.view]; if (point_inView.x >= kBBDistanceToPan) { rootVC.view.transform = CGAffineTransformMakeTranslation(point_inView.x - kBBDistanceToPan, 0); presentedVC.view.transform = CGAffineTransformMakeTranslation(point_inView.x - kBBDistanceToPan, 0); } } else if (panGesture.state == UIGestureRecognizerStateEnded) { CGPoint point_inView = [panGesture translationInView:self.view]; if (point_inView.x >= kBBDistanceToLeft) { [UIView animateWithDuration:kBBGestureSpeed animations:^{ rootVC.view.transform = CGAffineTransformMakeTranslation(([UIScreen mainScreen].bounds.size.width), 0); presentedVC.view.transform = CGAffineTransformMakeTranslation(([UIScreen mainScreen].bounds.size.width), 0); } completion:^(BOOL finished) { [self popViewControllerAnimated:NO]; rootVC.view.transform = CGAffineTransformIdentity; presentedVC.view.transform = CGAffineTransformIdentity; appDelegate.gestureBaseView.hidden = YES; }]; } else { [UIView animateWithDuration:kBBGestureSpeed animations:^{ rootVC.view.transform = CGAffineTransformIdentity; presentedVC.view.transform = CGAffineTransformIdentity; } completion:^(BOOL finished) { if (BBIS_IPHONEX && kBBIsOpenIphoneXStyle) { rootVC.view.layer.masksToBounds = NO; rootVC.view.layer.cornerRadius = 0; presentedVC.view.layer.masksToBounds = NO; presentedVC.view.layer.cornerRadius = 0; } appDelegate.gestureBaseView.hidden = YES; }]; } } } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { BBGestureBaseController *topView = (BBGestureBaseController *)self.topViewController; if (topView.isEnablePanGesture == NO) return NO; if (self.viewControllers.count <= 1) return NO; if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { CGPoint point = [touch locationInView:gestureRecognizer.view]; if (point.x < [UIScreen mainScreen].bounds.size.width) { return YES; } } return NO; } - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated { NSArray *arr = [super popToViewController:viewController animated:animated]; if (self.arrayScreenshot.count > arr.count){ for (int i = 0; i < arr.count; i++) { [self.arrayScreenshot removeLastObject]; } } return arr; } - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { if (self.viewControllers.count == 0) { return [super pushViewController:viewController animated:animated]; }else if (self.viewControllers.count >= 1) { viewController.hidesBottomBarWhenPushed = YES; } AppDelegate *appdelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; UIGraphicsBeginImageContextWithOptions(CGSizeMake(appdelegate.window.frame.size.width, appdelegate.window.frame.size.height), YES, 0); [appdelegate.window.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [self.arrayScreenshot addObject:viewImage]; appdelegate.gestureBaseView.imgView.image = viewImage; [super pushViewController:viewController animated:animated]; } - (UIViewController *)popViewControllerAnimated:(BOOL)animated { AppDelegate *appdelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; [self.arrayScreenshot removeLastObject]; UIImage *image = [self.arrayScreenshot lastObject]; if (image) appdelegate.gestureBaseView.imgView.image = image; UIViewController *viewController = [super popViewControllerAnimated:animated]; return viewController; } - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated { AppDelegate *appdelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; if (self.arrayScreenshot.count > 2) { [self.arrayScreenshot removeObjectsInRange:NSMakeRange(1, self.arrayScreenshot.count - 1)]; } UIImage *image = [self.arrayScreenshot lastObject]; if (image) appdelegate.gestureBaseView.imgView.image = image; return [super popToRootViewControllerAnimated:animated]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/BBTabBar/BBTabBarController.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import @interface BBTabBarController : UITabBarController @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/BBTabBar/BBTabBarController.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. #import "BBTabBarController.h" #import "BBNavigationController.h" #import "HomeViewController.h" #import "UserViewController.h" @interface BBTabBarController () @end @implementation BBTabBarController - (void)viewDidLoad { [super viewDidLoad]; [self setUpAllChildViewController]; //iOS 闪动问题,明白了一看就懂 [[UITabBar appearance] setTranslucent:NO]; [[UINavigationBar appearance]setTranslucent:NO]; self.tabBar.tintColor = [UIColor blueColor]; self.tabBar.barTintColor = [UIColor whiteColor]; } - (void)setUpAllChildViewController { HomeViewController *home = [[HomeViewController alloc] init]; [self setUpOneChildViewController:home image:[UIImage imageNamed:@"TabBarHomeNormal"] selectedImage:[UIImage imageNamed:@"TabBarHomeSelected"] title:@"Home"]; UserViewController *user = [[UserViewController alloc] init]; [self setUpOneChildViewController:user image:[UIImage imageNamed:@"TabBarUserNormal"] selectedImage:[UIImage imageNamed:@"TabBarUserSelected"] title:@"User"]; } - (void)setUpOneChildViewController:(UIViewController *)vc image:(UIImage *)image selectedImage:(UIImage *)selectedImage title:(NSString *)title { vc.title = title; vc.tabBarItem.image = image; vc.tabBarItem.selectedImage = selectedImage; BBNavigationController *nav = [[BBNavigationController alloc] initWithRootViewController:vc]; [self addChildViewController:nav]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/BBUserGuider/BBUserGuiderController.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import #import "BBGestureBaseController.h" NS_ASSUME_NONNULL_BEGIN @interface BBUserGuiderController : BBGestureBaseController @end NS_ASSUME_NONNULL_END ================================================ FILE: BBGestureBack_Full_oc/Classes/Main/BBUserGuider/BBUserGuiderController.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import "BBUserGuiderController.h" #import "AppDelegate.h" #import "BBGestureBack.h" @interface BBUserGuiderController () @property (nonatomic,strong)UIScrollView *userGuiderScrollView; @property (nonatomic,strong)UIButton *startBtn; @property (nonatomic,weak)UIImageView *userGuiderImgView; @end @implementation BBUserGuiderController - (void)viewDidLoad { [super viewDidLoad]; [self.view addSubview:self.userGuiderScrollView]; } - (UIScrollView *)userGuiderScrollView{ if (!_userGuiderScrollView) { _userGuiderScrollView=[[UIScrollView alloc] initWithFrame:self.view.bounds]; NSString *fileStr = [[NSBundle mainBundle] pathForResource:@"BBUserGuider" ofType:@"bundle"]; NSBundle *imageBundle=[NSBundle bundleWithPath:fileStr]; for (int i=0; i (kBBUserGuiderImgCount - 1)*(self.view.frame.size.width)) { [self startClick]; } } //此处为 替换 rootViewController - (void)startClick{ [[AppDelegate shareAppDelegate] setupRootViewController:[[BBTabBarController alloc] init]]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end ================================================ FILE: BBGestureBack_Full_oc/Classes/Resource/BBUserGuider.bundle/Root.plist ================================================ StringsTable Root PreferenceSpecifiers Type PSGroupSpecifier Title Group Type PSTextFieldSpecifier Title Name Key name_preference DefaultValue IsSecure KeyboardType Alphabet AutocapitalizationType None AutocorrectionType No Type PSToggleSwitchSpecifier Title Enabled Key enabled_preference DefaultValue Type PSSliderSpecifier Key slider_preference DefaultValue 0.5 MinimumValue 0 MaximumValue 1 MinimumValueImage MaximumValueImage ApplicationGroupContainerIdentifier ================================================ FILE: BBGestureBack_Full_oc/Classes/User/Index/UserViewController.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import #import "BBGestureBaseController.h" @interface UserViewController : BBGestureBaseController @end ================================================ FILE: BBGestureBack_Full_oc/Classes/User/Index/UserViewController.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import "UserViewController.h" @interface UserViewController () @end @implementation UserViewController - (void)viewDidLoad { [super viewDidLoad]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end ================================================ FILE: BBGestureBack_Full_oc/Info.plist ================================================ UIUserInterfaceStyle Light CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: BBGestureBack_Full_oc/main.m ================================================ // // main.m // BBGestureBack // // Created by user on 2018/3/17. // Copyright © 2018年 Bonway. All rights reserved. // #import #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } ================================================ FILE: BBGestureBack_Full_swift/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "size" : "20x20", "idiom" : "iphone", "filename" : "20@2x-1.png", "scale" : "2x" }, { "size" : "20x20", "idiom" : "iphone", "filename" : "20@3x.png", "scale" : "3x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "29@2x-1.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "29@3x.png", "scale" : "3x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "40@2x-1.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "40@3x.png", "scale" : "3x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "60@2x.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "60@3x.png", "scale" : "3x" }, { "size" : "20x20", "idiom" : "ipad", "filename" : "20@1x.png", "scale" : "1x" }, { "size" : "20x20", "idiom" : "ipad", "filename" : "20@2x.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "29@1x.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "29@2x.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "40@1x.png", "scale" : "1x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "40@2x.png", "scale" : "2x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "76@1x.png", "scale" : "1x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "76@2x.png", "scale" : "2x" }, { "size" : "83.5x83.5", "idiom" : "ipad", "filename" : "83.5@2x.png", "scale" : "2x" }, { "size" : "1024x1024", "idiom" : "ios-marketing", "filename" : "1024@1x.png", "scale" : "1x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_swift/Assets.xcassets/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_swift/Assets.xcassets/Navigation/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_swift/Assets.xcassets/Navigation/bb_navigation_back.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "bb_navigation_back@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "bb_navigation_back@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_swift/Assets.xcassets/TabBar/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_swift/Assets.xcassets/TabBar/TabBarHomeNormal.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarHomeNormal@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarHomeNormal@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_swift/Assets.xcassets/TabBar/TabBarHomeSelected.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarHomeSelected@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarHomeSelected@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_swift/Assets.xcassets/TabBar/TabBarUserNormal.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarUserNormal@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarUserNormal@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_swift/Assets.xcassets/TabBar/TabBarUserSelected.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarUserSelected@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarUserSelected@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_swift/Assets.xcassets/logo.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "logo@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "logo@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_Full_swift/Base.lproj/LaunchScreen.storyboard ================================================ ================================================ FILE: BBGestureBack_Full_swift/Classes/Home/Index/HomeViewController.swift ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // import UIKit class HomeViewController: BBGestureBaseController { override func viewDidLoad() { super.viewDidLoad() //iOS12.1 UINavigationController + UITabBarController( UITabBar 磨砂),在 系统的 popViewControllerAnimated 会遇到tabbar布局错乱的问题,所以需添加以下方法。 //当然你也可以自己选择添加到底层的navigationController或 baseViewController中,进行处理。 UITabBar.appearance().isTranslucent = false //--------------------------------------- let btn = UIButton() btn.frame = CGRect(x: 100, y: 100, width: 100, height: 100) btn.backgroundColor = UIColor.blue btn.setTitle("sysPush", for: UIControlState.normal) btn.addTarget(self, action: #selector(pushClick), for: UIControlEvents.touchUpInside) self.view.addSubview(btn) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } @objc func pushClick() { self.navigationController?.pushViewController(ViewController(), animated: true) } } ================================================ FILE: BBGestureBack_Full_swift/Classes/Home/ViewController.swift ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // import UIKit class ViewController: BBGestureBaseController { override func viewDidLoad() { super.viewDidLoad() let popBtn = UIButton() popBtn.frame = CGRect(x: 100, y: 100, width: 150, height: 50) popBtn.backgroundColor = UIColor.red popBtn.setTitle("BBPop", for: UIControlState.normal) popBtn.addTarget(self, action: #selector(popClick), for: UIControlEvents.touchUpInside) self.view.addSubview(popBtn) let popToVCBtn = UIButton() popToVCBtn.frame = CGRect(x: 100, y: 200, width: 150, height: 50) popToVCBtn.backgroundColor = UIColor.red popToVCBtn.setTitle("BBPopToVC", for: UIControlState.normal) popToVCBtn.addTarget(self, action: #selector(popToClick), for: UIControlEvents.touchUpInside) self.view.addSubview(popToVCBtn) let popToRootBtn = UIButton() popToRootBtn.frame = CGRect(x: 100, y: 300, width: 150, height: 50) popToRootBtn.backgroundColor = UIColor.red popToRootBtn.setTitle("BBPopToRootVC", for: UIControlState.normal) popToRootBtn.addTarget(self, action: #selector(popToRootClick), for: UIControlEvents.touchUpInside) self.view.addSubview(popToRootBtn) let sysPopBtn = UIButton() sysPopBtn.frame = CGRect(x: 100, y: 400, width: 150, height: 50) sysPopBtn.backgroundColor = UIColor.blue sysPopBtn.setTitle("sysPop", for: UIControlState.normal) sysPopBtn.addTarget(self, action: #selector(sysPopClick), for: UIControlEvents.touchUpInside) self.view.addSubview(sysPopBtn) } @objc func popClick() { self.bb_popViewController(); } @objc func popToClick() { self.bb_popToViewController(viewController: (self.navigationController?.viewControllers[0])!) } @objc func popToRootClick() { self.bb_popToRootViewController() } @objc func sysPopClick() { self.navigationController?.popViewController(animated: true) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } ================================================ FILE: BBGestureBack_Full_swift/Classes/Main/AppDelegate.swift ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var gestureBaseView: BBGestureBaseView? var tabBarViewController : BBTabBarController? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { window = UIWindow(frame: UIScreen.main.bounds) window?.backgroundColor = UIColor.white setupRootController(); window?.makeKeyAndVisible() return true } func applicationWillResignActive(_ application: UIApplication) { // 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. // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. } func applicationDidEnterBackground(_ application: UIApplication) { // 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. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } func applicationWillEnterForeground(_ application: UIApplication) { // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. } func applicationDidBecomeActive(_ application: UIApplication) { // 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. } func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } private func setupRootController(){ if !UserDefaults.standard.bool(forKey: kBBFirstLaunch) { UserDefaults.standard.set(true, forKey: kBBFirstLaunch) setupRootViewController(rootViewController: BBUserGuiderController()) }else{ setupRootViewController(rootViewController: BBTabBarController()) } } public func setupRootViewController(rootViewController:UIViewController) { rootViewController.modalTransitionStyle = .flipHorizontal UIView.transition(with: window!, duration: 0.5, options: .transitionCrossDissolve, animations: { let oldState = UIView.areAnimationsEnabled UIView.setAnimationsEnabled(false) UIApplication.shared.keyWindow?.rootViewController = rootViewController UIView.setAnimationsEnabled(oldState) }, completion: { completed in }) if gestureBaseView == nil { window?.rootViewController = rootViewController gestureBaseView = BBGestureBaseView.init(frame: CGRect(x: 0, y: 0, width: (window?.frame.size.width)!, height: (window?.frame.size.height)!)) window?.insertSubview(gestureBaseView!, at: 0) }else{ gestureBaseView!.removeObserver() window?.rootViewController = rootViewController gestureBaseView!.addObserver() window?.sendSubview(toBack: gestureBaseView!) } gestureBaseView?.isHidden = true; } } ================================================ FILE: BBGestureBack_Full_swift/Classes/Main/BBGestureBack/BBGestureBackConst.swift ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // import UIKit func BBColor(rgbValue: UInt) -> UIColor { return UIColor( red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgbValue & 0x0000FF) / 255.0, alpha: CGFloat(1.0) ) } let bbScreenWidth = UIScreen.main.bounds.width /// 屏幕的高度 let bbScreenHeight = UIScreen.main.bounds.height let bb_IsIphone = (bbScreenHeight - 812 == 0 || bbScreenHeight - 896 == 0) ? true : false //The ifrst user guider image (第一次引导图) let kBBFirstLaunch:String = "BBFirstLaunch" // Open iPhone X Style.(是否打开Phone X风格) let kBBIsOpenIphoneXStyle:Bool = true // The default is 40, iPhone X Style Corner。(默认为40,iPhone X 圆角弧度) let kBBIphoneXStyleCorner:CGFloat! = 40 // The default is 3, User guider image count。(默认为3,用户引导图总页数) let kBBUserGuiderImgCount:Int = 3 // Screen system to return gesture.(是否屏蔽系统返回手势) let kBBIsCanleSystemPan:Bool = true // The distance from the left can be automatically returned.(距离左边多少距离,可以自动返回) let kBBDistanceToLeft:CGFloat! = 70.0 // BottomView Scaling.(底层缩放比例) let kBBWindowToScale:CGFloat! = 0.95 // BottomView alpha.(底层透明度) let kBBMaskingAlpha:CGFloat! = 0.9 // Automatic return speed.(自动返回速度) let kBBGestureSpeed:TimeInterval! = 0.3 // Range of drag and drop.(拖拽的范围,大于此值才有效果) let kBBDistanceToPan:CGFloat! = 10 // The default is 0, 0 for full screen return, and also for distance.(默认为0,0为全屏返回,也可指定距离) let kBBDistanceToStart:CGFloat! = 100 ================================================ FILE: BBGestureBack_Full_swift/Classes/Main/BBGestureBack/BBGestureBaseController.swift ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // import UIKit enum BBPopType:Int{ case viewController = 0 case toViewController case toRootViewController } class BBGestureBaseController: UIViewController { /** 用了自定义的手势返回,则系统的手势返回屏蔽 不用自定义的手势返回,则系统的手势返回启用 */ var isEnablePanGesture : Bool var blankType: BBPopType lazy var bbBackBarItem : UIBarButtonItem = { let backBtn = UIButton(type: .custom) backBtn.setImage(UIImage(named: "bb_navigation_back"), for: .normal) backBtn.imageView?.contentMode = .center backBtn.addTarget(self, action: #selector(dismissSelf), for: .touchUpInside) backBtn.frame = CGRect(x: 0, y: 0, width: 44, height: 44) backBtn.contentEdgeInsets = UIEdgeInsetsMake(0, -25, 0, 0) let bbBackBarItem = UIBarButtonItem(customView: backBtn) return bbBackBarItem }() @objc private func dismissSelf(){ switch blankType { case .viewController: bb_popViewController() break case .toRootViewController: bb_popToRootViewController() break default: break } } override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { isEnablePanGesture = true blankType = .viewController; super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.white if navigationController?.viewControllers.count ?? 0 > 1 { navigationItem.leftBarButtonItem = bbBackBarItem } } private func bb_basePopViewController(viewController: UIViewController?,popType: BBPopType) { let appDelegate = UIApplication.shared.delegate as! AppDelegate let rootVC = appDelegate.window?.rootViewController let presentedVC = rootVC?.presentedViewController appDelegate.gestureBaseView?.isHidden = false; appDelegate.gestureBaseView?.maskedView?.backgroundColor = UIColor.init(hue: 0, saturation: 0, brightness: 0, alpha: kBBMaskingAlpha) appDelegate.gestureBaseView?.imgView?.transform = CGAffineTransform(scaleX: kBBWindowToScale, y: kBBWindowToScale); UIView.animate(withDuration: kBBGestureSpeed, animations: { rootVC?.view.transform = CGAffineTransform(translationX: (UIScreen.main.bounds.size.width), y: 0); presentedVC?.view.transform = CGAffineTransform(translationX: (UIScreen.main.bounds.size.width), y: 0); }) { (finished) in switch popType { case .viewController: self.navigationController?.popViewController(animated: false) case .toViewController: self.navigationController?.popToViewController(viewController!, animated: false) case .toRootViewController: self.navigationController?.popToRootViewController(animated: false) } rootVC?.view.transform = CGAffineTransform.identity; presentedVC?.view.transform = CGAffineTransform.identity; appDelegate.gestureBaseView?.isHidden = true; } } func bb_popViewController() { self.bb_basePopViewController(viewController: nil, popType: BBPopType.viewController) } func bb_popToViewController(viewController: UIViewController) { self.bb_basePopViewController(viewController: viewController, popType: BBPopType.toViewController) } func bb_popToRootViewController() { self.bb_basePopViewController(viewController: nil, popType: BBPopType.toRootViewController) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } class BBGestureBaseView: UIView { var imgView : UIImageView? var maskedView : UIView? var arrayImage : NSMutableArray? var rootControllerView: UIView? static var bbListenTabbarViewMove = Array("bbListenTabbarViewMove"); override init(frame:CGRect){ super.init(frame: frame) arrayImage = NSMutableArray.init() backgroundColor = UIColor.black imgView = UIImageView.init(frame: self.bounds) if (bb_IsIphone && kBBIsOpenIphoneXStyle) { imgView!.layer.masksToBounds = true; imgView!.layer.cornerRadius = kBBIphoneXStyleCorner; } maskedView = UIView.init(frame: self.bounds) maskedView?.backgroundColor = UIColor.init(red: 0, green: 0, blue: 0, alpha: 0.4) self.addSubview(imgView!) self.addSubview(maskedView!) addObserver() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if (context == &BBGestureBaseView.bbListenTabbarViewMove) { let value = change?[NSKeyValueChangeKey.newKey] as! NSValue let newTransform = value.cgAffineTransformValue showEffectChange(pt: CGPoint(x: newTransform.tx, y: 0)) } } override func layoutSubviews() { super.layoutSubviews() } public func showEffectChange(pt:CGPoint) { if (pt.x > 0) { maskedView?.backgroundColor = UIColor.init(hue: 0, saturation: 0, brightness: 0, alpha: -pt.x / UIScreen.main.bounds.width * 0.4 + 0.4) self.imgView?.transform = CGAffineTransform(scaleX: kBBWindowToScale + (pt.x / UIScreen.main.bounds.width * (1 - kBBWindowToScale)), y: kBBWindowToScale + (pt.x / UIScreen.main.bounds.width * (1 - kBBWindowToScale))) } } public func restore() { if ((maskedView != nil) && (imgView != nil)) { maskedView?.backgroundColor = UIColor.init(hue: 0, saturation: 0, brightness: 0, alpha: 0.4) imgView?.transform = CGAffineTransform(scaleX: kBBWindowToScale, y: kBBWindowToScale) } } public func screenShot() { let appDelegate = UIApplication.shared.delegate as! AppDelegate UIGraphicsBeginImageContextWithOptions(CGSize(width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height), true, 0) appDelegate.window?.layer.render(in: UIGraphicsGetCurrentContext()!) let viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext() let imageRef = viewImage?.cgImage let sendImage = UIImage.init(cgImage: imageRef!) imgView?.image = sendImage imgView?.transform = CGAffineTransform(scaleX: kBBWindowToScale, y: kBBWindowToScale) } public func removeObserver(){ rootControllerView?.removeObserver(self, forKeyPath: "transform", context: &BBGestureBaseView.bbListenTabbarViewMove) } public func addObserver(){ rootControllerView = UIApplication.shared.delegate?.window??.rootViewController?.view rootControllerView?.addObserver(self, forKeyPath: "transform", options: NSKeyValueObservingOptions.new, context: &BBGestureBaseView.bbListenTabbarViewMove) } deinit { removeObserver() } } ================================================ FILE: BBGestureBack_Full_swift/Classes/Main/BBNavigation/BBNavigationController.swift ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // import UIKit class BBNavigationController: UINavigationController,UIGestureRecognizerDelegate,UINavigationControllerDelegate{ var arrayScreenshot : NSMutableArray! var panGesture : UIPanGestureRecognizer? var webURL : String = "" override func viewDidLoad() { super.viewDidLoad() self.interactivePopGestureRecognizer?.isEnabled = !kBBIsCanleSystemPan arrayScreenshot = NSMutableArray.init() panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture(_:))) view.addGestureRecognizer(panGesture!) panGesture?.delegate = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { if (gestureRecognizer.view == self.view && gestureRecognizer.location(in: view).x < (kBBDistanceToStart == 0 ? UIScreen.main.bounds.width : kBBDistanceToStart)) { let topView = topViewController as! BBGestureBaseController if (!topView.isEnablePanGesture) { return false; } else { let gesture = gestureRecognizer as! UIPanGestureRecognizer let translate = gesture.translation(in :view) let possible = translate.x != 0 && fabs(translate.y) == 0; if (possible){ return true }else { return false } } } return false } func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { if otherGestureRecognizer.isKind(of: NSClassFromString("UIScrollViewPanGestureRecognizer")!) || otherGestureRecognizer.isKind(of: NSClassFromString("UIPanGestureRecognizer")!) || otherGestureRecognizer.isKind(of: NSClassFromString("UIScrollViewPagingSwipeGestureRecognizer")!) { let aView = otherGestureRecognizer.view if aView!.isKind(of: UIScrollView.self) { let sv = aView as! UIScrollView if sv.contentOffset.x == 0 { if otherGestureRecognizer.isKind(of: NSClassFromString("UIScrollViewPanGestureRecognizer")!) && otherGestureRecognizer.state != .began { return false } return true } } return false } return true } @objc func handlePanGesture(_ panGesture : UIPanGestureRecognizer) { let appDelegate = UIApplication.shared.delegate as! AppDelegate let rootVC = appDelegate.window?.rootViewController let presentedVC = rootVC?.presentedViewController if (self.viewControllers.count == 1) { return } if (panGesture.state == UIGestureRecognizerState.began) { if (bb_IsIphone && kBBIsOpenIphoneXStyle) { rootVC?.view.layer.masksToBounds = true; rootVC?.view.layer.cornerRadius = kBBIphoneXStyleCorner; presentedVC?.view.layer.masksToBounds = true; presentedVC?.view.layer.cornerRadius = kBBIphoneXStyleCorner; } appDelegate.gestureBaseView?.isHidden = false; } else if (panGesture.state == UIGestureRecognizerState.changed) { let point_inView = panGesture.translation(in: view) if (point_inView.x >= 10) { rootVC?.view.transform = CGAffineTransform(translationX: point_inView.x - 10, y: 0) presentedVC?.view.transform = CGAffineTransform(translationX: point_inView.x - 10, y: 0) } } else if (panGesture.state == UIGestureRecognizerState.ended) { let point_inView = panGesture.translation(in: view) if (point_inView.x >= kBBDistanceToLeft) { UIView.animate(withDuration: 0.3, animations: { rootVC?.view.transform = CGAffineTransform(translationX: UIScreen.main.bounds.size.width, y: 0) presentedVC?.view.transform = CGAffineTransform(translationX: UIScreen.main.bounds.size.width, y: 0) }, completion: { (true) in self.popViewController(animated: false) rootVC?.view.transform = CGAffineTransform.identity presentedVC?.view.transform = CGAffineTransform.identity appDelegate.gestureBaseView?.isHidden = true }) } else { UIView.animate(withDuration: 0.3, animations: { rootVC?.view.transform = CGAffineTransform.identity presentedVC?.view.transform = CGAffineTransform.identity }, completion: { (true) in if (bb_IsIphone && kBBIsOpenIphoneXStyle) { rootVC?.view.layer.masksToBounds = false; rootVC?.view.layer.cornerRadius = 0; presentedVC?.view.layer.masksToBounds = false; presentedVC?.view.layer.cornerRadius = 0; } appDelegate.gestureBaseView?.isHidden = true }) } } } override func pushViewController(_ viewController: UIViewController, animated: Bool) { if (viewControllers.count == 0) { return super.pushViewController(viewController, animated: animated) }else if (viewControllers.count>=1) { viewController.hidesBottomBarWhenPushed = true//隐藏二级页面的tabbar } let appDelegate = UIApplication.shared.delegate as! AppDelegate UIGraphicsBeginImageContextWithOptions(CGSize(width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height), true, 0); appDelegate.window?.layer.render(in: UIGraphicsGetCurrentContext()!) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() arrayScreenshot.add(image!) appDelegate.gestureBaseView?.imgView?.image = image super.pushViewController(viewController, animated: animated) } @discardableResult override func popViewController(animated: Bool) -> UIViewController? { let appDelegate = UIApplication.shared.delegate as! AppDelegate arrayScreenshot.removeLastObject() let image = arrayScreenshot.lastObject if (image != nil) { appDelegate.gestureBaseView?.imgView?.image = image as! UIImage?; } return super.popViewController(animated: animated) } override func popToRootViewController(animated: Bool) -> [UIViewController]? { let appDelegate = UIApplication.shared.delegate as! AppDelegate if (arrayScreenshot.count > 2) { arrayScreenshot.removeObjects(in: NSMakeRange(1, arrayScreenshot.count - 1)) } let image = arrayScreenshot.lastObject if (image != nil) { appDelegate.gestureBaseView?.imgView?.image = image as! UIImage? } return super.popToRootViewController(animated: animated) } @discardableResult override func popToViewController(_ viewController: UIViewController, animated: Bool) -> [UIViewController]? { let arr = super.popToViewController(viewController, animated: animated) if (self.arrayScreenshot.count > (arr?.count)!) { for _ in 0 ..< (arr?.count)! { arrayScreenshot.removeLastObject() } } return arr; } } ================================================ FILE: BBGestureBack_Full_swift/Classes/Main/BBTabBar/BBTabBarController.swift ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // import UIKit class BBTabBarController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() setUpAllChildViewController() //iOS 闪动问题,明白了一看就懂 UITabBar.appearance().isTranslucent = false UINavigationBar.appearance().isTranslucent = false self.tabBar.tintColor = UIColor.blue self.tabBar.barTintColor = UIColor .white } func setUpAllChildViewController() { setUpOneChildViewController(vc: HomeViewController(), image: UIImage(named: "TabBarHomeNormal")!, selectedImage: UIImage(named: "TabBarHomeSelected")!, title: "Home") setUpOneChildViewController(vc: UserViewController(), image: UIImage(named: "TabBarUserNormal")!, selectedImage: UIImage(named: "TabBarUserSelected")!, title: "User") } func setUpOneChildViewController(vc:UIViewController,image:UIImage,selectedImage:UIImage,title:String) { vc.title = title vc.tabBarItem.image = image vc.tabBarItem.selectedImage = image let navVC = BBNavigationController(rootViewController: vc) addChildViewController(navVC) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } ================================================ FILE: BBGestureBack_Full_swift/Classes/Main/BBUserGuider/BBUserGuiderController.swift ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // import UIKit class BBUserGuiderController: BBGestureBaseController { lazy var userGuiderScrollView: UIScrollView = { let userGuiderScrollView = UIScrollView(frame: view.bounds) let fileStr = Bundle.main.path(forResource: "BBUserGuider", ofType: "bundle") let imageBundle = Bundle(path: fileStr!) for i in 0.. CGFloat(kBBUserGuiderImgCount - 1)*(view.frame.size.width) { startClick() } } } ================================================ FILE: BBGestureBack_Full_swift/Classes/Resource/BBUserGuider.bundle/Root.plist ================================================ StringsTable Root PreferenceSpecifiers Type PSGroupSpecifier Title Group Type PSTextFieldSpecifier Title Name Key name_preference DefaultValue IsSecure KeyboardType Alphabet AutocapitalizationType None AutocorrectionType No Type PSToggleSwitchSpecifier Title Enabled Key enabled_preference DefaultValue Type PSSliderSpecifier Key slider_preference DefaultValue 0.5 MinimumValue 0 MaximumValue 1 MinimumValueImage MaximumValueImage ApplicationGroupContainerIdentifier ================================================ FILE: BBGestureBack_Full_swift/Classes/User/Index/UserViewController.swift ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // import UIKit class UserViewController: BBGestureBaseController { override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } ================================================ FILE: BBGestureBack_Full_swift/Info.plist ================================================ UIUserInterfaceStyle Light CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: BBGestureBack_SysFull_oc/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "size" : "20x20", "idiom" : "iphone", "filename" : "20@2x-1.png", "scale" : "2x" }, { "size" : "20x20", "idiom" : "iphone", "filename" : "20@3x.png", "scale" : "3x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "29@2x-1.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "29@3x.png", "scale" : "3x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "40@2x-1.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "40@3x.png", "scale" : "3x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "60@2x.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "60@3x.png", "scale" : "3x" }, { "size" : "20x20", "idiom" : "ipad", "filename" : "20@1x.png", "scale" : "1x" }, { "size" : "20x20", "idiom" : "ipad", "filename" : "20@2x.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "29@1x.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "29@2x.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "40@1x.png", "scale" : "1x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "40@2x.png", "scale" : "2x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "76@1x.png", "scale" : "1x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "76@2x.png", "scale" : "2x" }, { "size" : "83.5x83.5", "idiom" : "ipad", "filename" : "83.5@2x.png", "scale" : "2x" }, { "size" : "1024x1024", "idiom" : "ios-marketing", "filename" : "1024@1x.png", "scale" : "1x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_oc/Assets.xcassets/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_oc/Assets.xcassets/TabBar/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_oc/Assets.xcassets/TabBar/TabBarHomeNormal.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarHomeNormal@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarHomeNormal@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" }, "properties" : { "template-rendering-intent" : "original" } } ================================================ FILE: BBGestureBack_SysFull_oc/Assets.xcassets/TabBar/TabBarHomeSelected.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarHomeSelected@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarHomeSelected@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_oc/Assets.xcassets/TabBar/TabBarUserNormal.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarUserNormal@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarUserNormal@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" }, "properties" : { "template-rendering-intent" : "original" } } ================================================ FILE: BBGestureBack_SysFull_oc/Assets.xcassets/TabBar/TabBarUserSelected.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarUserSelected@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarUserSelected@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_oc/Assets.xcassets/logo.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "logo@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "logo@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_oc/Base.lproj/LaunchScreen.storyboard ================================================ ================================================ FILE: BBGestureBack_SysFull_oc/Classes/Home/Index/HomeViewController.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import @interface HomeViewController : UIViewController @end ================================================ FILE: BBGestureBack_SysFull_oc/Classes/Home/Index/HomeViewController.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import "HomeViewController.h" #import "ViewController.h" @interface HomeViewController () @end @implementation HomeViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; UIButton *sysBtn = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; sysBtn.backgroundColor = [UIColor blueColor]; [sysBtn setTitle:@"sysPush" forState:UIControlStateNormal]; [sysBtn addTarget:self action:@selector(sysPushClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:sysBtn]; } - (void)sysPushClick { [self.navigationController pushViewController:[ViewController new] animated:YES]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end ================================================ FILE: BBGestureBack_SysFull_oc/Classes/Home/ViewController.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import @interface ViewController : UIViewController @end ================================================ FILE: BBGestureBack_SysFull_oc/Classes/Home/ViewController.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //iOS12.1 UINavigationController + UITabBarController( UITabBar 磨砂),在 系统的 popViewControllerAnimated 会遇到tabbar布局错乱的问题,所以需添加以下方法。 //当然你也可以自己选择添加到底层的navigationController中,进行处理。 [[UITabBar appearance]setTranslucent:NO]; //--------------------------------------- self.view.backgroundColor = [UIColor whiteColor]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end ================================================ FILE: BBGestureBack_SysFull_oc/Classes/Main/AppDelegate.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import @interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @end ================================================ FILE: BBGestureBack_SysFull_oc/Classes/Main/AppDelegate.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import "AppDelegate.h" #import "BBTabBarController.h" #import "BBNavigationController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.backgroundColor = [UIColor whiteColor]; self.window.rootViewController = [[BBTabBarController alloc] init];; [self.window makeKeyAndVisible]; return YES; } - (void)applicationWillResignActive:(UIApplication *)application { // 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. // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. } - (void)applicationDidEnterBackground:(UIApplication *)application { // 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. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } - (void)applicationWillEnterForeground:(UIApplication *)application { // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. } - (void)applicationDidBecomeActive:(UIApplication *)application { // 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. } - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } @end ================================================ FILE: BBGestureBack_SysFull_oc/Classes/Main/BBNavigation/BBNavigationController.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import @interface BBNavigationController : UINavigationController - (void)addFullScreenPopBlackListItem:(UIViewController *)viewController; - (void)removeFromFullScreenPopBlackList:(UIViewController *)viewController; @end ================================================ FILE: BBGestureBack_SysFull_oc/Classes/Main/BBNavigation/BBNavigationController.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import "BBNavigationController.h" @interface BBNavigationController () @property(nonatomic, strong) NSMutableArray *blackList; @end @implementation BBNavigationController #pragma mark - Lazy load - (NSMutableArray *)blackList { if (!_blackList) { _blackList = [NSMutableArray array]; } return _blackList; } #pragma mark - Public - (void)addFullScreenPopBlackListItem:(UIViewController *)viewController { if (!viewController) { return ; } [self.blackList addObject:viewController]; } - (void)removeFromFullScreenPopBlackList:(UIViewController *)viewController { for (UIViewController *vc in self.blackList) { if (vc == viewController) { [self.blackList removeObject:vc]; } } } #pragma mark - Life cycle - (void)viewDidLoad { [super viewDidLoad]; id target = self.interactivePopGestureRecognizer.delegate; SEL handler = NSSelectorFromString(@"handleNavigationTransition:"); UIView *targetView = self.interactivePopGestureRecognizer.view; UIPanGestureRecognizer * fullScreenGes = [[UIPanGestureRecognizer alloc]initWithTarget:target action:handler]; fullScreenGes.delegate = self; [targetView addGestureRecognizer:fullScreenGes]; [self.interactivePopGestureRecognizer setEnabled:NO]; } #pragma mark - UIGestureRecognizerDelegate - (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer { for (UIViewController *viewController in self.blackList) { if ([self topViewController] == viewController) { return NO; } } if ([[self valueForKey:@"_isTransitioning"] boolValue]) { return NO; } CGPoint translation = [gestureRecognizer translationInView:gestureRecognizer.view]; if (translation.x <= 0) { return NO; } return self.childViewControllers.count == 1 ? NO : YES; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end ================================================ FILE: BBGestureBack_SysFull_oc/Classes/Main/BBTabBar/BBTabBarController.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import @interface BBTabBarController : UITabBarController @end ================================================ FILE: BBGestureBack_SysFull_oc/Classes/Main/BBTabBar/BBTabBarController.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. #import "BBTabBarController.h" #import "BBNavigationController.h" #import "HomeViewController.h" #import "UserViewController.h" @interface BBTabBarController () @end @implementation BBTabBarController - (void)viewDidLoad { [super viewDidLoad]; [self setUpAllChildViewController]; } - (void)setUpAllChildViewController { HomeViewController *home = [[HomeViewController alloc] init]; [self setUpOneChildViewController:home image:[UIImage imageNamed:@"TabBarHomeNormal"] selectedImage:[UIImage imageNamed:@"TabBarHomeSelected"] title:@"Home"]; UserViewController *user = [[UserViewController alloc] init]; [self setUpOneChildViewController:user image:[UIImage imageNamed:@"TabBarUserNormal"] selectedImage:[UIImage imageNamed:@"TabBarUserSelected"] title:@"User"]; } - (void)setUpOneChildViewController:(UIViewController *)vc image:(UIImage *)image selectedImage:(UIImage *)selectedImage title:(NSString *)title { vc.title = title; vc.tabBarItem.image = image; vc.tabBarItem.selectedImage = selectedImage; BBNavigationController *nav = [[BBNavigationController alloc] initWithRootViewController:vc]; [self addChildViewController:nav]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end ================================================ FILE: BBGestureBack_SysFull_oc/Classes/User/Index/UserViewController.h ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import @interface UserViewController : UIViewController @end ================================================ FILE: BBGestureBack_SysFull_oc/Classes/User/Index/UserViewController.m ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // #import "UserViewController.h" @interface UserViewController () @end @implementation UserViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end ================================================ FILE: BBGestureBack_SysFull_oc/Info.plist ================================================ UIUserInterfaceStyle Light CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: BBGestureBack_SysFull_oc/main.m ================================================ // // main.m // BBGestureBack_SysFull_oc // // Created by Bonway on 2018/5/23. // Copyright © 2018年 Bonway. All rights reserved. // #import #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } ================================================ FILE: BBGestureBack_SysFull_swift/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "size" : "20x20", "idiom" : "iphone", "filename" : "20@2x-1.png", "scale" : "2x" }, { "size" : "20x20", "idiom" : "iphone", "filename" : "20@3x.png", "scale" : "3x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "29@2x-1.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "iphone", "filename" : "29@3x.png", "scale" : "3x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "40@2x-1.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "iphone", "filename" : "40@3x.png", "scale" : "3x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "60@2x.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "60@3x.png", "scale" : "3x" }, { "size" : "20x20", "idiom" : "ipad", "filename" : "20@1x.png", "scale" : "1x" }, { "size" : "20x20", "idiom" : "ipad", "filename" : "20@2x.png", "scale" : "2x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "29@1x.png", "scale" : "1x" }, { "size" : "29x29", "idiom" : "ipad", "filename" : "29@2x.png", "scale" : "2x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "40@1x.png", "scale" : "1x" }, { "size" : "40x40", "idiom" : "ipad", "filename" : "40@2x.png", "scale" : "2x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "76@1x.png", "scale" : "1x" }, { "size" : "76x76", "idiom" : "ipad", "filename" : "76@2x.png", "scale" : "2x" }, { "size" : "83.5x83.5", "idiom" : "ipad", "filename" : "83.5@2x.png", "scale" : "2x" }, { "size" : "1024x1024", "idiom" : "ios-marketing", "filename" : "1024@1x.png", "scale" : "1x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_swift/Assets.xcassets/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_swift/Assets.xcassets/TabBar/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_swift/Assets.xcassets/TabBar/TabBarHomeNormal.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarHomeNormal@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarHomeNormal@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_swift/Assets.xcassets/TabBar/TabBarHomeSelected.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarHomeSelected@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarHomeSelected@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_swift/Assets.xcassets/TabBar/TabBarUserNormal.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarUserNormal@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarUserNormal@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_swift/Assets.xcassets/TabBar/TabBarUserSelected.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "TabBarUserSelected@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "TabBarUserSelected@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_swift/Assets.xcassets/logo.imageset/Contents.json ================================================ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "idiom" : "universal", "filename" : "logo@2x.png", "scale" : "2x" }, { "idiom" : "universal", "filename" : "logo@3x.png", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: BBGestureBack_SysFull_swift/Base.lproj/LaunchScreen.storyboard ================================================ ================================================ FILE: BBGestureBack_SysFull_swift/Classes/Home/Index/HomeViewController.swift ================================================ // // HomeViewController.swift // BBGestureBack_SysFull_swift // // Created by Bonway on 2018/5/29. // Copyright © 2018年 Bonway. All rights reserved. // import UIKit class HomeViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //iOS12.1 UINavigationController + UITabBarController( UITabBar 磨砂),在 系统的 popViewControllerAnimated 会遇到tabbar布局错乱的问题,所以需添加以下方法。 //当然你也可以自己选择添加到底层的navigationController中,进行处理。 UITabBar.appearance().isTranslucent = false //--------------------------------------- view.backgroundColor = UIColor.white let sysBtn = UIButton() sysBtn.backgroundColor = UIColor.blue sysBtn.frame = CGRect(x: 100, y: 100, width: 110, height: 100) sysBtn.setTitle("sysPush", for: UIControlState.normal) sysBtn.addTarget(self, action: #selector(sysPushClick), for: UIControlEvents.touchUpInside) self.view.addSubview(sysBtn) } @objc func sysPushClick() { self.navigationController?.pushViewController(ViewController(), animated: true) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } ================================================ FILE: BBGestureBack_SysFull_swift/Classes/Home/ViewController.swift ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // I hope you can star for me. Thank you. // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.white } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } ================================================ FILE: BBGestureBack_SysFull_swift/Classes/Main/AppDelegate.swift ================================================ // 希望您的举手之劳,能为我点颗赞,谢谢~ // I hope you can star for me. Thank you. // 代码地址: https://github.com/Bonway/BBGestureBack // BBGestureBack // Created by Bonway on 2016/3/17. // Copyright © 2016年 Bonway. All rights reserved. // import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { window = UIWindow(frame: UIScreen.main.bounds) window?.backgroundColor = UIColor.white window?.rootViewController = BBTabBarController() window?.makeKeyAndVisible() return true } func applicationWillResignActive(_ application: UIApplication) { // 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. // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. } func applicationDidEnterBackground(_ application: UIApplication) { // 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. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } func applicationWillEnterForeground(_ application: UIApplication) { // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. } func applicationDidBecomeActive(_ application: UIApplication) { // 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. } func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } } ================================================ FILE: BBGestureBack_SysFull_swift/Classes/Main/BBNavigation/BBNavigationController.swift ================================================ // // BBNavigationController.swift // BBGestureBack_SysFull_swift // // Created by Bonway on 2018/5/29. // Copyright © 2018年 Bonway. All rights reserved. // import UIKit class BBNavigationController: UINavigationController, UIGestureRecognizerDelegate{ // var blackList : NSMutableArray! // private lazy var blackList:NSMutableArray = { // let list = NSMutableArray.init(array: nil) // return list // }() // // // // func addFullScreenPopBlackListItem(viewController: UIViewController){ // if viewController as? UIViewController == nil { // return // } // blackList.add(viewController) // } // // func removeFromFullScreenPopBlackList(viewController: UIViewController){ // // for vc in blackList { // if vc == nil { // blackList.remove(viewController) // } // } // // // // } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } ================================================ FILE: BBGestureBack_SysFull_swift/Classes/Main/BBTabBar/BBTabBarController.swift ================================================ // // BBTabBarController.swift // BBGestureBack_SysFull_swift // // Created by Bonway on 2018/5/29. // Copyright © 2018年 Bonway. All rights reserved. // import UIKit class BBTabBarController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() setUpAllChildViewController() } func setUpAllChildViewController() { setUpOneChildViewController(vc: HomeViewController(), image: UIImage(named: "TabBarHomeNormal")!, selectedImage: UIImage(named: "TabBarHomeSelected")!, title: "Home") setUpOneChildViewController(vc: UserViewController(), image: UIImage(named: "TabBarUserNormal")!, selectedImage: UIImage(named: "TabBarUserSelected")!, title: "User") } func setUpOneChildViewController(vc:UIViewController,image:UIImage,selectedImage:UIImage,title:String) { vc.title = title vc.tabBarItem.image = image vc.tabBarItem.selectedImage = image let navVC = BBNavigationController(rootViewController: vc) addChildViewController(navVC) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } ================================================ FILE: BBGestureBack_SysFull_swift/Classes/User/Index/UserViewController.swift ================================================ // // UserViewController.swift // BBGestureBack_SysFull_swift // // Created by Bonway on 2018/5/29. // Copyright © 2018年 Bonway. All rights reserved. // import UIKit class UserViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } ================================================ FILE: BBGestureBack_SysFull_swift/Info.plist ================================================ UIUserInterfaceStyle Light CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: README.md ================================================ # BBGestureBack Full screen return gesture(全屏手势返回 滑动返回 pop 动画效果) 在此感谢大家提的建议!!! [如果你在天朝,请点击这里,速度会很快哦~](https://blog.csdn.net/Bonway_Huang/article/details/50505975) ## iOS 侧滑返回 ## ![BBGestureBack](https://upload-images.jianshu.io/upload_images/10991770-a719a5c2c5c01c79.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) BBGestureBack iOS 全屏手势返回 滑动返回 pop 动画效果 #### 这种手势主流App #### [我要去下载 点赞 :BBGestureBack](https://github.com/Bonway/BBGestureBack) 现在市场上的主流app都有用到各种侧滑手势,**大体上分为2种**, 一种是:类似于淘宝、京东、腾讯、斗鱼的效果,带导航栏的。如图: ![淘宝效果.gif](https://upload-images.jianshu.io/upload_images/10991770-c0c066b9952cd4a2.gif?imageMogr2/auto-orient/strip) ![京东效果.gif](https://upload-images.jianshu.io/upload_images/10991770-20665acc596753fd.gif?imageMogr2/auto-orient/strip) ![腾讯效果.gif](https://upload-images.jianshu.io/upload_images/10991770-85ee3a14c08af52f.gif?imageMogr2/auto-orient/strip) ![斗鱼效果.gif](https://upload-images.jianshu.io/upload_images/10991770-a807f552c60ef11b.gif?imageMogr2/auto-orient/strip) 一种是:类似于微信,不带导航栏,如图: ![微信效果.gif](https://upload-images.jianshu.io/upload_images/10991770-85b47cf133bac792.gif?imageMogr2/auto-orient/strip) #### 支持OC、Swift:最低适配iOS 7.0 #### BBGestureBack不仅支持OC还支持Swift,最低适配iOS7.0,iOS主流的全屏手势返回、滑动返回、pop动画效果都有,适配各种iPhone,嵌入简单,只需按照Demo集成,就能完美使用。(集成最简单、功能最全面) ![BBGestureBack Demo.jpg](https://upload-images.jianshu.io/upload_images/10991770-c04ac90bcad25482.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) #### BBGestureBack手势效果 #### 不仅仅手势返回可以有动画、就连pop也有效果。 ![BBGestureBack手势效果](https://upload-images.jianshu.io/upload_images/10991770-d4ed0df184db25ca.gif?imageMogr2/auto-orient/strip) ![BBGestureBack.gif](https://upload-images.jianshu.io/upload_images/10991770-edecbec93d1d7e8b.gif?imageMogr2/auto-orient/strip) #### BBGestureBack如何使用? #### 按照Demo集成就可以了,注意: * 是否使用效果 `@property (nonatomic) Boolean isEnablePanGesture;//default is YES.` * 重新设置rootViewController ` setupRootViewController:(UIViewController *)rootViewController` * pop的返回方式 ``` - (void)bb_popViewController; - (void)bb_popToViewController:(UIViewController*)viewController; - (void)bb_popToRootViewController; ``` * 更新增引导图,后期还会完善广告图 * 参数 oc ![oc参数说明及文件目录](https://upload-images.jianshu.io/upload_images/10991770-ab0eea71e46a62df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ``` //The ifrst user guider image (第一次引导图) UIKIT_EXTERN NSString *const kBBFirstLaunch; // Open iPhone X Style.(是否打开Phone X风格) UIKIT_EXTERN const Boolean kBBIsOpenIphoneXStyle; // The default is 40, iPhone X Style Corner。(默认为40,iPhone X 圆角弧度) UIKIT_EXTERN const CGFloat kBBIphoneXStyleCorner; // The default is 3, User guider image count。(默认为3,用户引导图总页数) UIKIT_EXTERN const NSInteger kBBUserGuiderImgCount; // Screen system to return gesture.(是否屏蔽系统返回手势) UIKIT_EXTERN const Boolean kBBIsCanleSystemPan; // The distance from the left can be automatically returned.(距离左边多少距离,可以自动返回) UIKIT_EXTERN const CGFloat kBBDistanceToLeft; // BottomView Scaling.(底层缩放比例) UIKIT_EXTERN const CGFloat kBBWindowToScale; // BottomView alpha.(底层透明度) UIKIT_EXTERN const CGFloat kBBMaskingAlpha; // Automatic return speed.(自动返回速度) UIKIT_EXTERN const CGFloat kBBGestureSpeed; // Range of drag and drop.(拖拽的范围,大于此值才有效果) UIKIT_EXTERN const CGFloat kBBDistanceToPan; // The default is 0, 0 for full screen return, and also for distance.(默认为0,0为全屏返回,也可指定距离) UIKIT_EXTERN const CGFloat kBBDistanceToStart; ``` * 参数 swift ![swift参数说明及文件目录](https://upload-images.jianshu.io/upload_images/10991770-b63eb35b54bc62fd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ``` //The ifrst user guider image (第一次引导图) let kBBFirstLaunch:String = "BBFirstLaunch" // Open iPhone X Style.(是否打开Phone X风格) let kBBIsOpenIphoneXStyle:Bool = true // The default is 40, iPhone X Style Corner。(默认为40,iPhone X 圆角弧度) let kBBIphoneXStyleCorner:CGFloat! = 40 // The default is 3, User guider image count。(默认为3,用户引导图总页数) let kBBUserGuiderImgCount:Int = 3 // Screen system to return gesture.(是否屏蔽系统返回手势) let kBBIsCanleSystemPan:Bool = true // The distance from the left can be automatically returned.(距离左边多少距离,可以自动返回) let kBBDistanceToLeft:CGFloat! = 70.0 // BottomView Scaling.(底层缩放比例) let kBBWindowToScale:CGFloat! = 0.95 // BottomView alpha.(底层透明度) let kBBMaskingAlpha:CGFloat! = 0.9 // Automatic return speed.(自动返回速度) let kBBGestureSpeed:TimeInterval! = 0.3 // Range of drag and drop.(拖拽的范围,大于此值才有效果) let kBBDistanceToPan:CGFloat! = 10 // The default is 0, 0 for full screen return, and also for distance.(默认为0,0为全屏返回,也可指定距离) let kBBDistanceToStart:CGFloat! = 100 ``` 上传图片说明: ![BBGestureBack参数说明](https://upload-images.jianshu.io/upload_images/10991770-190ae7dbcf35d5e7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) #### BBGestureBack 系统全屏效果 #### ![系统全屏返回.gif](https://upload-images.jianshu.io/upload_images/10991770-40fc8f74b89dff82.gif?imageMogr2/auto-orient/strip) #### BBGestureBack点赞及下载 #### [别拦我,我要去点赞下载](https://github.com/Bonway/BBGestureBack)