├── .gitignore ├── FadeAnimation.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── FadeAnimation.xcworkspace └── contents.xcworkspacedata ├── FadeAnimation ├── AppDelegate.h ├── AppDelegate.m ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── BBBaseAnimation.h ├── BBBaseAnimation.m ├── BBBaseNavigationController.h ├── BBBaseNavigationController.m ├── BBDependAnimation.h ├── BBDependAnimation.m ├── BBFadeAnimation.h ├── BBFadeAnimation.m ├── BBFadeController.h ├── BBFadeController.m ├── BBFirstViewController.h ├── BBFirstViewController.m ├── BBMoveAnimation.h ├── BBMoveAnimation.m ├── BBMoveController.h ├── BBMoveController.m ├── BBProtocolView.h ├── BBProtocolView.m ├── BBRegulateAnimation.h ├── BBRegulateAnimation.m ├── BBTestViewController.h ├── BBTestViewController.m ├── Base.lproj │ └── LaunchScreen.storyboard ├── Info.plist ├── UIView+Frame.h ├── UIView+Frame.m └── main.m ├── Podfile ├── Podfile.lock ├── Pods ├── FDFullscreenPopGesture │ ├── FDFullscreenPopGesture │ │ ├── UINavigationController+FDFullscreenPopGesture.h │ │ └── UINavigationController+FDFullscreenPopGesture.m │ ├── LICENSE │ └── README.md ├── Headers │ ├── Private │ │ └── FDFullscreenPopGesture │ │ │ └── UINavigationController+FDFullscreenPopGesture.h │ └── Public │ │ └── FDFullscreenPopGesture │ │ └── UINavigationController+FDFullscreenPopGesture.h ├── Manifest.lock ├── Pods.xcodeproj │ └── project.pbxproj └── Target Support Files │ ├── FDFullscreenPopGesture │ ├── FDFullscreenPopGesture-dummy.m │ ├── FDFullscreenPopGesture-prefix.pch │ └── FDFullscreenPopGesture.xcconfig │ └── Pods │ ├── Pods-acknowledgements.markdown │ ├── Pods-acknowledgements.plist │ ├── Pods-dummy.m │ ├── Pods-frameworks.sh │ ├── Pods-resources.sh │ ├── Pods.debug.xcconfig │ └── Pods.release.xcconfig └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | 20 | # CocoaPods 21 | # 22 | # We recommend against adding the Pods directory to your .gitignore. However 23 | # you should judge for yourself, the pros and cons are mentioned at: 24 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 25 | # 26 | #Pods/ 27 | -------------------------------------------------------------------------------- /FadeAnimation.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 405607EB1CECBD3B002D850B /* BBTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 405607EA1CECBD3B002D850B /* BBTestViewController.m */; }; 11 | 40619A521CEC81E10092FE09 /* BBFadeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 40619A511CEC81E10092FE09 /* BBFadeController.m */; }; 12 | 40619A551CEC83480092FE09 /* BBMoveController.m in Sources */ = {isa = PBXBuildFile; fileRef = 40619A541CEC83480092FE09 /* BBMoveController.m */; }; 13 | 40619A581CEC86270092FE09 /* BBDependAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 40619A571CEC86270092FE09 /* BBDependAnimation.m */; }; 14 | 40619A5B1CEC86430092FE09 /* BBBaseAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 40619A5A1CEC86430092FE09 /* BBBaseAnimation.m */; }; 15 | 406A7C231CEC707800AF8166 /* BBMoveAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 406A7C221CEC707800AF8166 /* BBMoveAnimation.m */; }; 16 | 406A7C271CEC721E00AF8166 /* UIView+Frame.m in Sources */ = {isa = PBXBuildFile; fileRef = 406A7C261CEC721E00AF8166 /* UIView+Frame.m */; }; 17 | 40C6BB731C185CA9001B7E5D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 40C6BB721C185CA9001B7E5D /* main.m */; }; 18 | 40C6BB761C185CA9001B7E5D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 40C6BB751C185CA9001B7E5D /* AppDelegate.m */; }; 19 | 40C6BB7E1C185CA9001B7E5D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 40C6BB7D1C185CA9001B7E5D /* Assets.xcassets */; }; 20 | 40C6BB811C185CA9001B7E5D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 40C6BB7F1C185CA9001B7E5D /* LaunchScreen.storyboard */; }; 21 | 40C6BB8D1C185D4E001B7E5D /* BBFirstViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 40C6BB8C1C185D4E001B7E5D /* BBFirstViewController.m */; }; 22 | 40C6BB931C185D8C001B7E5D /* BBBaseNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 40C6BB921C185D8C001B7E5D /* BBBaseNavigationController.m */; }; 23 | 40C6BB961C185F64001B7E5D /* BBProtocolView.m in Sources */ = {isa = PBXBuildFile; fileRef = 40C6BB951C185F64001B7E5D /* BBProtocolView.m */; }; 24 | 40C6BB991C185FF1001B7E5D /* BBRegulateAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 40C6BB981C185FF1001B7E5D /* BBRegulateAnimation.m */; }; 25 | 40C6BB9C1C1860B9001B7E5D /* BBFadeAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 40C6BB9B1C1860B9001B7E5D /* BBFadeAnimation.m */; }; 26 | 9FB87973E28657365012DA43 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A36E995257B462CABFE24807 /* libPods.a */; }; 27 | /* End PBXBuildFile section */ 28 | 29 | /* Begin PBXFileReference section */ 30 | 2A3AA911AEC018E35C9C14AA /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; 31 | 405607E91CECBD3B002D850B /* BBTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBTestViewController.h; sourceTree = ""; }; 32 | 405607EA1CECBD3B002D850B /* BBTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBTestViewController.m; sourceTree = ""; }; 33 | 40619A501CEC81E10092FE09 /* BBFadeController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBFadeController.h; sourceTree = ""; }; 34 | 40619A511CEC81E10092FE09 /* BBFadeController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBFadeController.m; sourceTree = ""; }; 35 | 40619A531CEC83480092FE09 /* BBMoveController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBMoveController.h; sourceTree = ""; }; 36 | 40619A541CEC83480092FE09 /* BBMoveController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBMoveController.m; sourceTree = ""; }; 37 | 40619A561CEC86270092FE09 /* BBDependAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBDependAnimation.h; sourceTree = ""; }; 38 | 40619A571CEC86270092FE09 /* BBDependAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBDependAnimation.m; sourceTree = ""; }; 39 | 40619A591CEC86430092FE09 /* BBBaseAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBBaseAnimation.h; sourceTree = ""; }; 40 | 40619A5A1CEC86430092FE09 /* BBBaseAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBBaseAnimation.m; sourceTree = ""; }; 41 | 406A7C211CEC707800AF8166 /* BBMoveAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBMoveAnimation.h; sourceTree = ""; }; 42 | 406A7C221CEC707800AF8166 /* BBMoveAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBMoveAnimation.m; sourceTree = ""; }; 43 | 406A7C251CEC721E00AF8166 /* UIView+Frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Frame.h"; sourceTree = ""; }; 44 | 406A7C261CEC721E00AF8166 /* UIView+Frame.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Frame.m"; sourceTree = ""; }; 45 | 40C6BB6E1C185CA9001B7E5D /* FadeAnimation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FadeAnimation.app; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 40C6BB721C185CA9001B7E5D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 47 | 40C6BB741C185CA9001B7E5D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 48 | 40C6BB751C185CA9001B7E5D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 49 | 40C6BB7D1C185CA9001B7E5D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 50 | 40C6BB801C185CA9001B7E5D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 51 | 40C6BB821C185CA9001B7E5D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 52 | 40C6BB8B1C185D4E001B7E5D /* BBFirstViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBFirstViewController.h; sourceTree = ""; }; 53 | 40C6BB8C1C185D4E001B7E5D /* BBFirstViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBFirstViewController.m; sourceTree = ""; }; 54 | 40C6BB911C185D8C001B7E5D /* BBBaseNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBBaseNavigationController.h; sourceTree = ""; }; 55 | 40C6BB921C185D8C001B7E5D /* BBBaseNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBBaseNavigationController.m; sourceTree = ""; }; 56 | 40C6BB941C185F64001B7E5D /* BBProtocolView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBProtocolView.h; sourceTree = ""; }; 57 | 40C6BB951C185F64001B7E5D /* BBProtocolView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBProtocolView.m; sourceTree = ""; }; 58 | 40C6BB971C185FF1001B7E5D /* BBRegulateAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBRegulateAnimation.h; sourceTree = ""; }; 59 | 40C6BB981C185FF1001B7E5D /* BBRegulateAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBRegulateAnimation.m; sourceTree = ""; }; 60 | 40C6BB9A1C1860B9001B7E5D /* BBFadeAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBFadeAnimation.h; sourceTree = ""; }; 61 | 40C6BB9B1C1860B9001B7E5D /* BBFadeAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BBFadeAnimation.m; sourceTree = ""; }; 62 | 7AE9C1CEA08DB4DD97F2963A /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; 63 | A36E995257B462CABFE24807 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | /* End PBXFileReference section */ 65 | 66 | /* Begin PBXFrameworksBuildPhase section */ 67 | 40C6BB6B1C185CA9001B7E5D /* Frameworks */ = { 68 | isa = PBXFrameworksBuildPhase; 69 | buildActionMask = 2147483647; 70 | files = ( 71 | 9FB87973E28657365012DA43 /* libPods.a in Frameworks */, 72 | ); 73 | runOnlyForDeploymentPostprocessing = 0; 74 | }; 75 | /* End PBXFrameworksBuildPhase section */ 76 | 77 | /* Begin PBXGroup section */ 78 | 206E2C0D28BC59491AA1774E /* Pods */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 2A3AA911AEC018E35C9C14AA /* Pods.debug.xcconfig */, 82 | 7AE9C1CEA08DB4DD97F2963A /* Pods.release.xcconfig */, 83 | ); 84 | name = Pods; 85 | sourceTree = ""; 86 | }; 87 | 406A7C241CEC720C00AF8166 /* Tools */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | 406A7C251CEC721E00AF8166 /* UIView+Frame.h */, 91 | 406A7C261CEC721E00AF8166 /* UIView+Frame.m */, 92 | ); 93 | name = Tools; 94 | sourceTree = ""; 95 | }; 96 | 40C6BB651C185CA9001B7E5D = { 97 | isa = PBXGroup; 98 | children = ( 99 | 40C6BB701C185CA9001B7E5D /* FadeAnimation */, 100 | 40C6BB6F1C185CA9001B7E5D /* Products */, 101 | 206E2C0D28BC59491AA1774E /* Pods */, 102 | C2BD08721475F688A6342F24 /* Frameworks */, 103 | ); 104 | sourceTree = ""; 105 | }; 106 | 40C6BB6F1C185CA9001B7E5D /* Products */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 40C6BB6E1C185CA9001B7E5D /* FadeAnimation.app */, 110 | ); 111 | name = Products; 112 | sourceTree = ""; 113 | }; 114 | 40C6BB701C185CA9001B7E5D /* FadeAnimation */ = { 115 | isa = PBXGroup; 116 | children = ( 117 | 40C6BB8A1C185D2C001B7E5D /* Controllers */, 118 | 40C6BB891C185D25001B7E5D /* BaseAnimation */, 119 | 40C6BB881C185CBD001B7E5D /* JumpControllerAnimations */, 120 | 406A7C241CEC720C00AF8166 /* Tools */, 121 | 40C6BB741C185CA9001B7E5D /* AppDelegate.h */, 122 | 40C6BB751C185CA9001B7E5D /* AppDelegate.m */, 123 | 40C6BB7D1C185CA9001B7E5D /* Assets.xcassets */, 124 | 40C6BB7F1C185CA9001B7E5D /* LaunchScreen.storyboard */, 125 | 40C6BB821C185CA9001B7E5D /* Info.plist */, 126 | 40C6BB711C185CA9001B7E5D /* Supporting Files */, 127 | ); 128 | path = FadeAnimation; 129 | sourceTree = ""; 130 | }; 131 | 40C6BB711C185CA9001B7E5D /* Supporting Files */ = { 132 | isa = PBXGroup; 133 | children = ( 134 | 40C6BB721C185CA9001B7E5D /* main.m */, 135 | ); 136 | name = "Supporting Files"; 137 | sourceTree = ""; 138 | }; 139 | 40C6BB881C185CBD001B7E5D /* JumpControllerAnimations */ = { 140 | isa = PBXGroup; 141 | children = ( 142 | 40619A591CEC86430092FE09 /* BBBaseAnimation.h */, 143 | 40619A5A1CEC86430092FE09 /* BBBaseAnimation.m */, 144 | 40C6BB9A1C1860B9001B7E5D /* BBFadeAnimation.h */, 145 | 40C6BB9B1C1860B9001B7E5D /* BBFadeAnimation.m */, 146 | 406A7C211CEC707800AF8166 /* BBMoveAnimation.h */, 147 | 406A7C221CEC707800AF8166 /* BBMoveAnimation.m */, 148 | 40619A561CEC86270092FE09 /* BBDependAnimation.h */, 149 | 40619A571CEC86270092FE09 /* BBDependAnimation.m */, 150 | ); 151 | name = JumpControllerAnimations; 152 | sourceTree = ""; 153 | }; 154 | 40C6BB891C185D25001B7E5D /* BaseAnimation */ = { 155 | isa = PBXGroup; 156 | children = ( 157 | 40C6BB911C185D8C001B7E5D /* BBBaseNavigationController.h */, 158 | 40C6BB921C185D8C001B7E5D /* BBBaseNavigationController.m */, 159 | 40C6BB941C185F64001B7E5D /* BBProtocolView.h */, 160 | 40C6BB951C185F64001B7E5D /* BBProtocolView.m */, 161 | 40C6BB971C185FF1001B7E5D /* BBRegulateAnimation.h */, 162 | 40C6BB981C185FF1001B7E5D /* BBRegulateAnimation.m */, 163 | ); 164 | name = BaseAnimation; 165 | sourceTree = ""; 166 | }; 167 | 40C6BB8A1C185D2C001B7E5D /* Controllers */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | 40C6BB8B1C185D4E001B7E5D /* BBFirstViewController.h */, 171 | 40C6BB8C1C185D4E001B7E5D /* BBFirstViewController.m */, 172 | 40619A501CEC81E10092FE09 /* BBFadeController.h */, 173 | 40619A511CEC81E10092FE09 /* BBFadeController.m */, 174 | 40619A531CEC83480092FE09 /* BBMoveController.h */, 175 | 40619A541CEC83480092FE09 /* BBMoveController.m */, 176 | 405607E91CECBD3B002D850B /* BBTestViewController.h */, 177 | 405607EA1CECBD3B002D850B /* BBTestViewController.m */, 178 | ); 179 | name = Controllers; 180 | sourceTree = ""; 181 | }; 182 | C2BD08721475F688A6342F24 /* Frameworks */ = { 183 | isa = PBXGroup; 184 | children = ( 185 | A36E995257B462CABFE24807 /* libPods.a */, 186 | ); 187 | name = Frameworks; 188 | sourceTree = ""; 189 | }; 190 | /* End PBXGroup section */ 191 | 192 | /* Begin PBXNativeTarget section */ 193 | 40C6BB6D1C185CA9001B7E5D /* FadeAnimation */ = { 194 | isa = PBXNativeTarget; 195 | buildConfigurationList = 40C6BB851C185CA9001B7E5D /* Build configuration list for PBXNativeTarget "FadeAnimation" */; 196 | buildPhases = ( 197 | 920BFF495B2F29EBDE4E8430 /* Check Pods Manifest.lock */, 198 | 40C6BB6A1C185CA9001B7E5D /* Sources */, 199 | 40C6BB6B1C185CA9001B7E5D /* Frameworks */, 200 | 40C6BB6C1C185CA9001B7E5D /* Resources */, 201 | 3A8F7268EA815FCCD9CD5139 /* Embed Pods Frameworks */, 202 | A25EDDD9244B9DD1D621B2B3 /* Copy Pods Resources */, 203 | ); 204 | buildRules = ( 205 | ); 206 | dependencies = ( 207 | ); 208 | name = FadeAnimation; 209 | productName = FadeAnimation; 210 | productReference = 40C6BB6E1C185CA9001B7E5D /* FadeAnimation.app */; 211 | productType = "com.apple.product-type.application"; 212 | }; 213 | /* End PBXNativeTarget section */ 214 | 215 | /* Begin PBXProject section */ 216 | 40C6BB661C185CA9001B7E5D /* Project object */ = { 217 | isa = PBXProject; 218 | attributes = { 219 | CLASSPREFIX = BB; 220 | LastUpgradeCheck = 0710; 221 | ORGANIZATIONNAME = wave; 222 | TargetAttributes = { 223 | 40C6BB6D1C185CA9001B7E5D = { 224 | CreatedOnToolsVersion = 7.1.1; 225 | DevelopmentTeam = 334F27LL3L; 226 | }; 227 | }; 228 | }; 229 | buildConfigurationList = 40C6BB691C185CA9001B7E5D /* Build configuration list for PBXProject "FadeAnimation" */; 230 | compatibilityVersion = "Xcode 3.2"; 231 | developmentRegion = English; 232 | hasScannedForEncodings = 0; 233 | knownRegions = ( 234 | en, 235 | Base, 236 | ); 237 | mainGroup = 40C6BB651C185CA9001B7E5D; 238 | productRefGroup = 40C6BB6F1C185CA9001B7E5D /* Products */; 239 | projectDirPath = ""; 240 | projectRoot = ""; 241 | targets = ( 242 | 40C6BB6D1C185CA9001B7E5D /* FadeAnimation */, 243 | ); 244 | }; 245 | /* End PBXProject section */ 246 | 247 | /* Begin PBXResourcesBuildPhase section */ 248 | 40C6BB6C1C185CA9001B7E5D /* Resources */ = { 249 | isa = PBXResourcesBuildPhase; 250 | buildActionMask = 2147483647; 251 | files = ( 252 | 40C6BB811C185CA9001B7E5D /* LaunchScreen.storyboard in Resources */, 253 | 40C6BB7E1C185CA9001B7E5D /* Assets.xcassets in Resources */, 254 | ); 255 | runOnlyForDeploymentPostprocessing = 0; 256 | }; 257 | /* End PBXResourcesBuildPhase section */ 258 | 259 | /* Begin PBXShellScriptBuildPhase section */ 260 | 3A8F7268EA815FCCD9CD5139 /* Embed Pods Frameworks */ = { 261 | isa = PBXShellScriptBuildPhase; 262 | buildActionMask = 2147483647; 263 | files = ( 264 | ); 265 | inputPaths = ( 266 | ); 267 | name = "Embed Pods Frameworks"; 268 | outputPaths = ( 269 | ); 270 | runOnlyForDeploymentPostprocessing = 0; 271 | shellPath = /bin/sh; 272 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n"; 273 | showEnvVarsInLog = 0; 274 | }; 275 | 920BFF495B2F29EBDE4E8430 /* Check Pods Manifest.lock */ = { 276 | isa = PBXShellScriptBuildPhase; 277 | buildActionMask = 2147483647; 278 | files = ( 279 | ); 280 | inputPaths = ( 281 | ); 282 | name = "Check Pods Manifest.lock"; 283 | outputPaths = ( 284 | ); 285 | runOnlyForDeploymentPostprocessing = 0; 286 | shellPath = /bin/sh; 287 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 288 | showEnvVarsInLog = 0; 289 | }; 290 | A25EDDD9244B9DD1D621B2B3 /* Copy Pods Resources */ = { 291 | isa = PBXShellScriptBuildPhase; 292 | buildActionMask = 2147483647; 293 | files = ( 294 | ); 295 | inputPaths = ( 296 | ); 297 | name = "Copy Pods Resources"; 298 | outputPaths = ( 299 | ); 300 | runOnlyForDeploymentPostprocessing = 0; 301 | shellPath = /bin/sh; 302 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; 303 | showEnvVarsInLog = 0; 304 | }; 305 | /* End PBXShellScriptBuildPhase section */ 306 | 307 | /* Begin PBXSourcesBuildPhase section */ 308 | 40C6BB6A1C185CA9001B7E5D /* Sources */ = { 309 | isa = PBXSourcesBuildPhase; 310 | buildActionMask = 2147483647; 311 | files = ( 312 | 40C6BB9C1C1860B9001B7E5D /* BBFadeAnimation.m in Sources */, 313 | 40C6BB991C185FF1001B7E5D /* BBRegulateAnimation.m in Sources */, 314 | 40619A551CEC83480092FE09 /* BBMoveController.m in Sources */, 315 | 40C6BB961C185F64001B7E5D /* BBProtocolView.m in Sources */, 316 | 40C6BB761C185CA9001B7E5D /* AppDelegate.m in Sources */, 317 | 40C6BB8D1C185D4E001B7E5D /* BBFirstViewController.m in Sources */, 318 | 405607EB1CECBD3B002D850B /* BBTestViewController.m in Sources */, 319 | 406A7C231CEC707800AF8166 /* BBMoveAnimation.m in Sources */, 320 | 40619A5B1CEC86430092FE09 /* BBBaseAnimation.m in Sources */, 321 | 40C6BB731C185CA9001B7E5D /* main.m in Sources */, 322 | 40C6BB931C185D8C001B7E5D /* BBBaseNavigationController.m in Sources */, 323 | 406A7C271CEC721E00AF8166 /* UIView+Frame.m in Sources */, 324 | 40619A581CEC86270092FE09 /* BBDependAnimation.m in Sources */, 325 | 40619A521CEC81E10092FE09 /* BBFadeController.m in Sources */, 326 | ); 327 | runOnlyForDeploymentPostprocessing = 0; 328 | }; 329 | /* End PBXSourcesBuildPhase section */ 330 | 331 | /* Begin PBXVariantGroup section */ 332 | 40C6BB7F1C185CA9001B7E5D /* LaunchScreen.storyboard */ = { 333 | isa = PBXVariantGroup; 334 | children = ( 335 | 40C6BB801C185CA9001B7E5D /* Base */, 336 | ); 337 | name = LaunchScreen.storyboard; 338 | sourceTree = ""; 339 | }; 340 | /* End PBXVariantGroup section */ 341 | 342 | /* Begin XCBuildConfiguration section */ 343 | 40C6BB831C185CA9001B7E5D /* Debug */ = { 344 | isa = XCBuildConfiguration; 345 | buildSettings = { 346 | ALWAYS_SEARCH_USER_PATHS = NO; 347 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 348 | CLANG_CXX_LIBRARY = "libc++"; 349 | CLANG_ENABLE_MODULES = YES; 350 | CLANG_ENABLE_OBJC_ARC = YES; 351 | CLANG_WARN_BOOL_CONVERSION = YES; 352 | CLANG_WARN_CONSTANT_CONVERSION = YES; 353 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 354 | CLANG_WARN_EMPTY_BODY = YES; 355 | CLANG_WARN_ENUM_CONVERSION = YES; 356 | CLANG_WARN_INT_CONVERSION = YES; 357 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 358 | CLANG_WARN_UNREACHABLE_CODE = YES; 359 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 360 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 361 | COPY_PHASE_STRIP = NO; 362 | DEBUG_INFORMATION_FORMAT = dwarf; 363 | ENABLE_STRICT_OBJC_MSGSEND = YES; 364 | ENABLE_TESTABILITY = YES; 365 | GCC_C_LANGUAGE_STANDARD = gnu99; 366 | GCC_DYNAMIC_NO_PIC = NO; 367 | GCC_NO_COMMON_BLOCKS = YES; 368 | GCC_OPTIMIZATION_LEVEL = 0; 369 | GCC_PREPROCESSOR_DEFINITIONS = ( 370 | "DEBUG=1", 371 | "$(inherited)", 372 | ); 373 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 374 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 375 | GCC_WARN_UNDECLARED_SELECTOR = YES; 376 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 377 | GCC_WARN_UNUSED_FUNCTION = YES; 378 | GCC_WARN_UNUSED_VARIABLE = YES; 379 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 380 | MTL_ENABLE_DEBUG_INFO = YES; 381 | ONLY_ACTIVE_ARCH = YES; 382 | SDKROOT = iphoneos; 383 | }; 384 | name = Debug; 385 | }; 386 | 40C6BB841C185CA9001B7E5D /* Release */ = { 387 | isa = XCBuildConfiguration; 388 | buildSettings = { 389 | ALWAYS_SEARCH_USER_PATHS = NO; 390 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 391 | CLANG_CXX_LIBRARY = "libc++"; 392 | CLANG_ENABLE_MODULES = YES; 393 | CLANG_ENABLE_OBJC_ARC = YES; 394 | CLANG_WARN_BOOL_CONVERSION = YES; 395 | CLANG_WARN_CONSTANT_CONVERSION = YES; 396 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 397 | CLANG_WARN_EMPTY_BODY = YES; 398 | CLANG_WARN_ENUM_CONVERSION = YES; 399 | CLANG_WARN_INT_CONVERSION = YES; 400 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 401 | CLANG_WARN_UNREACHABLE_CODE = YES; 402 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 403 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 404 | COPY_PHASE_STRIP = NO; 405 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 406 | ENABLE_NS_ASSERTIONS = NO; 407 | ENABLE_STRICT_OBJC_MSGSEND = YES; 408 | GCC_C_LANGUAGE_STANDARD = gnu99; 409 | GCC_NO_COMMON_BLOCKS = YES; 410 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 411 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 412 | GCC_WARN_UNDECLARED_SELECTOR = YES; 413 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 414 | GCC_WARN_UNUSED_FUNCTION = YES; 415 | GCC_WARN_UNUSED_VARIABLE = YES; 416 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 417 | MTL_ENABLE_DEBUG_INFO = NO; 418 | SDKROOT = iphoneos; 419 | VALIDATE_PRODUCT = YES; 420 | }; 421 | name = Release; 422 | }; 423 | 40C6BB861C185CA9001B7E5D /* Debug */ = { 424 | isa = XCBuildConfiguration; 425 | baseConfigurationReference = 2A3AA911AEC018E35C9C14AA /* Pods.debug.xcconfig */; 426 | buildSettings = { 427 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 428 | CODE_SIGN_IDENTITY = "iPhone Developer"; 429 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 430 | INFOPLIST_FILE = FadeAnimation/Info.plist; 431 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 432 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 433 | PRODUCT_BUNDLE_IDENTIFIER = cn.bobo.FadeAnimation; 434 | PRODUCT_NAME = "$(TARGET_NAME)"; 435 | PROVISIONING_PROFILE = ""; 436 | TARGETED_DEVICE_FAMILY = "1,2"; 437 | }; 438 | name = Debug; 439 | }; 440 | 40C6BB871C185CA9001B7E5D /* Release */ = { 441 | isa = XCBuildConfiguration; 442 | baseConfigurationReference = 7AE9C1CEA08DB4DD97F2963A /* Pods.release.xcconfig */; 443 | buildSettings = { 444 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 445 | CODE_SIGN_IDENTITY = "iPhone Developer"; 446 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 447 | INFOPLIST_FILE = FadeAnimation/Info.plist; 448 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 449 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 450 | PRODUCT_BUNDLE_IDENTIFIER = cn.bobo.FadeAnimation; 451 | PRODUCT_NAME = "$(TARGET_NAME)"; 452 | PROVISIONING_PROFILE = ""; 453 | TARGETED_DEVICE_FAMILY = "1,2"; 454 | }; 455 | name = Release; 456 | }; 457 | /* End XCBuildConfiguration section */ 458 | 459 | /* Begin XCConfigurationList section */ 460 | 40C6BB691C185CA9001B7E5D /* Build configuration list for PBXProject "FadeAnimation" */ = { 461 | isa = XCConfigurationList; 462 | buildConfigurations = ( 463 | 40C6BB831C185CA9001B7E5D /* Debug */, 464 | 40C6BB841C185CA9001B7E5D /* Release */, 465 | ); 466 | defaultConfigurationIsVisible = 0; 467 | defaultConfigurationName = Release; 468 | }; 469 | 40C6BB851C185CA9001B7E5D /* Build configuration list for PBXNativeTarget "FadeAnimation" */ = { 470 | isa = XCConfigurationList; 471 | buildConfigurations = ( 472 | 40C6BB861C185CA9001B7E5D /* Debug */, 473 | 40C6BB871C185CA9001B7E5D /* Release */, 474 | ); 475 | defaultConfigurationIsVisible = 0; 476 | defaultConfigurationName = Release; 477 | }; 478 | /* End XCConfigurationList section */ 479 | }; 480 | rootObject = 40C6BB661C185CA9001B7E5D /* Project object */; 481 | } 482 | -------------------------------------------------------------------------------- /FadeAnimation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /FadeAnimation.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /FadeAnimation/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // FadeAnimation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /FadeAnimation/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // FadeAnimation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "BBFirstViewController.h" 11 | #import "BBBaseNavigationController.h" 12 | 13 | @interface AppDelegate () 14 | 15 | @end 16 | 17 | @implementation AppDelegate 18 | 19 | 20 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 21 | 22 | self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; 23 | 24 | BBFirstViewController *firstVC = [[BBFirstViewController alloc]init]; 25 | 26 | BBBaseNavigationController *baseNav = [[BBBaseNavigationController alloc]initWithRootViewController:firstVC]; 27 | 28 | self.window.rootViewController = baseNav; 29 | 30 | [self.window makeKeyAndVisible]; 31 | 32 | return YES; 33 | } 34 | 35 | - (void)applicationWillResignActive:(UIApplication *)application { 36 | // 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. 37 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 38 | } 39 | 40 | - (void)applicationDidEnterBackground:(UIApplication *)application { 41 | // 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. 42 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 43 | } 44 | 45 | - (void)applicationWillEnterForeground:(UIApplication *)application { 46 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 47 | } 48 | 49 | - (void)applicationDidBecomeActive:(UIApplication *)application { 50 | // 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. 51 | } 52 | 53 | - (void)applicationWillTerminate:(UIApplication *)application { 54 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /FadeAnimation/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /FadeAnimation/BBBaseAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // BBBaseAnimation.h 3 | // FadeAnimation 4 | // 5 | // Created by wave on 16/5/18. 6 | // Copyright © 2016年 wave. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface BBBaseAnimation : NSObject 13 | 14 | //动画时间 15 | @property (nonatomic, assign) CGFloat duration; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FadeAnimation/BBBaseAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // BBBaseAnimation.m 3 | // FadeAnimation 4 | // 5 | // Created by wave on 16/5/18. 6 | // Copyright © 2016年 wave. All rights reserved. 7 | // 8 | 9 | #import "BBBaseAnimation.h" 10 | 11 | @interface BBBaseAnimation () 12 | 13 | @property (nonatomic, strong) id transitionContext; 14 | 15 | @end 16 | 17 | @implementation BBBaseAnimation 18 | 19 | - (NSTimeInterval)transitionDuration:(id )transitionContext{ 20 | return self.duration; 21 | } 22 | 23 | - (void)animateTransition:(id )transitionContext{ 24 | NSLog(@"啦啦啦啦啦,我没什么用"); 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /FadeAnimation/BBBaseNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BBBaseNavigationController.h 3 | // FadeAnimation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BBBaseNavigationController : UINavigationController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FadeAnimation/BBBaseNavigationController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BBBaseNavigationController.m 3 | // FadeAnimation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import "BBBaseNavigationController.h" 10 | #import "BBProtocolView.h" 11 | #import "BBRegulateAnimation.h" 12 | 13 | @interface BBBaseNavigationController () 14 | 15 | @end 16 | 17 | @implementation BBBaseNavigationController 18 | { 19 | BBProtocolView *_protocolView; 20 | } 21 | 22 | -(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ 23 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 24 | 25 | if (self) { 26 | _protocolView = [[BBProtocolView alloc]initWithInterceptedProtocol:@protocol(UINavigationControllerDelegate)]; 27 | _protocolView.middleMan = self; 28 | self.transitioningDelegate = [BBRegulateAnimation defaultCoordinator]; 29 | super.delegate = (id ) _protocolView; 30 | } 31 | return self; 32 | } 33 | 34 | - (void)setDelegate:(id )delegate 35 | { 36 | _protocolView.receiver = delegate; 37 | } 38 | 39 | - (id )navigationController:(UINavigationController *)navigationController 40 | animationControllerForOperation:(UINavigationControllerOperation)operation 41 | fromViewController:(UIViewController *)fromVC 42 | toViewController:(UIViewController *)toVC 43 | { 44 | return [[BBRegulateAnimation defaultCoordinator] navigationController:navigationController 45 | animationControllerForOperation:operation 46 | fromViewController:fromVC 47 | toViewController:toVC]; 48 | } 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /FadeAnimation/BBDependAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // BBDependAnimation.h 3 | // FadeAnimation 4 | // 5 | // Created by wave on 16/5/18. 6 | // Copyright © 2016年 wave. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BBDependAnimation : NSObject 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FadeAnimation/BBDependAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // BBDependAnimation.m 3 | // FadeAnimation 4 | // 5 | // Created by wave on 16/5/18. 6 | // Copyright © 2016年 wave. All rights reserved. 7 | // 8 | 9 | #import "BBDependAnimation.h" 10 | 11 | @implementation BBDependAnimation 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FadeAnimation/BBFadeAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // BBFadeAnimation.h 3 | // animation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "BBBaseAnimation.h" 12 | 13 | @interface BBFadeAnimation : BBBaseAnimation 14 | 15 | @property(nonatomic, assign) BOOL reverse; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /FadeAnimation/BBFadeAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // BBFadeAnimation.m 3 | // animation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import "BBFadeAnimation.h" 10 | 11 | @interface BBFadeAnimation () 12 | 13 | @property (nonatomic, strong) id transitionContext; 14 | 15 | @end 16 | 17 | @implementation BBFadeAnimation 18 | 19 | - (void)animateTransition:(id )transitionContext 20 | { 21 | self.transitionContext = transitionContext; 22 | 23 | UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 24 | UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 25 | UIView *containerView = [transitionContext containerView]; 26 | 27 | NSTimeInterval duration = [self transitionDuration:transitionContext]; 28 | 29 | if (!self.reverse) { 30 | toViewController.view.alpha = 0; 31 | [containerView addSubview:toViewController.view]; 32 | [UIView animateWithDuration:duration animations:^{ 33 | fromViewController.view.alpha = 0; 34 | toViewController.view.alpha = 1; 35 | } completion:^(BOOL finished) { 36 | [transitionContext completeTransition:!transitionContext.transitionWasCancelled]; 37 | }]; 38 | } else { 39 | 40 | [containerView insertSubview:toViewController.view belowSubview:fromViewController.view]; 41 | [UIView animateWithDuration:duration animations:^{ 42 | fromViewController.view.alpha = 0; 43 | toViewController.view.alpha = 1; 44 | } completion:^(BOOL finished) { 45 | [transitionContext completeTransition:!transitionContext.transitionWasCancelled]; 46 | }]; 47 | } 48 | } 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /FadeAnimation/BBFadeController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BBFadeController.h 3 | // 4 | // 5 | // Created by wave on 16/5/18. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @interface BBFadeController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FadeAnimation/BBFadeController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BBFadeController.m 3 | // 4 | // 5 | // Created by wave on 16/5/18. 6 | // 7 | // 8 | 9 | #import "BBFadeController.h" 10 | 11 | #import "UIView+Frame.h" 12 | 13 | @interface BBFadeController () 14 | 15 | @end 16 | 17 | @implementation BBFadeController 18 | 19 | - (void)viewDidLoad { 20 | [super viewDidLoad]; 21 | 22 | self.view.backgroundColor = [UIColor whiteColor]; 23 | 24 | 25 | UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, (self.view.height - 30) * 0.5, self.view.width, 30)]; 26 | label.text = @"哈哈哈哈哈"; 27 | label.textAlignment = NSTextAlignmentCenter; 28 | [self.view addSubview:label]; 29 | } 30 | 31 | 32 | 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /FadeAnimation/BBFirstViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BBFirstViewController.h 3 | // FadeAnimation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BBFirstViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FadeAnimation/BBFirstViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BBFirstViewController.m 3 | // FadeAnimation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import "BBFirstViewController.h" 10 | #import "BBFadeController.h" 11 | #import "BBMoveController.h" 12 | #import "BBTestViewController.h" 13 | 14 | @interface BBFirstViewController () 15 | 16 | @property (nonatomic,strong) UITableView *tableView; 17 | 18 | @property (nonatomic,strong) NSArray *titileArray; 19 | 20 | @end 21 | 22 | @implementation BBFirstViewController 23 | 24 | -(void)viewWillAppear:(BOOL)animated{ 25 | [super viewWillAppear:animated]; 26 | 27 | NSLog(@"第一层:%@",self.navigationController.viewControllers); 28 | } 29 | 30 | - (void)viewDidLoad { 31 | [super viewDidLoad]; 32 | 33 | self.view.backgroundColor = [UIColor whiteColor]; 34 | 35 | self.tableView.delegate = self; 36 | self.tableView.dataSource = self; 37 | 38 | self.tableView.tableFooterView = [[UIView alloc]init]; 39 | 40 | [self.view addSubview:self.tableView]; 41 | } 42 | 43 | -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 44 | return self.titileArray.count; 45 | } 46 | 47 | -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 48 | 49 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 50 | 51 | if (cell == nil) { 52 | cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 53 | } 54 | 55 | cell.selectionStyle = UITableViewCellSelectionStyleNone; 56 | cell.textLabel.text = self.titileArray[indexPath.row]; 57 | 58 | return cell; 59 | } 60 | 61 | -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 62 | if (indexPath.row == 0) { 63 | BBFadeController *vc = [[BBFadeController alloc]init]; 64 | [self showViewController:vc sender:self]; 65 | }else if (indexPath.row == 1){ 66 | BBMoveController *vc = [[BBMoveController alloc]init]; 67 | [self showViewController:vc sender:self]; 68 | }else if (indexPath.row == 2){ 69 | BBTestViewController *testVC = [[BBTestViewController alloc]init]; 70 | [self showViewController:testVC sender:self]; 71 | } 72 | } 73 | 74 | -(UITableView *)tableView{ 75 | if (!_tableView) { 76 | _tableView = [[UITableView alloc]initWithFrame:self.view.frame]; 77 | } 78 | return _tableView; 79 | } 80 | 81 | -(NSArray *)titileArray{ 82 | if (!_titileArray) { 83 | _titileArray = @[@"FadeAnimation",@"MoveAnimation",@"testVC"]; 84 | } 85 | return _titileArray; 86 | } 87 | 88 | @end 89 | -------------------------------------------------------------------------------- /FadeAnimation/BBMoveAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // BBMoveAnimation.h 3 | // FadeAnimation 4 | // 5 | // Created by wave on 16/5/18. 6 | // Copyright © 2016年 wave. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "BBBaseAnimation.h" 12 | 13 | @interface BBMoveAnimation : BBBaseAnimation 14 | 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /FadeAnimation/BBMoveAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // BBMoveAnimation.m 3 | // FadeAnimation 4 | // 5 | // Created by wave on 16/5/18. 6 | // Copyright © 2016年 wave. All rights reserved. 7 | // 8 | 9 | #import "BBMoveAnimation.h" 10 | #import "UIView+Frame.h" 11 | 12 | @interface BBMoveAnimation () 13 | 14 | @property (nonatomic, strong) id transitionContext; 15 | 16 | @end 17 | 18 | @implementation BBMoveAnimation 19 | 20 | - (void)animateTransition:(id )transitionContext{ 21 | self.transitionContext = transitionContext; 22 | 23 | UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 24 | UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 25 | UIView *containerView = [transitionContext containerView]; 26 | 27 | NSTimeInterval duration = [self transitionDuration:transitionContext]; 28 | 29 | toViewController.view.alpha = 0; 30 | [containerView addSubview:toViewController.view]; 31 | 32 | toViewController.view.frame = CGRectMake(0, -toViewController.view.height, toViewController.view.width, toViewController.view.height); 33 | [UIView animateWithDuration:duration delay:0 usingSpringWithDamping:0.6 initialSpringVelocity:2.0 options:0 animations:^{ 34 | fromViewController.view.alpha = 0; 35 | toViewController.view.alpha = 1; 36 | toViewController.view.top = 0; 37 | } completion:^(BOOL finished) { 38 | [transitionContext completeTransition:!transitionContext.transitionWasCancelled]; 39 | }]; 40 | 41 | } 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /FadeAnimation/BBMoveController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BBMoveController.h 3 | // FadeAnimation 4 | // 5 | // Created by wave on 16/5/18. 6 | // Copyright © 2016年 wave. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BBMoveController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FadeAnimation/BBMoveController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BBMoveController.m 3 | // FadeAnimation 4 | // 5 | // Created by wave on 16/5/18. 6 | // Copyright © 2016年 wave. All rights reserved. 7 | // 8 | 9 | #import "BBMoveController.h" 10 | #import "UIView+Frame.h" 11 | 12 | @interface BBMoveController () 13 | 14 | @end 15 | 16 | @implementation BBMoveController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | 21 | self.view.backgroundColor = [UIColor whiteColor]; 22 | 23 | 24 | UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, (self.view.height - 30) * 0.5, self.view.width, 30)]; 25 | label.text = @"嘿嘿嘿嘿嘿"; 26 | label.textAlignment = NSTextAlignmentCenter; 27 | [self.view addSubview:label]; 28 | } 29 | 30 | 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /FadeAnimation/BBProtocolView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BBProtocolView.h 3 | // FadeAnimation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BBProtocolView : NSObject 12 | 13 | @property (nonatomic, readonly, copy) NSArray * interceptedProtocols; 14 | @property (nonatomic, weak) id receiver; 15 | @property (nonatomic, weak) id middleMan; 16 | 17 | - (instancetype)initWithInterceptedProtocol:(Protocol *)interceptedProtocol; 18 | - (instancetype)initWithInterceptedProtocols:(Protocol *)firstInterceptedProtocol, ... NS_REQUIRES_NIL_TERMINATION; 19 | - (instancetype)initWithArrayOfInterceptedProtocols:(NSArray *)arrayOfInterceptedProtocols; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /FadeAnimation/BBProtocolView.m: -------------------------------------------------------------------------------- 1 | // 2 | // BBProtocolView.m 3 | // FadeAnimation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import "BBProtocolView.h" 10 | #import 11 | 12 | static inline BOOL selector_belongsToProtocol(SEL selector, Protocol * protocol); 13 | 14 | @implementation BBProtocolView 15 | 16 | - (id)forwardingTargetForSelector:(SEL)aSelector 17 | { 18 | if ([self.middleMan respondsToSelector:aSelector] && 19 | [self isSelectorContainedInInterceptedProtocols:aSelector]) 20 | return self.middleMan; 21 | 22 | if ([self.receiver respondsToSelector:aSelector]) 23 | return self.receiver; 24 | 25 | return [super forwardingTargetForSelector:aSelector]; 26 | } 27 | 28 | - (BOOL)respondsToSelector:(SEL)aSelector 29 | { 30 | if ([self.middleMan respondsToSelector:aSelector] && 31 | [self isSelectorContainedInInterceptedProtocols:aSelector]) 32 | return YES; 33 | 34 | if ([self.receiver respondsToSelector:aSelector]) 35 | return YES; 36 | 37 | return [super respondsToSelector:aSelector]; 38 | } 39 | 40 | - (instancetype)initWithInterceptedProtocol:(Protocol *)interceptedProtocol 41 | { 42 | self = [super init]; 43 | if (self) { 44 | _interceptedProtocols = @[interceptedProtocol]; 45 | } 46 | return self; 47 | } 48 | 49 | - (instancetype)initWithInterceptedProtocols:(Protocol *)firstInterceptedProtocol, ...; 50 | { 51 | self = [super init]; 52 | if (self) { 53 | NSMutableArray * mutableProtocols = [NSMutableArray array]; 54 | Protocol * eachInterceptedProtocol; 55 | va_list argumentList; 56 | if (firstInterceptedProtocol) 57 | { 58 | [mutableProtocols addObject:firstInterceptedProtocol]; 59 | va_start(argumentList, firstInterceptedProtocol); 60 | while ((eachInterceptedProtocol = va_arg(argumentList, id))) { 61 | [mutableProtocols addObject:eachInterceptedProtocol]; 62 | } 63 | va_end(argumentList); 64 | } 65 | _interceptedProtocols = [mutableProtocols copy]; 66 | } 67 | return self; 68 | } 69 | 70 | - (instancetype)initWithArrayOfInterceptedProtocols:(NSArray *)arrayOfInterceptedProtocols 71 | { 72 | self = [super init]; 73 | if (self) { 74 | _interceptedProtocols = [arrayOfInterceptedProtocols copy]; 75 | } 76 | return self; 77 | } 78 | 79 | - (void)dealloc 80 | { 81 | _interceptedProtocols = nil; 82 | } 83 | 84 | - (BOOL)isSelectorContainedInInterceptedProtocols:(SEL)aSelector 85 | { 86 | __block BOOL isSelectorContainedInInterceptedProtocols = NO; 87 | [self.interceptedProtocols enumerateObjectsUsingBlock:^(Protocol * protocol, NSUInteger idx, BOOL *stop) { 88 | isSelectorContainedInInterceptedProtocols = selector_belongsToProtocol(aSelector, protocol); 89 | * stop = isSelectorContainedInInterceptedProtocols; 90 | }]; 91 | return isSelectorContainedInInterceptedProtocols; 92 | } 93 | @end 94 | 95 | BOOL selector_belongsToProtocol(SEL selector, Protocol * protocol) 96 | { 97 | for (int optionbits = 0; optionbits < (1 << 2); optionbits++) { 98 | BOOL required = optionbits & 1; 99 | BOOL instance = !(optionbits & (1 << 1)); 100 | 101 | struct objc_method_description hasMethod = protocol_getMethodDescription(protocol, selector, required, instance); 102 | if (hasMethod.name || hasMethod.types) { 103 | return YES; 104 | } 105 | } 106 | 107 | return NO; 108 | } 109 | -------------------------------------------------------------------------------- /FadeAnimation/BBRegulateAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // BBRegulateAnimation.h 3 | // FadeAnimation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface BBRegulateAnimation : NSObject 13 | 14 | + (instancetype)defaultCoordinator; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /FadeAnimation/BBRegulateAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // BBRegulateAnimation.m 3 | // FadeAnimation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import "BBRegulateAnimation.h" 10 | #import "BBFirstViewController.h" 11 | #import "BBFadeController.h" 12 | #import "BBMoveController.h" 13 | 14 | //动画 15 | #import "BBBaseAnimation.h" 16 | #import "BBFadeAnimation.h" 17 | #import "BBMoveAnimation.h" 18 | 19 | typedef id (^animation)(void); 20 | 21 | static NSMutableDictionary *sTransitions; 22 | 23 | static void inline registerTransition(Class fromViewControllerClass, Class toViewControllerClass, animation action) { 24 | sTransitions[[NSStringFromClass(fromViewControllerClass) stringByAppendingString:NSStringFromClass(toViewControllerClass)]] = action; 25 | } 26 | 27 | @interface BBRegulateAnimation () 28 | 29 | @end 30 | 31 | @implementation BBRegulateAnimation 32 | 33 | + (instancetype)defaultCoordinator 34 | { 35 | static dispatch_once_t token; 36 | static BBRegulateAnimation *instance; 37 | 38 | dispatch_once(&token, ^{ 39 | instance = [[BBRegulateAnimation alloc] init]; 40 | }); 41 | 42 | return instance; 43 | } 44 | 45 | +(void)initialize{ 46 | if (self == [BBRegulateAnimation class]) { 47 | sTransitions = [[NSMutableDictionary alloc]init]; 48 | 49 | //这里控制从哪个控制器到哪个控制器执行动画,比如从A到B执行动画,这样在任何情况下都可以使用showviewcontroller来跳转控制器. 50 | 51 | //first -> fadeVC 52 | registerTransition([BBFirstViewController class], [BBFadeController class], ^id{ 53 | BBFadeAnimation *animationController = [[BBFadeAnimation alloc]init]; 54 | animationController.duration = 0.5f; 55 | animationController.reverse = NO; 56 | return animationController; 57 | }); 58 | 59 | //fadeVC -> first 60 | registerTransition([BBFadeController class], [BBFirstViewController class], ^id{ 61 | BBFadeAnimation *animationController = [[BBFadeAnimation alloc]init]; 62 | animationController.duration = 0.5f; 63 | animationController.reverse = YES; 64 | return animationController; 65 | }); 66 | 67 | //first -> MoveVC 68 | registerTransition([BBFirstViewController class], [BBMoveController class], ^id{ 69 | 70 | BBMoveAnimation *animationController = [[BBMoveAnimation alloc]init]; 71 | animationController.duration = 1,0; 72 | return animationController; 73 | }); 74 | 75 | //MoveVC -> first 76 | registerTransition([BBMoveController class], [BBFirstViewController class], ^id{ 77 | BBMoveAnimation *animationController = [[BBMoveAnimation alloc]init]; 78 | animationController.duration = 1.0; 79 | return animationController; 80 | }); 81 | 82 | } 83 | } 84 | 85 | - (id )navigationController:(UINavigationController *)navigationController 86 | animationControllerForOperation:(UINavigationControllerOperation)operation 87 | fromViewController:(UIViewController *)fromVC 88 | toViewController:(UIViewController *)toVC 89 | { 90 | animation action = sTransitions[[NSStringFromClass([fromVC class]) stringByAppendingString:NSStringFromClass([toVC class])]]; 91 | return action ? action() : nil; 92 | } 93 | 94 | @end 95 | -------------------------------------------------------------------------------- /FadeAnimation/BBTestViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BBTestViewController.h 3 | // FadeAnimation 4 | // 5 | // Created by wave on 16/5/18. 6 | // Copyright © 2016年 wave. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BBTestViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FadeAnimation/BBTestViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BBTestViewController.m 3 | // FadeAnimation 4 | // 5 | // Created by wave on 16/5/18. 6 | // Copyright © 2016年 wave. All rights reserved. 7 | // 8 | 9 | #import "BBTestViewController.h" 10 | 11 | @interface BBTestViewController () 12 | 13 | @end 14 | 15 | @implementation BBTestViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | 20 | self.view.backgroundColor = [UIColor whiteColor]; 21 | } 22 | 23 | 24 | 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /FadeAnimation/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /FadeAnimation/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LSApplicationCategoryType 6 | 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /FadeAnimation/UIView+Frame.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Frame.h 3 | // zhiyou 4 | // 5 | // Created by wave on 15/12/25. 6 | // Copyright © 2015年 Folse. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIView (Frame) 12 | 13 | 14 | /** 15 | * Shortcut for frame.origin.x. 16 | * 17 | * Sets frame.origin.x = left 18 | */ 19 | @property (nonatomic) CGFloat left; 20 | 21 | /** 22 | * Shortcut for frame.origin.y 23 | * 24 | * Sets frame.origin.y = top 25 | */ 26 | @property (nonatomic) CGFloat top; 27 | 28 | /** 29 | * Shortcut for frame.origin.x + frame.size.width 30 | * 31 | * Sets frame.origin.x = right - frame.size.width 32 | */ 33 | @property (nonatomic) CGFloat right; 34 | 35 | /** 36 | * Shortcut for frame.origin.y + frame.size.height 37 | * 38 | * Sets frame.origin.y = bottom - frame.size.height 39 | */ 40 | @property (nonatomic) CGFloat bottom; 41 | 42 | /** 43 | * Shortcut for frame.size.width 44 | * 45 | * Sets frame.size.width = width 46 | */ 47 | @property (nonatomic) CGFloat width; 48 | 49 | /** 50 | * Shortcut for frame.size.height 51 | * 52 | * Sets frame.size.height = height 53 | */ 54 | @property (nonatomic) CGFloat height; 55 | 56 | /** 57 | * Shortcut for center.x 58 | * 59 | * Sets center.x = centerX 60 | */ 61 | @property (nonatomic) CGFloat centerX; 62 | 63 | /** 64 | * Shortcut for center.y 65 | * 66 | * Sets center.y = centerY 67 | */ 68 | @property (nonatomic) CGFloat centerY; 69 | 70 | /** 71 | * Return the x coordinate on the screen. 72 | */ 73 | @property (nonatomic, readonly) CGFloat screenX; 74 | 75 | /** 76 | * Return the y coordinate on the screen. 77 | */ 78 | @property (nonatomic, readonly) CGFloat screenY; 79 | 80 | /** 81 | * Return the x coordinate on the screen, taking into account scroll views. 82 | */ 83 | @property (nonatomic, readonly) CGFloat screenViewX; 84 | 85 | /** 86 | * Return the y coordinate on the screen, taking into account scroll views. 87 | */ 88 | @property (nonatomic, readonly) CGFloat screenViewY; 89 | 90 | /** 91 | * Return the view frame on the screen, taking into account scroll views. 92 | */ 93 | @property (nonatomic, readonly) CGRect screenFrame; 94 | 95 | /** 96 | * Shortcut for frame.origin 97 | */ 98 | @property (nonatomic) CGPoint origin; 99 | 100 | /** 101 | * Shortcut for frame.size 102 | */ 103 | @property (nonatomic) CGSize size; 104 | 105 | /** 106 | * Return the width in portrait or the height in landscape. 107 | */ 108 | @property (nonatomic, readonly) CGFloat orientationWidth; 109 | 110 | /** 111 | * Return the height in portrait or the width in landscape. 112 | */ 113 | @property (nonatomic, readonly) CGFloat orientationHeight; 114 | 115 | /** 116 | * Finds the first descendant view (including this view) that is a member of a particular class. 117 | */ 118 | - (UIView*)descendantOrSelfWithClass:(Class)cls; 119 | 120 | /** 121 | * Finds the first ancestor view (including this view) that is a member of a particular class. 122 | */ 123 | - (UIView*)ancestorOrSelfWithClass:(Class)cls; 124 | 125 | /** 126 | * Removes all subviews. 127 | */ 128 | - (void)removeAllSubviews; 129 | 130 | /** 131 | Attaches the given block for a single tap action to the receiver. 132 | @param block The block to execute. 133 | */ 134 | - (void)setTapActionWithBlock:(void (^)(void))block; 135 | 136 | /** 137 | Attaches the given block for a long press action to the receiver. 138 | @param block The block to execute. 139 | */ 140 | - (void)setLongPressActionWithBlock:(void (^)(void))block; 141 | 142 | 143 | @end 144 | -------------------------------------------------------------------------------- /FadeAnimation/UIView+Frame.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+Frame.m 3 | // zhiyou 4 | // 5 | // Created by wave on 15/12/25. 6 | // Copyright © 2015年 Folse. All rights reserved. 7 | // 8 | 9 | #import "UIView+Frame.h" 10 | #import 11 | 12 | static NSString *const kDTActionHandlerTapGestureKey = @"kDTActionHandlerTapGestureKey"; 13 | static NSString *const kDTActionHandlerTapBlockKey = @"kDTActionHandlerTapBlockKey"; 14 | static NSString *const kDTActionHandlerLongPressGestureKey = @"kDTActionHandlerLongPressGestureKey"; 15 | static NSString *const kDTActionHandlerLongPressBlockKey = @"kDTActionHandlerLongPressBlockKey"; 16 | 17 | @implementation UIView (Frame) 18 | 19 | - (CGFloat)left 20 | { 21 | return self.frame.origin.x; 22 | } 23 | 24 | - (void)setLeft:(CGFloat)x 25 | { 26 | CGRect frame = self.frame; 27 | frame.origin.x = x; 28 | self.frame = frame; 29 | } 30 | 31 | - (CGFloat)top 32 | { 33 | return self.frame.origin.y; 34 | } 35 | 36 | - (void)setTop:(CGFloat)y 37 | { 38 | CGRect frame = self.frame; 39 | frame.origin.y = y; 40 | self.frame = frame; 41 | } 42 | 43 | - (CGFloat)right 44 | { 45 | return self.frame.origin.x + self.frame.size.width; 46 | } 47 | 48 | - (void)setRight:(CGFloat)right 49 | { 50 | CGRect frame = self.frame; 51 | frame.origin.x = right - frame.size.width; 52 | self.frame = frame; 53 | } 54 | 55 | - (CGFloat)bottom 56 | { 57 | return self.frame.origin.y + self.frame.size.height; 58 | } 59 | 60 | - (void)setBottom:(CGFloat)bottom 61 | { 62 | CGRect frame = self.frame; 63 | frame.origin.y = bottom - frame.size.height; 64 | self.frame = frame; 65 | } 66 | 67 | - (CGFloat)centerX 68 | { 69 | return self.center.x; 70 | } 71 | 72 | - (void)setCenterX:(CGFloat)centerX 73 | { 74 | self.center = CGPointMake(centerX, self.center.y); 75 | } 76 | 77 | - (CGFloat)centerY 78 | { 79 | return self.center.y; 80 | } 81 | 82 | - (void)setCenterY:(CGFloat)centerY 83 | { 84 | self.center = CGPointMake(self.center.x, centerY); 85 | } 86 | 87 | - (CGFloat)width 88 | { 89 | return self.frame.size.width; 90 | } 91 | 92 | - (void)setWidth:(CGFloat)width 93 | { 94 | CGRect frame = self.frame; 95 | frame.size.width = width; 96 | self.frame = frame; 97 | } 98 | 99 | - (CGFloat)height 100 | { 101 | return self.frame.size.height; 102 | } 103 | 104 | - (void)setHeight:(CGFloat)height 105 | { 106 | CGRect frame = self.frame; 107 | frame.size.height = height; 108 | self.frame = frame; 109 | } 110 | 111 | - (CGFloat)screenX 112 | { 113 | CGFloat x = 0.0f; 114 | for (UIView *view = self; view; view = view.superview) { 115 | x += view.left; 116 | } 117 | return x; 118 | } 119 | 120 | - (CGFloat)screenY 121 | { 122 | CGFloat y = 0.0f; 123 | for (UIView *view = self; view; view = view.superview) { 124 | y += view.top; 125 | } 126 | return y; 127 | } 128 | 129 | - (CGFloat)screenViewX 130 | { 131 | CGFloat x = 0.0f; 132 | for (UIView *view = self; view; view = view.superview) { 133 | x += view.left; 134 | 135 | if ([view isKindOfClass:[UIScrollView class]]) { 136 | UIScrollView *scrollView = (UIScrollView *) view; 137 | x -= scrollView.contentOffset.x; 138 | } 139 | } 140 | 141 | return x; 142 | } 143 | 144 | - (CGFloat)screenViewY 145 | { 146 | CGFloat y = 0; 147 | for (UIView *view = self; view; view = view.superview) { 148 | y += view.top; 149 | 150 | if ([view isKindOfClass:[UIScrollView class]]) { 151 | UIScrollView *scrollView = (UIScrollView *) view; 152 | y -= scrollView.contentOffset.y; 153 | } 154 | } 155 | return y; 156 | } 157 | 158 | 159 | - (CGRect)screenFrame 160 | { 161 | return CGRectMake(self.screenViewX, self.screenViewY, self.width, self.height); 162 | } 163 | 164 | 165 | - (CGPoint)origin 166 | { 167 | return self.frame.origin; 168 | } 169 | 170 | 171 | - (void)setOrigin:(CGPoint)origin 172 | { 173 | CGRect frame = self.frame; 174 | frame.origin = origin; 175 | self.frame = frame; 176 | } 177 | 178 | 179 | - (CGSize)size 180 | { 181 | return self.frame.size; 182 | } 183 | 184 | 185 | - (void)setSize:(CGSize)size 186 | { 187 | CGRect frame = self.frame; 188 | frame.size = size; 189 | self.frame = frame; 190 | } 191 | 192 | 193 | - (CGFloat)orientationWidth 194 | { 195 | return UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) 196 | ? self.height : self.width; 197 | } 198 | 199 | 200 | - (CGFloat)orientationHeight 201 | { 202 | return UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) 203 | ? self.width : self.height; 204 | } 205 | 206 | 207 | - (UIView *)descendantOrSelfWithClass:(Class)cls 208 | { 209 | if ([self isKindOfClass:cls]) { 210 | return self; 211 | } 212 | 213 | for (UIView *child in self.subviews) { 214 | UIView *it = [child descendantOrSelfWithClass:cls]; 215 | if (it) { 216 | return it; 217 | } 218 | } 219 | 220 | return nil; 221 | } 222 | 223 | 224 | - (UIView *)ancestorOrSelfWithClass:(Class)cls 225 | { 226 | if ([self isKindOfClass:cls]) { 227 | return self; 228 | 229 | } else if (self.superview) { 230 | return [self.superview ancestorOrSelfWithClass:cls]; 231 | 232 | } else { 233 | return nil; 234 | } 235 | } 236 | 237 | 238 | - (void)removeAllSubviews 239 | { 240 | while (self.subviews.count) { 241 | UIView *child = self.subviews.lastObject; 242 | [child removeFromSuperview]; 243 | } 244 | } 245 | 246 | 247 | - (CGPoint)offsetFromView:(UIView *)otherView 248 | { 249 | CGFloat x = 0.0f, y = 0.0f; 250 | for (UIView *view = self; view && view != otherView; view = view.superview) { 251 | x += view.left; 252 | y += view.top; 253 | } 254 | return CGPointMake(x, y); 255 | } 256 | 257 | 258 | - (void)setTapActionWithBlock:(void (^)(void))block 259 | { 260 | UITapGestureRecognizer *gesture = objc_getAssociatedObject(self, &kDTActionHandlerTapGestureKey); 261 | 262 | if (!gesture) { 263 | gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(__handleActionForTapGesture:)]; 264 | [self addGestureRecognizer:gesture]; 265 | objc_setAssociatedObject(self, &kDTActionHandlerTapGestureKey, gesture, OBJC_ASSOCIATION_RETAIN); 266 | } 267 | 268 | objc_setAssociatedObject(self, &kDTActionHandlerTapBlockKey, block, OBJC_ASSOCIATION_COPY); 269 | } 270 | 271 | - (void)__handleActionForTapGesture:(UITapGestureRecognizer *)gesture 272 | { 273 | if (gesture.state == UIGestureRecognizerStateRecognized) { 274 | void(^action)(void) = objc_getAssociatedObject(self, &kDTActionHandlerTapBlockKey); 275 | 276 | if (action) { 277 | action(); 278 | } 279 | } 280 | } 281 | 282 | - (void)setLongPressActionWithBlock:(void (^)(void))block 283 | { 284 | UILongPressGestureRecognizer *gesture = objc_getAssociatedObject(self, &kDTActionHandlerLongPressGestureKey); 285 | 286 | if (!gesture) { 287 | gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(__handleActionForLongPressGesture:)]; 288 | [self addGestureRecognizer:gesture]; 289 | objc_setAssociatedObject(self, &kDTActionHandlerLongPressGestureKey, gesture, OBJC_ASSOCIATION_RETAIN); 290 | } 291 | 292 | objc_setAssociatedObject(self, &kDTActionHandlerLongPressBlockKey, block, OBJC_ASSOCIATION_COPY); 293 | } 294 | 295 | - (void)__handleActionForLongPressGesture:(UITapGestureRecognizer *)gesture 296 | { 297 | if (gesture.state == UIGestureRecognizerStateBegan) { 298 | void(^action)(void) = objc_getAssociatedObject(self, &kDTActionHandlerLongPressBlockKey); 299 | 300 | if (action) { 301 | action(); 302 | } 303 | } 304 | } 305 | 306 | @end 307 | -------------------------------------------------------------------------------- /FadeAnimation/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // FadeAnimation 4 | // 5 | // Created by wave on 15/12/9. 6 | // Copyright © 2015年 wave. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | platform:ios, '8.0' 2 | pod 'FDFullscreenPopGesture' 3 | inhibit_all_warnings! 4 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FDFullscreenPopGesture (1.1) 3 | 4 | DEPENDENCIES: 5 | - FDFullscreenPopGesture 6 | 7 | SPEC CHECKSUMS: 8 | FDFullscreenPopGesture: a8a620179e3d9c40e8e00256dcee1c1a27c6d0f0 9 | 10 | COCOAPODS: 0.39.0 11 | -------------------------------------------------------------------------------- /Pods/FDFullscreenPopGesture/FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.h: -------------------------------------------------------------------------------- 1 | // The MIT License (MIT) 2 | // 3 | // Copyright (c) 2015-2016 forkingdog ( https://github.com/forkingdog ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in all 13 | // copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | // SOFTWARE. 22 | 23 | #import 24 | 25 | /// "UINavigation+FDFullscreenPopGesture" extends UINavigationController's swipe- 26 | /// to-pop behavior in iOS 7+ by supporting fullscreen pan gesture. Instead of 27 | /// screen edge, you can now swipe from any place on the screen and the onboard 28 | /// interactive pop transition works seamlessly. 29 | /// 30 | /// Adding the implementation file of this category to your target will 31 | /// automatically patch UINavigationController with this feature. 32 | @interface UINavigationController (FDFullscreenPopGesture) 33 | 34 | /// The gesture recognizer that actually handles interactive pop. 35 | @property (nonatomic, strong, readonly) UIPanGestureRecognizer *fd_fullscreenPopGestureRecognizer; 36 | 37 | /// A view controller is able to control navigation bar's appearance by itself, 38 | /// rather than a global way, checking "fd_prefersNavigationBarHidden" property. 39 | /// Default to YES, disable it if you don't want so. 40 | @property (nonatomic, assign) BOOL fd_viewControllerBasedNavigationBarAppearanceEnabled; 41 | 42 | @end 43 | 44 | /// Allows any view controller to disable interactive pop gesture, which might 45 | /// be necessary when the view controller itself handles pan gesture in some 46 | /// cases. 47 | @interface UIViewController (FDFullscreenPopGesture) 48 | 49 | /// Whether the interactive pop gesture is disabled when contained in a navigation 50 | /// stack. 51 | @property (nonatomic, assign) BOOL fd_interactivePopDisabled; 52 | 53 | /// Indicate this view controller prefers its navigation bar hidden or not, 54 | /// checked when view controller based navigation bar's appearance is enabled. 55 | /// Default to NO, bars are more likely to show. 56 | @property (nonatomic, assign) BOOL fd_prefersNavigationBarHidden; 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /Pods/FDFullscreenPopGesture/FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.m: -------------------------------------------------------------------------------- 1 | // The MIT License (MIT) 2 | // 3 | // Copyright (c) 2015-2016 forkingdog ( https://github.com/forkingdog ) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in all 13 | // copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | // SOFTWARE. 22 | 23 | #import "UINavigationController+FDFullscreenPopGesture.h" 24 | #import 25 | 26 | @interface _FDFullscreenPopGestureRecognizerDelegate : NSObject 27 | 28 | @property (nonatomic, weak) UINavigationController *navigationController; 29 | 30 | @end 31 | 32 | @implementation _FDFullscreenPopGestureRecognizerDelegate 33 | 34 | - (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer 35 | { 36 | // Ignore when no view controller is pushed into the navigation stack. 37 | if (self.navigationController.viewControllers.count <= 1) { 38 | return NO; 39 | } 40 | 41 | // Disable when the active view controller doesn't allow interactive pop. 42 | UIViewController *topViewController = self.navigationController.viewControllers.lastObject; 43 | if (topViewController.fd_interactivePopDisabled) { 44 | return NO; 45 | } 46 | 47 | // Ignore pan gesture when the navigation controller is currently in transition. 48 | if ([[self.navigationController valueForKey:@"_isTransitioning"] boolValue]) { 49 | return NO; 50 | } 51 | 52 | // Prevent calling the handler when the gesture begins in an opposite direction. 53 | CGPoint translation = [gestureRecognizer translationInView:gestureRecognizer.view]; 54 | if (translation.x <= 0) { 55 | return NO; 56 | } 57 | 58 | return YES; 59 | } 60 | 61 | @end 62 | 63 | typedef void (^_FDViewControllerWillAppearInjectBlock)(UIViewController *viewController, BOOL animated); 64 | 65 | @interface UIViewController (FDFullscreenPopGesturePrivate) 66 | 67 | @property (nonatomic, copy) _FDViewControllerWillAppearInjectBlock fd_willAppearInjectBlock; 68 | 69 | @end 70 | 71 | @implementation UIViewController (FDFullscreenPopGesturePrivate) 72 | 73 | + (void)load 74 | { 75 | Method originalMethod = class_getInstanceMethod(self, @selector(viewWillAppear:)); 76 | Method swizzledMethod = class_getInstanceMethod(self, @selector(fd_viewWillAppear:)); 77 | method_exchangeImplementations(originalMethod, swizzledMethod); 78 | } 79 | 80 | - (void)fd_viewWillAppear:(BOOL)animated 81 | { 82 | // Forward to primary implementation. 83 | [self fd_viewWillAppear:animated]; 84 | 85 | if (self.fd_willAppearInjectBlock) { 86 | self.fd_willAppearInjectBlock(self, animated); 87 | } 88 | } 89 | 90 | - (_FDViewControllerWillAppearInjectBlock)fd_willAppearInjectBlock 91 | { 92 | return objc_getAssociatedObject(self, _cmd); 93 | } 94 | 95 | - (void)setFd_willAppearInjectBlock:(_FDViewControllerWillAppearInjectBlock)block 96 | { 97 | objc_setAssociatedObject(self, @selector(fd_willAppearInjectBlock), block, OBJC_ASSOCIATION_COPY_NONATOMIC); 98 | } 99 | 100 | @end 101 | 102 | @implementation UINavigationController (FDFullscreenPopGesture) 103 | 104 | + (void)load 105 | { 106 | // Inject "-pushViewController:animated:" 107 | Method originalMethod = class_getInstanceMethod(self, @selector(pushViewController:animated:)); 108 | Method swizzledMethod = class_getInstanceMethod(self, @selector(fd_pushViewController:animated:)); 109 | method_exchangeImplementations(originalMethod, swizzledMethod); 110 | } 111 | 112 | - (void)fd_pushViewController:(UIViewController *)viewController animated:(BOOL)animated 113 | { 114 | if (![self.interactivePopGestureRecognizer.view.gestureRecognizers containsObject:self.fd_fullscreenPopGestureRecognizer]) { 115 | 116 | // Add our own gesture recognizer to where the onboard screen edge pan gesture recognizer is attached to. 117 | [self.interactivePopGestureRecognizer.view addGestureRecognizer:self.fd_fullscreenPopGestureRecognizer]; 118 | 119 | // Forward the gesture events to the private handler of the onboard gesture recognizer. 120 | NSArray *internalTargets = [self.interactivePopGestureRecognizer valueForKey:@"targets"]; 121 | id internalTarget = [internalTargets.firstObject valueForKey:@"target"]; 122 | SEL internalAction = NSSelectorFromString(@"handleNavigationTransition:"); 123 | self.fd_fullscreenPopGestureRecognizer.delegate = self.fd_popGestureRecognizerDelegate; 124 | [self.fd_fullscreenPopGestureRecognizer addTarget:internalTarget action:internalAction]; 125 | 126 | // Disable the onboard gesture recognizer. 127 | self.interactivePopGestureRecognizer.enabled = NO; 128 | } 129 | 130 | // Handle perferred navigation bar appearance. 131 | [self fd_setupViewControllerBasedNavigationBarAppearanceIfNeeded:viewController]; 132 | 133 | // Forward to primary implementation. 134 | [self fd_pushViewController:viewController animated:animated]; 135 | } 136 | 137 | - (void)fd_setupViewControllerBasedNavigationBarAppearanceIfNeeded:(UIViewController *)appearingViewController 138 | { 139 | if (!self.fd_viewControllerBasedNavigationBarAppearanceEnabled) { 140 | return; 141 | } 142 | 143 | __weak typeof(self) weakSelf = self; 144 | _FDViewControllerWillAppearInjectBlock block = ^(UIViewController *viewController, BOOL animated) { 145 | __strong typeof(weakSelf) strongSelf = weakSelf; 146 | if (strongSelf) { 147 | [strongSelf setNavigationBarHidden:viewController.fd_prefersNavigationBarHidden animated:animated]; 148 | } 149 | }; 150 | 151 | // Setup will appear inject block to appearing view controller. 152 | // Setup disappearing view controller as well, because not every view controller is added into 153 | // stack by pushing, maybe by "-setViewControllers:". 154 | appearingViewController.fd_willAppearInjectBlock = block; 155 | UIViewController *disappearingViewController = self.viewControllers.lastObject; 156 | if (disappearingViewController && !disappearingViewController.fd_willAppearInjectBlock) { 157 | disappearingViewController.fd_willAppearInjectBlock = block; 158 | } 159 | } 160 | 161 | - (_FDFullscreenPopGestureRecognizerDelegate *)fd_popGestureRecognizerDelegate 162 | { 163 | _FDFullscreenPopGestureRecognizerDelegate *delegate = objc_getAssociatedObject(self, _cmd); 164 | 165 | if (!delegate) { 166 | delegate = [[_FDFullscreenPopGestureRecognizerDelegate alloc] init]; 167 | delegate.navigationController = self; 168 | 169 | objc_setAssociatedObject(self, _cmd, delegate, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 170 | } 171 | return delegate; 172 | } 173 | 174 | - (UIPanGestureRecognizer *)fd_fullscreenPopGestureRecognizer 175 | { 176 | UIPanGestureRecognizer *panGestureRecognizer = objc_getAssociatedObject(self, _cmd); 177 | 178 | if (!panGestureRecognizer) { 179 | panGestureRecognizer = [[UIPanGestureRecognizer alloc] init]; 180 | panGestureRecognizer.maximumNumberOfTouches = 1; 181 | 182 | objc_setAssociatedObject(self, _cmd, panGestureRecognizer, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 183 | } 184 | return panGestureRecognizer; 185 | } 186 | 187 | - (BOOL)fd_viewControllerBasedNavigationBarAppearanceEnabled 188 | { 189 | NSNumber *number = objc_getAssociatedObject(self, _cmd); 190 | if (number) { 191 | return number.boolValue; 192 | } 193 | self.fd_viewControllerBasedNavigationBarAppearanceEnabled = YES; 194 | return YES; 195 | } 196 | 197 | - (void)setFd_viewControllerBasedNavigationBarAppearanceEnabled:(BOOL)enabled 198 | { 199 | SEL key = @selector(fd_viewControllerBasedNavigationBarAppearanceEnabled); 200 | objc_setAssociatedObject(self, key, @(enabled), OBJC_ASSOCIATION_RETAIN_NONATOMIC); 201 | } 202 | 203 | @end 204 | 205 | @implementation UIViewController (FDFullscreenPopGesture) 206 | 207 | - (BOOL)fd_interactivePopDisabled 208 | { 209 | return [objc_getAssociatedObject(self, _cmd) boolValue]; 210 | } 211 | 212 | - (void)setFd_interactivePopDisabled:(BOOL)disabled 213 | { 214 | objc_setAssociatedObject(self, @selector(fd_interactivePopDisabled), @(disabled), OBJC_ASSOCIATION_RETAIN_NONATOMIC); 215 | } 216 | 217 | - (BOOL)fd_prefersNavigationBarHidden 218 | { 219 | return [objc_getAssociatedObject(self, _cmd) boolValue]; 220 | } 221 | 222 | - (void)setFd_prefersNavigationBarHidden:(BOOL)hidden 223 | { 224 | objc_setAssociatedObject(self, @selector(fd_prefersNavigationBarHidden), @(hidden), OBJC_ASSOCIATION_RETAIN_NONATOMIC); 225 | } 226 | 227 | @end 228 | -------------------------------------------------------------------------------- /Pods/FDFullscreenPopGesture/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Pods/FDFullscreenPopGesture/README.md: -------------------------------------------------------------------------------- 1 | # FDFullscreenPopGesture 2 | An UINavigationController's category to enable fullscreen pop gesture in an iOS7+ system style with AOP. 3 | 4 | # Overview 5 | 6 | ![snapshot](https://raw.githubusercontent.com/forkingdog/FDFullscreenPopGesture/master/Snapshots/snapshot0.gif) 7 | 8 | 这个扩展来自 @J_雨 同学的这个很天才的思路,他的文章地址:[http://www.jianshu.com/p/d39f7d22db6c](http://www.jianshu.com/p/d39f7d22db6c) 9 | 10 | # Usage 11 | 12 | **AOP**, just add 2 files and **no need** for any setups, all navigation controllers will be able to use fullscreen pop gesture automatically. 13 | 14 | To disable this pop gesture of a navigation controller: 15 | 16 | ``` objc 17 | navigationController.fd_fullscreenPopGestureRecognizer.enabled = NO; 18 | ``` 19 | 20 | To disable this pop gesture of a view controller: 21 | 22 | ``` objc 23 | viewController.fd_interactivePopDisabled = YES; 24 | ``` 25 | 26 | Require at least iOS **7.0**. 27 | 28 | # View Controller Based Navigation Bar Appearance 29 | 30 | It handles navigation bar transition properly when using fullscreen gesture to push or pop a view controller: 31 | 32 | - with bar -> without bar 33 | - without bar -> with bar 34 | - without bar -> without bar 35 | 36 | ![snapshot with bar states](https://raw.githubusercontent.com/forkingdog/FDFullscreenPopGesture/master/Snapshots/snapshot1.gif) 37 | 38 | This opmiziation is enabled by default, from now on you don't need to call **UINavigationController**'s `-setNavigationBarHidden:animated:` method, instead, use view controller's specific API to hide its bar: 39 | 40 | ``` objc 41 | - (void)viewDidLoad { 42 | [super viewDidLoad]; 43 | self.fd_prefersNavigationBarHidden = NO; 44 | } 45 | ``` 46 | 47 | And this property is **YES** by default. 48 | 49 | # Installation 50 | 51 | Use cocoapods 52 | 53 | ``` ruby 54 | pod 'FDFullscreenPopGesture', '1.1' 55 | ``` 56 | # Release Notes 57 | 58 | **1.1** - View controller based navigation bar appearance and transition. 59 | **1.0** - Fullscreen pop gesture. 60 | 61 | # License 62 | MIT 63 | -------------------------------------------------------------------------------- /Pods/Headers/Private/FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.h: -------------------------------------------------------------------------------- 1 | ../../../FDFullscreenPopGesture/FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.h -------------------------------------------------------------------------------- /Pods/Headers/Public/FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.h: -------------------------------------------------------------------------------- 1 | ../../../FDFullscreenPopGesture/FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.h -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FDFullscreenPopGesture (1.1) 3 | 4 | DEPENDENCIES: 5 | - FDFullscreenPopGesture 6 | 7 | SPEC CHECKSUMS: 8 | FDFullscreenPopGesture: a8a620179e3d9c40e8e00256dcee1c1a27c6d0f0 9 | 10 | COCOAPODS: 0.39.0 11 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | archiveVersion 6 | 1 7 | classes 8 | 9 | objectVersion 10 | 46 11 | objects 12 | 13 | 037C0CA694176A3C0915F62C9D20B3E6 14 | 15 | children 16 | 17 | B3D1D13E0C6553800746CB8FD61CF946 18 | 19 | isa 20 | PBXGroup 21 | name 22 | Targets Support Files 23 | sourceTree 24 | <group> 25 | 26 | 0FDB9C42CED2FB757C53EBAC2278D51B 27 | 28 | includeInIndex 29 | 1 30 | isa 31 | PBXFileReference 32 | lastKnownFileType 33 | sourcecode.c.h 34 | path 35 | FDFullscreenPopGesture-prefix.pch 36 | sourceTree 37 | <group> 38 | 39 | 10834806BD7B412BC24F347361FA2C8E 40 | 41 | includeInIndex 42 | 1 43 | isa 44 | PBXFileReference 45 | lastKnownFileType 46 | text.plist.xml 47 | path 48 | Pods-acknowledgements.plist 49 | sourceTree 50 | <group> 51 | 52 | 11660A4AA06371948BA52E228E12D47F 53 | 54 | buildActionMask 55 | 2147483647 56 | files 57 | 58 | 9EEF4D50F6317F0062CE5E2950497AD5 59 | 60 | isa 61 | PBXHeadersBuildPhase 62 | runOnlyForDeploymentPostprocessing 63 | 0 64 | 65 | 135A330660F2EF1FF01713C4983BE8B1 66 | 67 | buildConfigurations 68 | 69 | BFEB44B843592448B037ED3D2FEF0CB4 70 | C58700D3559EAF534F6069C1F8D7E614 71 | 72 | defaultConfigurationIsVisible 73 | 0 74 | defaultConfigurationName 75 | Release 76 | isa 77 | XCConfigurationList 78 | 79 | 272643F56613CA0D336AE3DBF19DC404 80 | 81 | includeInIndex 82 | 1 83 | isa 84 | PBXFileReference 85 | lastKnownFileType 86 | sourcecode.c.objc 87 | path 88 | Pods-dummy.m 89 | sourceTree 90 | <group> 91 | 92 | 2BEE3D93D5B9D0BC9947DB91DF2D5F6E 93 | 94 | children 95 | 96 | 31B1E5622D535FBA608A4C9BFED9FE1D 97 | 98 | isa 99 | PBXGroup 100 | name 101 | Pods 102 | sourceTree 103 | <group> 104 | 105 | 2C71DE0FB8A6E5BB6EAF9FB037D799CC 106 | 107 | buildConfigurationList 108 | DEB8E05E380A5AFADB7A5465E8055C85 109 | buildPhases 110 | 111 | C213B1B0181D37FF5CCB1D04E6204052 112 | BF277CFF3871600623A9BD3DD9917447 113 | 11660A4AA06371948BA52E228E12D47F 114 | 115 | buildRules 116 | 117 | dependencies 118 | 119 | isa 120 | PBXNativeTarget 121 | name 122 | FDFullscreenPopGesture 123 | productName 124 | FDFullscreenPopGesture 125 | productReference 126 | 8C8713215BCE21D57330163629D9F017 127 | productType 128 | com.apple.product-type.library.static 129 | 130 | 2CFDF290B1DA069B5D87E5D6C872AE14 131 | 132 | fileRef 133 | 846DD41814B57AD3A0FF56DBAC169E33 134 | isa 135 | PBXBuildFile 136 | settings 137 | 138 | COMPILER_FLAGS 139 | -w -Xanalyzer -analyzer-disable-all-checks 140 | 141 | 142 | 2D8E8EC45A3A1A1D94AE762CB5028504 143 | 144 | buildConfigurations 145 | 146 | A70CDAD61F90AC503C7D04CC22DA2923 147 | FB45FFD90572718D82AB9092B750F0CA 148 | 149 | defaultConfigurationIsVisible 150 | 0 151 | defaultConfigurationName 152 | Release 153 | isa 154 | XCConfigurationList 155 | 156 | 31B1E5622D535FBA608A4C9BFED9FE1D 157 | 158 | children 159 | 160 | D7D69FC856940A73FC3C7904BD218187 161 | 846DD41814B57AD3A0FF56DBAC169E33 162 | 8AB54CE238701055A903619EA3CF2ED2 163 | 164 | isa 165 | PBXGroup 166 | name 167 | FDFullscreenPopGesture 168 | path 169 | FDFullscreenPopGesture 170 | sourceTree 171 | <group> 172 | 173 | 37DB56D75062CC75FCB0966E1C6E8A8E 174 | 175 | includeInIndex 176 | 1 177 | isa 178 | PBXFileReference 179 | lastKnownFileType 180 | text 181 | path 182 | Pods-acknowledgements.markdown 183 | sourceTree 184 | <group> 185 | 186 | 3C1867DD685A61E74D07AFDCB00E0A62 187 | 188 | containerPortal 189 | D41D8CD98F00B204E9800998ECF8427E 190 | isa 191 | PBXContainerItemProxy 192 | proxyType 193 | 1 194 | remoteGlobalIDString 195 | 2C71DE0FB8A6E5BB6EAF9FB037D799CC 196 | remoteInfo 197 | FDFullscreenPopGesture 198 | 199 | 3E4E89230EF59BC255123B67864ACF77 200 | 201 | isa 202 | PBXFileReference 203 | lastKnownFileType 204 | wrapper.framework 205 | name 206 | Foundation.framework 207 | path 208 | Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/Foundation.framework 209 | sourceTree 210 | DEVELOPER_DIR 211 | 212 | 4E762F23EC34ED4A6FF3312D84E33A40 213 | 214 | includeInIndex 215 | 1 216 | isa 217 | PBXFileReference 218 | lastKnownFileType 219 | text.xcconfig 220 | path 221 | Pods.debug.xcconfig 222 | sourceTree 223 | <group> 224 | 225 | 57BC84EFB64F2EB953ABD18F81E0F220 226 | 227 | fileRef 228 | AC5C3EE5BAD1BD856E1ADBD254FBAD83 229 | isa 230 | PBXBuildFile 231 | 232 | 5CE4DBCD91197A9137862317F5834192 233 | 234 | buildConfigurationList 235 | 135A330660F2EF1FF01713C4983BE8B1 236 | buildPhases 237 | 238 | 9A00BF26BB389AD34950284BDC9614D6 239 | 74084AABBB8DA4DFF3E7270E368EE0C8 240 | 241 | buildRules 242 | 243 | dependencies 244 | 245 | 718AE6D39FD086D01273C536EA8D9F8D 246 | 247 | isa 248 | PBXNativeTarget 249 | name 250 | Pods 251 | productName 252 | Pods 253 | productReference 254 | 7C143DA3E222999354B51EDCE2829B06 255 | productType 256 | com.apple.product-type.library.static 257 | 258 | 5DA382A8C741E1651E444BA7F5406C6A 259 | 260 | fileRef 261 | 3E4E89230EF59BC255123B67864ACF77 262 | isa 263 | PBXBuildFile 264 | 265 | 6911BECA35E7518D864239B7E898EEF3 266 | 267 | includeInIndex 268 | 1 269 | isa 270 | PBXFileReference 271 | lastKnownFileType 272 | text.script.sh 273 | path 274 | Pods-frameworks.sh 275 | sourceTree 276 | <group> 277 | 278 | 718AE6D39FD086D01273C536EA8D9F8D 279 | 280 | isa 281 | PBXTargetDependency 282 | name 283 | FDFullscreenPopGesture 284 | target 285 | 2C71DE0FB8A6E5BB6EAF9FB037D799CC 286 | targetProxy 287 | 3C1867DD685A61E74D07AFDCB00E0A62 288 | 289 | 725D2568501CF800A51188C7C062C49A 290 | 291 | baseConfigurationReference 292 | E130D16A2AC04283692C24C756F70BFC 293 | buildSettings 294 | 295 | ENABLE_STRICT_OBJC_MSGSEND 296 | YES 297 | GCC_PREFIX_HEADER 298 | Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture-prefix.pch 299 | IPHONEOS_DEPLOYMENT_TARGET 300 | 8.0 301 | MTL_ENABLE_DEBUG_INFO 302 | NO 303 | OTHER_LDFLAGS 304 | 305 | OTHER_LIBTOOLFLAGS 306 | 307 | PRIVATE_HEADERS_FOLDER_PATH 308 | 309 | PRODUCT_NAME 310 | $(TARGET_NAME) 311 | PUBLIC_HEADERS_FOLDER_PATH 312 | 313 | SDKROOT 314 | iphoneos 315 | SKIP_INSTALL 316 | YES 317 | 318 | isa 319 | XCBuildConfiguration 320 | name 321 | Release 322 | 323 | 74084AABBB8DA4DFF3E7270E368EE0C8 324 | 325 | buildActionMask 326 | 2147483647 327 | files 328 | 329 | F21CAA046CA4B96017073324541D2A74 330 | 331 | isa 332 | PBXFrameworksBuildPhase 333 | runOnlyForDeploymentPostprocessing 334 | 0 335 | 336 | 7C143DA3E222999354B51EDCE2829B06 337 | 338 | explicitFileType 339 | archive.ar 340 | includeInIndex 341 | 0 342 | isa 343 | PBXFileReference 344 | name 345 | libPods.a 346 | path 347 | libPods.a 348 | sourceTree 349 | BUILT_PRODUCTS_DIR 350 | 351 | 7DB346D0F39D3F0E887471402A8071AB 352 | 353 | children 354 | 355 | BA6428E9F66FD5A23C0A2E06ED26CD2F 356 | BC3CA7F9E30CC8F7E2DD044DD34432FC 357 | 2BEE3D93D5B9D0BC9947DB91DF2D5F6E 358 | 9CBBCC426B8D76DE0C7D5408422D1B1E 359 | 037C0CA694176A3C0915F62C9D20B3E6 360 | 361 | isa 362 | PBXGroup 363 | sourceTree 364 | <group> 365 | 366 | 846DD41814B57AD3A0FF56DBAC169E33 367 | 368 | includeInIndex 369 | 1 370 | isa 371 | PBXFileReference 372 | lastKnownFileType 373 | sourcecode.c.objc 374 | name 375 | UINavigationController+FDFullscreenPopGesture.m 376 | path 377 | FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.m 378 | sourceTree 379 | <group> 380 | 381 | 8AB54CE238701055A903619EA3CF2ED2 382 | 383 | children 384 | 385 | E130D16A2AC04283692C24C756F70BFC 386 | AC5C3EE5BAD1BD856E1ADBD254FBAD83 387 | 0FDB9C42CED2FB757C53EBAC2278D51B 388 | 389 | isa 390 | PBXGroup 391 | name 392 | Support Files 393 | path 394 | ../Target Support Files/FDFullscreenPopGesture 395 | sourceTree 396 | <group> 397 | 398 | 8C8713215BCE21D57330163629D9F017 399 | 400 | explicitFileType 401 | archive.ar 402 | includeInIndex 403 | 0 404 | isa 405 | PBXFileReference 406 | name 407 | libFDFullscreenPopGesture.a 408 | path 409 | libFDFullscreenPopGesture.a 410 | sourceTree 411 | BUILT_PRODUCTS_DIR 412 | 413 | 98C98CDFB3F20F2925F6CD1F141BB14F 414 | 415 | includeInIndex 416 | 1 417 | isa 418 | PBXFileReference 419 | lastKnownFileType 420 | text.xcconfig 421 | path 422 | Pods.release.xcconfig 423 | sourceTree 424 | <group> 425 | 426 | 9A00BF26BB389AD34950284BDC9614D6 427 | 428 | buildActionMask 429 | 2147483647 430 | files 431 | 432 | A3A94999904837085A9A1C7CA7A560AA 433 | 434 | isa 435 | PBXSourcesBuildPhase 436 | runOnlyForDeploymentPostprocessing 437 | 0 438 | 439 | 9CBBCC426B8D76DE0C7D5408422D1B1E 440 | 441 | children 442 | 443 | 8C8713215BCE21D57330163629D9F017 444 | 7C143DA3E222999354B51EDCE2829B06 445 | 446 | isa 447 | PBXGroup 448 | name 449 | Products 450 | sourceTree 451 | <group> 452 | 453 | 9EEF4D50F6317F0062CE5E2950497AD5 454 | 455 | fileRef 456 | D7D69FC856940A73FC3C7904BD218187 457 | isa 458 | PBXBuildFile 459 | settings 460 | 461 | ATTRIBUTES 462 | 463 | Public 464 | 465 | 466 | 467 | A1A36D34413696BE466E2CA0AFF194DA 468 | 469 | includeInIndex 470 | 1 471 | isa 472 | PBXFileReference 473 | lastKnownFileType 474 | text.script.sh 475 | path 476 | Pods-resources.sh 477 | sourceTree 478 | <group> 479 | 480 | A3A94999904837085A9A1C7CA7A560AA 481 | 482 | fileRef 483 | 272643F56613CA0D336AE3DBF19DC404 484 | isa 485 | PBXBuildFile 486 | 487 | A70CDAD61F90AC503C7D04CC22DA2923 488 | 489 | buildSettings 490 | 491 | ALWAYS_SEARCH_USER_PATHS 492 | NO 493 | CLANG_CXX_LANGUAGE_STANDARD 494 | gnu++0x 495 | CLANG_CXX_LIBRARY 496 | libc++ 497 | CLANG_ENABLE_MODULES 498 | YES 499 | CLANG_ENABLE_OBJC_ARC 500 | YES 501 | CLANG_WARN_BOOL_CONVERSION 502 | YES 503 | CLANG_WARN_CONSTANT_CONVERSION 504 | YES 505 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE 506 | YES 507 | CLANG_WARN_EMPTY_BODY 508 | YES 509 | CLANG_WARN_ENUM_CONVERSION 510 | YES 511 | CLANG_WARN_INT_CONVERSION 512 | YES 513 | CLANG_WARN_OBJC_ROOT_CLASS 514 | YES 515 | CLANG_WARN_UNREACHABLE_CODE 516 | YES 517 | CLANG_WARN__DUPLICATE_METHOD_MATCH 518 | YES 519 | COPY_PHASE_STRIP 520 | NO 521 | GCC_C_LANGUAGE_STANDARD 522 | gnu99 523 | GCC_DYNAMIC_NO_PIC 524 | NO 525 | GCC_OPTIMIZATION_LEVEL 526 | 0 527 | GCC_PREPROCESSOR_DEFINITIONS 528 | 529 | DEBUG=1 530 | $(inherited) 531 | 532 | GCC_SYMBOLS_PRIVATE_EXTERN 533 | NO 534 | GCC_WARN_64_TO_32_BIT_CONVERSION 535 | YES 536 | GCC_WARN_ABOUT_RETURN_TYPE 537 | YES 538 | GCC_WARN_UNDECLARED_SELECTOR 539 | YES 540 | GCC_WARN_UNINITIALIZED_AUTOS 541 | YES 542 | GCC_WARN_UNUSED_FUNCTION 543 | YES 544 | GCC_WARN_UNUSED_VARIABLE 545 | YES 546 | IPHONEOS_DEPLOYMENT_TARGET 547 | 8.0 548 | ONLY_ACTIVE_ARCH 549 | YES 550 | STRIP_INSTALLED_PRODUCT 551 | NO 552 | SYMROOT 553 | ${SRCROOT}/../build 554 | 555 | isa 556 | XCBuildConfiguration 557 | name 558 | Debug 559 | 560 | AC5C3EE5BAD1BD856E1ADBD254FBAD83 561 | 562 | includeInIndex 563 | 1 564 | isa 565 | PBXFileReference 566 | lastKnownFileType 567 | sourcecode.c.objc 568 | path 569 | FDFullscreenPopGesture-dummy.m 570 | sourceTree 571 | <group> 572 | 573 | B3D1D13E0C6553800746CB8FD61CF946 574 | 575 | children 576 | 577 | 37DB56D75062CC75FCB0966E1C6E8A8E 578 | 10834806BD7B412BC24F347361FA2C8E 579 | 272643F56613CA0D336AE3DBF19DC404 580 | 6911BECA35E7518D864239B7E898EEF3 581 | A1A36D34413696BE466E2CA0AFF194DA 582 | 4E762F23EC34ED4A6FF3312D84E33A40 583 | 98C98CDFB3F20F2925F6CD1F141BB14F 584 | 585 | isa 586 | PBXGroup 587 | name 588 | Pods 589 | path 590 | Target Support Files/Pods 591 | sourceTree 592 | <group> 593 | 594 | BA6428E9F66FD5A23C0A2E06ED26CD2F 595 | 596 | includeInIndex 597 | 1 598 | isa 599 | PBXFileReference 600 | lastKnownFileType 601 | text 602 | name 603 | Podfile 604 | path 605 | ../Podfile 606 | sourceTree 607 | SOURCE_ROOT 608 | xcLanguageSpecificationIdentifier 609 | xcode.lang.ruby 610 | 611 | BC3CA7F9E30CC8F7E2DD044DD34432FC 612 | 613 | children 614 | 615 | BF6342C8B29F4CEEA088EFF7AB4DE362 616 | 617 | isa 618 | PBXGroup 619 | name 620 | Frameworks 621 | sourceTree 622 | <group> 623 | 624 | BF277CFF3871600623A9BD3DD9917447 625 | 626 | buildActionMask 627 | 2147483647 628 | files 629 | 630 | 5DA382A8C741E1651E444BA7F5406C6A 631 | 632 | isa 633 | PBXFrameworksBuildPhase 634 | runOnlyForDeploymentPostprocessing 635 | 0 636 | 637 | BF6342C8B29F4CEEA088EFF7AB4DE362 638 | 639 | children 640 | 641 | 3E4E89230EF59BC255123B67864ACF77 642 | 643 | isa 644 | PBXGroup 645 | name 646 | iOS 647 | sourceTree 648 | <group> 649 | 650 | BFEB44B843592448B037ED3D2FEF0CB4 651 | 652 | baseConfigurationReference 653 | 4E762F23EC34ED4A6FF3312D84E33A40 654 | buildSettings 655 | 656 | ENABLE_STRICT_OBJC_MSGSEND 657 | YES 658 | IPHONEOS_DEPLOYMENT_TARGET 659 | 8.0 660 | MACH_O_TYPE 661 | staticlib 662 | MTL_ENABLE_DEBUG_INFO 663 | YES 664 | OTHER_LDFLAGS 665 | 666 | OTHER_LIBTOOLFLAGS 667 | 668 | PODS_ROOT 669 | $(SRCROOT) 670 | PRODUCT_NAME 671 | $(TARGET_NAME) 672 | SDKROOT 673 | iphoneos 674 | SKIP_INSTALL 675 | YES 676 | 677 | isa 678 | XCBuildConfiguration 679 | name 680 | Debug 681 | 682 | C213B1B0181D37FF5CCB1D04E6204052 683 | 684 | buildActionMask 685 | 2147483647 686 | files 687 | 688 | 57BC84EFB64F2EB953ABD18F81E0F220 689 | 2CFDF290B1DA069B5D87E5D6C872AE14 690 | 691 | isa 692 | PBXSourcesBuildPhase 693 | runOnlyForDeploymentPostprocessing 694 | 0 695 | 696 | C58700D3559EAF534F6069C1F8D7E614 697 | 698 | baseConfigurationReference 699 | 98C98CDFB3F20F2925F6CD1F141BB14F 700 | buildSettings 701 | 702 | ENABLE_STRICT_OBJC_MSGSEND 703 | YES 704 | IPHONEOS_DEPLOYMENT_TARGET 705 | 8.0 706 | MACH_O_TYPE 707 | staticlib 708 | MTL_ENABLE_DEBUG_INFO 709 | NO 710 | OTHER_LDFLAGS 711 | 712 | OTHER_LIBTOOLFLAGS 713 | 714 | PODS_ROOT 715 | $(SRCROOT) 716 | PRODUCT_NAME 717 | $(TARGET_NAME) 718 | SDKROOT 719 | iphoneos 720 | SKIP_INSTALL 721 | YES 722 | 723 | isa 724 | XCBuildConfiguration 725 | name 726 | Release 727 | 728 | D41D8CD98F00B204E9800998ECF8427E 729 | 730 | attributes 731 | 732 | LastSwiftUpdateCheck 733 | 0700 734 | LastUpgradeCheck 735 | 0700 736 | 737 | buildConfigurationList 738 | 2D8E8EC45A3A1A1D94AE762CB5028504 739 | compatibilityVersion 740 | Xcode 3.2 741 | developmentRegion 742 | English 743 | hasScannedForEncodings 744 | 0 745 | isa 746 | PBXProject 747 | knownRegions 748 | 749 | en 750 | 751 | mainGroup 752 | 7DB346D0F39D3F0E887471402A8071AB 753 | productRefGroup 754 | 9CBBCC426B8D76DE0C7D5408422D1B1E 755 | projectDirPath 756 | 757 | projectReferences 758 | 759 | projectRoot 760 | 761 | targets 762 | 763 | 2C71DE0FB8A6E5BB6EAF9FB037D799CC 764 | 5CE4DBCD91197A9137862317F5834192 765 | 766 | 767 | D7D69FC856940A73FC3C7904BD218187 768 | 769 | includeInIndex 770 | 1 771 | isa 772 | PBXFileReference 773 | lastKnownFileType 774 | sourcecode.c.h 775 | name 776 | UINavigationController+FDFullscreenPopGesture.h 777 | path 778 | FDFullscreenPopGesture/UINavigationController+FDFullscreenPopGesture.h 779 | sourceTree 780 | <group> 781 | 782 | DEB8E05E380A5AFADB7A5465E8055C85 783 | 784 | buildConfigurations 785 | 786 | FAFAEF3992DAD3196C6AB5C7C1111C38 787 | 725D2568501CF800A51188C7C062C49A 788 | 789 | defaultConfigurationIsVisible 790 | 0 791 | defaultConfigurationName 792 | Release 793 | isa 794 | XCConfigurationList 795 | 796 | E130D16A2AC04283692C24C756F70BFC 797 | 798 | includeInIndex 799 | 1 800 | isa 801 | PBXFileReference 802 | lastKnownFileType 803 | text.xcconfig 804 | path 805 | FDFullscreenPopGesture.xcconfig 806 | sourceTree 807 | <group> 808 | 809 | F21CAA046CA4B96017073324541D2A74 810 | 811 | fileRef 812 | 3E4E89230EF59BC255123B67864ACF77 813 | isa 814 | PBXBuildFile 815 | 816 | FAFAEF3992DAD3196C6AB5C7C1111C38 817 | 818 | baseConfigurationReference 819 | E130D16A2AC04283692C24C756F70BFC 820 | buildSettings 821 | 822 | ENABLE_STRICT_OBJC_MSGSEND 823 | YES 824 | GCC_PREFIX_HEADER 825 | Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture-prefix.pch 826 | IPHONEOS_DEPLOYMENT_TARGET 827 | 8.0 828 | MTL_ENABLE_DEBUG_INFO 829 | YES 830 | OTHER_LDFLAGS 831 | 832 | OTHER_LIBTOOLFLAGS 833 | 834 | PRIVATE_HEADERS_FOLDER_PATH 835 | 836 | PRODUCT_NAME 837 | $(TARGET_NAME) 838 | PUBLIC_HEADERS_FOLDER_PATH 839 | 840 | SDKROOT 841 | iphoneos 842 | SKIP_INSTALL 843 | YES 844 | 845 | isa 846 | XCBuildConfiguration 847 | name 848 | Debug 849 | 850 | FB45FFD90572718D82AB9092B750F0CA 851 | 852 | buildSettings 853 | 854 | ALWAYS_SEARCH_USER_PATHS 855 | NO 856 | CLANG_CXX_LANGUAGE_STANDARD 857 | gnu++0x 858 | CLANG_CXX_LIBRARY 859 | libc++ 860 | CLANG_ENABLE_MODULES 861 | YES 862 | CLANG_ENABLE_OBJC_ARC 863 | YES 864 | CLANG_WARN_BOOL_CONVERSION 865 | YES 866 | CLANG_WARN_CONSTANT_CONVERSION 867 | YES 868 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE 869 | YES 870 | CLANG_WARN_EMPTY_BODY 871 | YES 872 | CLANG_WARN_ENUM_CONVERSION 873 | YES 874 | CLANG_WARN_INT_CONVERSION 875 | YES 876 | CLANG_WARN_OBJC_ROOT_CLASS 877 | YES 878 | CLANG_WARN_UNREACHABLE_CODE 879 | YES 880 | CLANG_WARN__DUPLICATE_METHOD_MATCH 881 | YES 882 | COPY_PHASE_STRIP 883 | YES 884 | ENABLE_NS_ASSERTIONS 885 | NO 886 | GCC_C_LANGUAGE_STANDARD 887 | gnu99 888 | GCC_PREPROCESSOR_DEFINITIONS 889 | 890 | RELEASE=1 891 | 892 | GCC_WARN_64_TO_32_BIT_CONVERSION 893 | YES 894 | GCC_WARN_ABOUT_RETURN_TYPE 895 | YES 896 | GCC_WARN_UNDECLARED_SELECTOR 897 | YES 898 | GCC_WARN_UNINITIALIZED_AUTOS 899 | YES 900 | GCC_WARN_UNUSED_FUNCTION 901 | YES 902 | GCC_WARN_UNUSED_VARIABLE 903 | YES 904 | IPHONEOS_DEPLOYMENT_TARGET 905 | 8.0 906 | STRIP_INSTALLED_PRODUCT 907 | NO 908 | SYMROOT 909 | ${SRCROOT}/../build 910 | VALIDATE_PRODUCT 911 | YES 912 | 913 | isa 914 | XCBuildConfiguration 915 | name 916 | Release 917 | 918 | 919 | rootObject 920 | D41D8CD98F00B204E9800998ECF8427E 921 | 922 | 923 | -------------------------------------------------------------------------------- /Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_FDFullscreenPopGesture : NSObject 3 | @end 4 | @implementation PodsDummy_FDFullscreenPopGesture 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Pods/Target Support Files/FDFullscreenPopGesture/FDFullscreenPopGesture.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FDFullscreenPopGesture" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FDFullscreenPopGesture" 3 | PODS_ROOT = ${SRCROOT} 4 | SKIP_INSTALL = YES -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## FDFullscreenPopGesture 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2015 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | 29 | Generated by CocoaPods - http://cocoapods.org 30 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | The MIT License (MIT) 18 | 19 | Copyright (c) 2015 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | 40 | Title 41 | FDFullscreenPopGesture 42 | Type 43 | PSGroupSpecifier 44 | 45 | 46 | FooterText 47 | Generated by CocoaPods - http://cocoapods.org 48 | Title 49 | 50 | Type 51 | PSGroupSpecifier 52 | 53 | 54 | StringsTable 55 | Acknowledgements 56 | Title 57 | Acknowledgements 58 | 59 | 60 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods : NSObject 3 | @end 4 | @implementation PodsDummy_Pods 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | realpath() { 12 | DIRECTORY="$(cd "${1%/*}" && pwd)" 13 | FILENAME="${1##*/}" 14 | echo "$DIRECTORY/$FILENAME" 15 | } 16 | 17 | install_resource() 18 | { 19 | case $1 in 20 | *.storyboard) 21 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" 22 | ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" 23 | ;; 24 | *.xib) 25 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" 26 | ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" 27 | ;; 28 | *.framework) 29 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 30 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 31 | echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 32 | rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 33 | ;; 34 | *.xcdatamodel) 35 | echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" 36 | xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" 37 | ;; 38 | *.xcdatamodeld) 39 | echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" 40 | xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" 41 | ;; 42 | *.xcmappingmodel) 43 | echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" 44 | xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" 45 | ;; 46 | *.xcassets) 47 | ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") 48 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 49 | ;; 50 | /*) 51 | echo "$1" 52 | echo "$1" >> "$RESOURCES_TO_COPY" 53 | ;; 54 | *) 55 | echo "${PODS_ROOT}/$1" 56 | echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" 57 | ;; 58 | esac 59 | } 60 | 61 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 62 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 63 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 64 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 65 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 66 | fi 67 | rm -f "$RESOURCES_TO_COPY" 68 | 69 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 70 | then 71 | case "${TARGETED_DEVICE_FAMILY}" in 72 | 1,2) 73 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 74 | ;; 75 | 1) 76 | TARGET_DEVICE_ARGS="--target-device iphone" 77 | ;; 78 | 2) 79 | TARGET_DEVICE_ARGS="--target-device ipad" 80 | ;; 81 | *) 82 | TARGET_DEVICE_ARGS="--target-device mac" 83 | ;; 84 | esac 85 | 86 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 87 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 88 | while read line; do 89 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 90 | XCASSET_FILES+=("$line") 91 | fi 92 | done <<<"$OTHER_XCASSETS" 93 | 94 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 95 | fi 96 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FDFullscreenPopGesture" 3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/FDFullscreenPopGesture" 4 | OTHER_LDFLAGS = $(inherited) -ObjC -l"FDFullscreenPopGesture" 5 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FDFullscreenPopGesture" 3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/FDFullscreenPopGesture" 4 | OTHER_LDFLAGS = $(inherited) -ObjC -l"FDFullscreenPopGesture" 5 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FadeAnimation 2 | 任何在A控制器showviewcontroller到B控制器,实现自定义跳转动画,跳转动画需要自己实现. 3 | 拦截跳转时机,将自定义跳转动画展示. 4 | 抽取一个类,专门来控制跳转动画. 5 | 只需要在BBRegulateAnimation类中注册动画,使用动画即可. 6 | 7 | //注册动画 A控制器 B控制器 8 | 9 | registerTransition([BBFadeController class], [BBFirstViewController class], ^id{ 10 | 11 | //自定义动画 12 | BBFadeAnimation *animationController = [[BBFadeAnimation alloc]init]; 13 | 14 | //动画时间 15 | animationController.duration = 0.5f; 16 | 17 | //返回时是否执行相同动画 18 | animationController.reverse = YES; 19 | return animationController; 20 | }); 21 | 22 | --------------------------------------------------------------------------------