├── .gitignore ├── Carthage └── Build │ ├── .UIDrawer.version │ └── iOS │ ├── 9C4E07B7-C8A2-3F3E-8780-B95EC27E27F1.bcsymbolmap │ ├── UIDrawer.framework.dSYM │ └── Contents │ │ ├── Info.plist │ │ └── Resources │ │ └── DWARF │ │ └── UIDrawer │ └── UIDrawer.framework │ ├── Headers │ ├── UIDrawer-Swift.h │ └── UIDrawer.h │ ├── Info.plist │ ├── Modules │ ├── UIDrawer.swiftmodule │ │ ├── arm64.swiftdoc │ │ ├── arm64.swiftmodule │ │ ├── x86_64.swiftdoc │ │ └── x86_64.swiftmodule │ └── module.modulemap │ └── UIDrawer ├── Example ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json ├── Base.lproj │ └── LaunchScreen.storyboard ├── DrawerViewController.swift ├── Info.plist └── ViewController.swift ├── LICENSE ├── README.md ├── UIDrawer.framework.zip ├── UIDrawer.podspec ├── UIDrawer.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── xcshareddata │ └── xcschemes │ │ └── UIDrawer.xcscheme └── xcuserdata │ └── personnal.xcuserdatad │ └── xcschemes │ ├── Example.xcscheme │ └── xcschememanagement.plist ├── UIDrawer ├── DrawerPresentationController.swift ├── DrawerPresentationControllerDelegate.swift ├── Info.plist └── UIDrawer.h └── demo.gif /.gitignore: -------------------------------------------------------------------------------- 1 | UserInterfaceState.xcuserstate 2 | -------------------------------------------------------------------------------- /Carthage/Build/.UIDrawer.version: -------------------------------------------------------------------------------- 1 | { 2 | "Mac" : [ 3 | 4 | ], 5 | "watchOS" : [ 6 | 7 | ], 8 | "tvOS" : [ 9 | 10 | ], 11 | "commitish" : "0.1", 12 | "iOS" : [ 13 | { 14 | "name" : "UIDrawer", 15 | "hash" : "35f0fe117d8efa4f372d6557b12ab311cd53da97b11d4bcd26012c8f1f3c99f2", 16 | "swiftToolchainVersion" : "5.0 (swiftlang-1001.0.69.5 clang-1001.0.46.3)" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Carthage/Build/iOS/9C4E07B7-C8A2-3F3E-8780-B95EC27E27F1.bcsymbolmap: -------------------------------------------------------------------------------- 1 | BCSymbolMap Version: 2.0 2 | _$s8UIDrawer36DrawerPresentationControllerDelegate_pSgWOe 3 | _$s8UIDrawer28DrawerPresentationControllerC14drawerDelegateAA0bcdF0_pSgvM.resume.0 4 | _$s8UIDrawer28DrawerPresentationControllerCIetMg_TC 5 | _$s8UIDrawer28DrawerPresentationControllerC6topGap12CoreGraphics7CGFloatVvgTm 6 | _$s8UIDrawer28DrawerPresentationControllerC6topGap12CoreGraphics7CGFloatVvsTm 7 | _$s8UIDrawer28DrawerPresentationControllerC12cornerRadius12CoreGraphics7CGFloatVvM.resume.0 8 | _$s8UIDrawer28DrawerPresentationControllerC14blurEffectViewSo08UIVisualfG0Cvg 9 | _$s8UIDrawer28DrawerPresentationControllerC031frameOfPresentedViewInContainerH0So6CGRectVvgTo 10 | _$s8UIDrawer28DrawerPresentationControllerC20tapGestureRecognizerSo05UITapfG0Cvg 11 | _$s8UIDrawer28DrawerPresentationControllerC10panGestureSo05UIPanF10RecognizerCvg 12 | _$s8UIDrawer28DrawerPresentationControllerC013presentedViewD010presenting14drawerDelegate15blurEffectStyle6topGap5width12cornerRadiusACSo06UIViewD0C_ALSgAA0bcdI0_pSgSo06UIBlurkL0V12CoreGraphics7CGFloatVA2TtcfcfA1_ 13 | _$s8UIDrawer28DrawerPresentationControllerC013presentedViewD010presenting14drawerDelegate15blurEffectStyle6topGap5width12cornerRadiusACSo06UIViewD0C_ALSgAA0bcdI0_pSgSo06UIBlurkL0V12CoreGraphics7CGFloatVA2TtcfcfA2_ 14 | _$s8UIDrawer28DrawerPresentationControllerC013presentedViewD010presenting14drawerDelegate15blurEffectStyle6topGap5width12cornerRadiusACSo06UIViewD0C_ALSgAA0bcdI0_pSgSo06UIBlurkL0V12CoreGraphics7CGFloatVA2TtcfcfA3_ 15 | _$s8UIDrawer28DrawerPresentationControllerC013presentedViewD010presenting14drawerDelegate15blurEffectStyle6topGap5width12cornerRadiusACSo06UIViewD0C_ALSgAA0bcdI0_pSgSo06UIBlurkL0V12CoreGraphics7CGFloatVA2TtcfcfA4_ 16 | _$s8UIDrawer28DrawerPresentationControllerC013presentedViewD010presenting14drawerDelegate15blurEffectStyle6topGap5width12cornerRadiusACSo06UIViewD0C_ALSgAA0bcdI0_pSgSo06UIBlurkL0V12CoreGraphics7CGFloatVA2TtcfcfA5_ 17 | _$s8UIDrawer28DrawerPresentationControllerC013presentedViewD010presentingACSo06UIViewD0C_AGSgtcfc 18 | _$s8UIDrawer28DrawerPresentationControllerC013presentedViewD010presentingACSo06UIViewD0C_AGSgtcfcTo 19 | _$s8UIDrawer28DrawerPresentationControllerC28dismissalTransitionWillBeginyyFySo06UIViewdF18CoordinatorContext_pcfU_TA 20 | _$sSo44UIViewControllerTransitionCoordinatorContext_pIegg_SoAA_pIeyBy_TR 21 | _block_copy_helper 22 | _block_destroy_helper 23 | _$s8UIDrawer28DrawerPresentationControllerC28dismissalTransitionWillBeginyyFySo06UIViewdF18CoordinatorContext_pcfU0_ 24 | _$s8UIDrawer28DrawerPresentationControllerC28dismissalTransitionWillBeginyyFySo06UIViewdF18CoordinatorContext_pcfU0_TA 25 | _$s8UIDrawer28DrawerPresentationControllerC28dismissalTransitionWillBeginyyFTo 26 | _$s8UIDrawer28DrawerPresentationControllerC31presentationTransitionWillBeginyyFySo06UIViewdF18CoordinatorContext_pcfU_TA 27 | _$s8UIDrawer28DrawerPresentationControllerC28dismissalTransitionWillBeginyyFySo06UIViewdF18CoordinatorContext_pcfU_TATm 28 | _$s8UIDrawer28DrawerPresentationControllerC31presentationTransitionWillBeginyyFySo06UIViewdF18CoordinatorContext_pcfU0_ 29 | _$s8UIDrawer28DrawerPresentationControllerC31presentationTransitionWillBeginyyFTo 30 | _$sSo6UIViewC8UIDrawerE12roundCorners33_1F2FB62A901D3291FF77D76A2674E07FLL7corners6radiusySo12UIRectCornerV_12CoreGraphics7CGFloatVtF 31 | _$s8UIDrawer28DrawerPresentationControllerC31containerViewWillLayoutSubviewsyyFTo 32 | _$s8UIDrawer28DrawerPresentationControllerC30containerViewDidLayoutSubviewsyyFTo 33 | _$s8UIDrawer28DrawerPresentationControllerC28dismissalTransitionWillBeginyyFToTm 34 | _$s8UIDrawer28DrawerPresentationControllerC7dismissyyFTo 35 | _$s8UIDrawer28DrawerPresentationControllerC4dragyySo22UIPanGestureRecognizerCF 36 | _$s8UIDrawer28DrawerPresentationControllerC4dragyySo22UIPanGestureRecognizerCFTo 37 | _$s8UIDrawer28DrawerPresentationControllerC9didScrollyySo22UIPanGestureRecognizerCF 38 | _$s8UIDrawer28DrawerPresentationControllerC9didScrollyySo22UIPanGestureRecognizerCFTo 39 | _$s8UIDrawer28DrawerPresentationControllerC4dragyySo22UIPanGestureRecognizerCFToTm 40 | _$s8UIDrawer28DrawerPresentationControllerC9sendToTopyyFyycfU_ 41 | _$sIeg_IeyB_TR 42 | _$s8UIDrawer28DrawerPresentationControllerC12sendToMiddleyyFyycfU_ 43 | _$s8UIDrawer28DrawerPresentationControllerCfETo 44 | _$sSo17UIBlurEffectStyleVMa 45 | _$s8UIDrawer28DrawerPresentationControllerC12sendToMiddleyyFyycfU_TA 46 | _$s8UIDrawer28DrawerPresentationControllerC9sendToTopyyFyycfU_TA 47 | ___swift_project_boxed_opaque_existential_0 48 | ___swift_destroy_boxed_opaque_existential_0 49 | _$s8UIDrawer36DrawerPresentationControllerDelegate_pSgXwWOh 50 | _$s8UIDrawer28DrawerPresentationControllerC6topGap12CoreGraphics7CGFloatVvM.resume.0 51 | _$s8UIDrawer28DrawerPresentationControllerC5width12CoreGraphics7CGFloatVvM.resume.0 52 | _$s8UIDrawer28DrawerPresentationControllerC15blurEffectStyleSo06UIBlurfG0VvM.resume.0 53 | _block_destroy_helper.5 54 | _block_destroy_helper.11 55 | _block_destroy_helper.14 56 | _block_destroy_helper.20 57 | _block_destroy_helper.26 58 | _block_copy_helper.4 59 | _block_copy_helper.10 60 | _block_copy_helper.13 61 | _block_copy_helper.19 62 | _block_copy_helper.25 63 | _symbolic 8UIDrawer28DrawerPresentationControllerC 64 | _block_descriptor 65 | _block_descriptor.6 66 | _block_descriptor.12 67 | _block_descriptor.15 68 | _$s8UIDrawer28DrawerPresentationControllerC16currentSnapPoint33_1F2FB62A901D3291FF77D76A2674E07FLLAA05DrawefG0OvpWvd 69 | _$s8UIDrawer28DrawerPresentationControllerC0027blurEffectViewstorage_mvFAh33_1F2FB62A901D3291FF77D76A2674E07FLLSo18UIVisualEffectViewCSgvpWvd 70 | _$s8UIDrawer28DrawerPresentationControllerC0033tapGestureRecognizerstorage_BbGHj33_1F2FB62A901D3291FF77D76A2674E07FLLSo22UITapGestureRecognizerCSgvpWvd 71 | _$s8UIDrawer28DrawerPresentationControllerC0023panGesturestorage_clFCf33_1F2FB62A901D3291FF77D76A2674E07FLLSo22UIPanGestureRecognizerCSgvpWvd 72 | _$s8UIDrawerMXM 73 | _symbolic So24UIPresentationControllerC 74 | _$s8UIDrawer28DrawerPresentationControllerCML 75 | _$s8UIDrawer28DrawerPresentationControllerCMf 76 | _symbolic _____ 8UIDrawer28DrawerPresentationControllerC 77 | _symbolic 8UIDrawer36DrawerPresentationControllerDelegate_pSgXw 78 | _symbolic So17UIBlurEffectStyleV 79 | _symbolic 12CoreGraphics7CGFloatV 80 | _symbolic 8UIDrawer14DraweSnapPointO 81 | _symbolic So18UIVisualEffectViewCSg 82 | _symbolic So22UITapGestureRecognizerCSg 83 | _symbolic So22UIPanGestureRecognizerCSg 84 | _$s8UIDrawer28DrawerPresentationControllerCMF 85 | __swift_FORCE_LOAD_$_swiftFoundation_$_UIDrawer 86 | __swift_FORCE_LOAD_$_swiftDarwin_$_UIDrawer 87 | __swift_FORCE_LOAD_$_swiftObjectiveC_$_UIDrawer 88 | __swift_FORCE_LOAD_$_swiftCoreFoundation_$_UIDrawer 89 | __swift_FORCE_LOAD_$_swiftDispatch_$_UIDrawer 90 | __swift_FORCE_LOAD_$_swiftCoreGraphics_$_UIDrawer 91 | __swift_FORCE_LOAD_$_swiftUIKit_$_UIDrawer 92 | __swift_FORCE_LOAD_$_swiftCoreImage_$_UIDrawer 93 | __swift_FORCE_LOAD_$_swiftMetal_$_UIDrawer 94 | __swift_FORCE_LOAD_$_swiftQuartzCore_$_UIDrawer 95 | _$sSoMXM 96 | _$sSo17UIBlurEffectStyleVMn 97 | _$sSo17UIBlurEffectStyleVN 98 | _$sSo17UIBlurEffectStyleVML 99 | _block_descriptor.21 100 | _block_descriptor.27 101 | _$ss23_ContiguousArrayStorageCyypGML 102 | ___swift_reflection_version 103 | _$sSo17UIBlurEffectStyleVMB 104 | _objc_classes 105 | _$s8UIDrawer28DrawerPresentationControllerC14blurEffectViewSo08UIVisualfG0CvgTq 106 | _$s8UIDrawer28DrawerPresentationControllerC14blurEffectViewSo08UIVisualfG0CvsTq 107 | _$s8UIDrawer28DrawerPresentationControllerC14blurEffectViewSo08UIVisualfG0CvMTq 108 | _$s8UIDrawer28DrawerPresentationControllerC20tapGestureRecognizerSo05UITapfG0CvgTq 109 | _$s8UIDrawer28DrawerPresentationControllerC20tapGestureRecognizerSo05UITapfG0CvsTq 110 | _$s8UIDrawer28DrawerPresentationControllerC20tapGestureRecognizerSo05UITapfG0CvMTq 111 | _$s8UIDrawer28DrawerPresentationControllerC10panGestureSo05UIPanF10RecognizerCvgTq 112 | _$s8UIDrawer28DrawerPresentationControllerC10panGestureSo05UIPanF10RecognizerCvsTq 113 | _$s8UIDrawer28DrawerPresentationControllerC10panGestureSo05UIPanF10RecognizerCvMTq 114 | _$s8UIDrawer28DrawerPresentationControllerC7dismissyyFTq 115 | _$s8UIDrawer28DrawerPresentationControllerC4dragyySo22UIPanGestureRecognizerCFTq 116 | _$s8UIDrawer28DrawerPresentationControllerC9didScrollyySo22UIPanGestureRecognizerCFTq 117 | _$s8UIDrawer28DrawerPresentationControllerC9sendToTopyyFTq 118 | _$s8UIDrawer28DrawerPresentationControllerC12sendToMiddleyyFTq 119 | Apple LLVM version 10.0.1 (clang-1001.0.46.3) 120 | 121 | /Users/personnal/Desktop/UIDrawer 122 | Apple Swift version 5.0 (swiftlang-1001.0.69.5 clang-1001.0.46.3) 123 | /Users/personnal/Desktop/UIDrawer/UIDrawer/DrawerPresentationController.swift 124 | $s8UIDrawer36DrawerPresentationControllerDelegate_pSgXwWOh 125 | 126 | __swift_destroy_boxed_opaque_existential_0 127 | __swift_project_boxed_opaque_existential_0 128 | $s8UIDrawer28DrawerPresentationControllerC9sendToTopyyFyycfU_TA 129 | objectdestroy.23 130 | $s8UIDrawer28DrawerPresentationControllerC12sendToMiddleyyFyycfU_TA 131 | $sSo17UIBlurEffectStyleVMa 132 | $s8UIDrawer28DrawerPresentationControllerCMa 133 | deinit 134 | DrawerPresentationController.swift 135 | /Users/personnal/Desktop/UIDrawer/UIDrawer 136 | $s8UIDrawer28DrawerPresentationControllerC12sendToMiddleyyFyycfU_ 137 | $sIeg_IeyB_TR 138 | $s8UIDrawer28DrawerPresentationControllerC9sendToTopyyFyycfU_ 139 | drag 140 | didScroll 141 | sendToTop 142 | currentSnapPoint.get 143 | drawerDelegate.get 144 | dismiss 145 | currentSnapPoint.set 146 | sendToMiddle 147 | topGap.get 148 | appendLiteral 149 | appendInterpolation 150 | $s12CoreGraphics7CGFloatVs23CustomStringConvertibleAAsADP11descriptionSSvgTW 151 | _allocateUninitializedArray 152 | $sSa13_adoptStorage_5countSayxG_SpyxGts016_ContiguousArrayB0CyxGn_SitFZyp_Tg5 153 | $ss23_ContiguousArrayStorageCyypGMa 154 | dismissalTransitionWillBegin 155 | containerViewDidLayoutSubviews 156 | roundCorners 157 | init 158 | containerViewWillLayoutSubviews 159 | cornerRadius.get 160 | $s8UIDrawer28DrawerPresentationControllerC31presentationTransitionWillBeginyyFySo06UIViewdF18CoordinatorContext_pcfU0_ 161 | $s8UIDrawer28DrawerPresentationControllerC28dismissalTransitionWillBeginyyFySo06UIViewdF18CoordinatorContext_pcfU_TA 162 | $s8UIDrawer28DrawerPresentationControllerC28dismissalTransitionWillBeginyyFySo06UIViewdF18CoordinatorContext_pcfU_ 163 | presentationTransitionWillBegin 164 | $s8UIDrawer28DrawerPresentationControllerC28dismissalTransitionWillBeginyyFySo06UIViewdF18CoordinatorContext_pcfU0_TA 165 | $s8UIDrawer28DrawerPresentationControllerC28dismissalTransitionWillBeginyyFySo06UIViewdF18CoordinatorContext_pcfU0_ 166 | blurEffectView.get 167 | $s8UIDrawer28DrawerPresentationControllerC14blurEffectViewSo08UIVisualfG0CvgAFyXEfU_ 168 | blurEffectStyle.get 169 | block_destroy_helper 170 | block_copy_helper 171 | $sSo44UIViewControllerTransitionCoordinatorContext_pIegg_SoAA_pIeyBy_TR 172 | objectdestroy 173 | $s8UIDrawer28DrawerPresentationControllerC013presentedViewD010presenting14drawerDelegate15blurEffectStyle6topGap5width12cornerRadiusACSo06UIViewD0C_ALSgAA0bcdI0_pSgSo06UIBlurkL0V12CoreGraphics7CGFloatVA2TtcfcfA5_ 174 | $s8UIDrawer28DrawerPresentationControllerC013presentedViewD010presenting14drawerDelegate15blurEffectStyle6topGap5width12cornerRadiusACSo06UIViewD0C_ALSgAA0bcdI0_pSgSo06UIBlurkL0V12CoreGraphics7CGFloatVA2TtcfcfA4_ 175 | $s8UIDrawer28DrawerPresentationControllerC013presentedViewD010presenting14drawerDelegate15blurEffectStyle6topGap5width12cornerRadiusACSo06UIViewD0C_ALSgAA0bcdI0_pSgSo06UIBlurkL0V12CoreGraphics7CGFloatVA2TtcfcfA3_ 176 | $s8UIDrawer28DrawerPresentationControllerC013presentedViewD010presenting14drawerDelegate15blurEffectStyle6topGap5width12cornerRadiusACSo06UIViewD0C_ALSgAA0bcdI0_pSgSo06UIBlurkL0V12CoreGraphics7CGFloatVA2TtcfcfA2_ 177 | $s8UIDrawer28DrawerPresentationControllerC013presentedViewD010presenting14drawerDelegate15blurEffectStyle6topGap5width12cornerRadiusACSo06UIViewD0C_ALSgAA0bcdI0_pSgSo06UIBlurkL0V12CoreGraphics7CGFloatVA2TtcfcfA1_ 178 | panGesture.get 179 | $s8UIDrawer28DrawerPresentationControllerC10panGestureSo05UIPanF10RecognizerCvgAFyXEfU_ 180 | $s8UIDrawer28DrawerPresentationControllerC0023panGesturestorage_clFCf33_1F2FB62A901D3291FF77D76A2674E07FLLSo22UIPanGestureRecognizerCSgvpfi 181 | tapGestureRecognizer.get 182 | $s8UIDrawer28DrawerPresentationControllerC20tapGestureRecognizerSo05UITapfG0CvgAFyXEfU_ 183 | $s8UIDrawer28DrawerPresentationControllerC0033tapGestureRecognizerstorage_BbGHj33_1F2FB62A901D3291FF77D76A2674E07FLLSo22UITapGestureRecognizerCSgvpfi 184 | frameOfPresentedViewInContainerView.get 185 | width.get 186 | $s8UIDrawer28DrawerPresentationControllerC031frameOfPresentedViewInContainerH0So6CGRectVvgTo 187 | $s8UIDrawer28DrawerPresentationControllerC0027blurEffectViewstorage_mvFAh33_1F2FB62A901D3291FF77D76A2674E07FLLSo18UIVisualEffectViewCSgvpfi 188 | $s8UIDrawer28DrawerPresentationControllerC16currentSnapPoint33_1F2FB62A901D3291FF77D76A2674E07FLLAA05DrawefG0Ovpfi 189 | cornerRadius.modify 190 | topGap.set 191 | $s8UIDrawer28DrawerPresentationControllerC12cornerRadius12CoreGraphics7CGFloatVvpfi 192 | width.modify 193 | $s8UIDrawer28DrawerPresentationControllerC5width12CoreGraphics7CGFloatVvpfi 194 | topGap.modify 195 | $s8UIDrawer28DrawerPresentationControllerC6topGap12CoreGraphics7CGFloatVvpfi 196 | blurEffectStyle.modify 197 | blurEffectStyle.set 198 | $s8UIDrawer28DrawerPresentationControllerC15blurEffectStyleSo06UIBlurfG0Vvpfi 199 | drawerDelegate.modify 200 | drawerDelegate.set 201 | $s8UIDrawer28DrawerPresentationControllerC14drawerDelegateAA0bcdF0_pSgvpfi 202 | _$s8UIDrawer14DraweSnapPointOSQAASQ2eeoiySbx_xtFZTW 203 | _$s8UIDrawer14DraweSnapPointOSHAASH9hashValueSivgTW 204 | _$s8UIDrawer14DraweSnapPointOSHAASH4hash4intoys6HasherVz_tFTW 205 | _$s8UIDrawer14DraweSnapPointOSHAASH13_rawHashValue4seedS2i_tFTW 206 | _$s8UIDrawer14DraweSnapPointOSHAASQWb 207 | ___swift_memcpy1_1 208 | ___swift_noop_void_return 209 | _$s8UIDrawer14DraweSnapPointOwet 210 | _$s8UIDrawer14DraweSnapPointOwst 211 | _$s8UIDrawer14DraweSnapPointOwug 212 | _$s8UIDrawer14DraweSnapPointOwup 213 | _$s8UIDrawer14DraweSnapPointOwui 214 | _$s8UIDrawer14DraweSnapPointOACSQAAWL 215 | _associated conformance 8UIDrawer14DraweSnapPointOSHAASQ 216 | _symbolic $s8UIDrawer36DrawerPresentationControllerDelegateP 217 | _$s8UIDrawer36DrawerPresentationControllerDelegate_pMF 218 | _symbolic x 219 | _$s8UIDrawer14DraweSnapPointOWV 220 | _$s8UIDrawer14DraweSnapPointOMf 221 | _symbolic _____ 8UIDrawer14DraweSnapPointO 222 | _$s8UIDrawer14DraweSnapPointOMF 223 | /Users/personnal/Desktop/UIDrawer/UIDrawer/DrawerPresentationControllerDelegate.swift 224 | $s8UIDrawer14DraweSnapPointOMa 225 | $s8UIDrawer14DraweSnapPointOwui 226 | $s8UIDrawer14DraweSnapPointOwup 227 | $s8UIDrawer14DraweSnapPointOwug 228 | $s8UIDrawer14DraweSnapPointOwst 229 | $s8UIDrawer14DraweSnapPointOwet 230 | __swift_noop_void_return 231 | __swift_memcpy1_1 232 | $s8UIDrawer14DraweSnapPointOSHAASQWb 233 | $s8UIDrawer14DraweSnapPointOACSQAAWl 234 | _rawHashValue 235 | hash 236 | combine 237 | $sSiSHsSH4hash4intoys6HasherVz_tFTW 238 | hashValue.get 239 | _hashValue 240 | __derived_enum_equals 241 | /Users/personnal/Library/Developer/Xcode/DerivedData/UIDrawer-dybocvsqyhamhpenxpvgslinrqar/Build/Intermediates.noindex/ArchiveIntermediates/UIDrawer/IntermediateBuildFilesPath/UIDrawer.build/Release-iphoneos/UIDrawer.build/DerivedSources/UIDrawer_vers.c 242 | -------------------------------------------------------------------------------- /Carthage/Build/iOS/UIDrawer.framework.dSYM/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleIdentifier 8 | com.apple.xcode.dsym.que20.UIDrawer 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundlePackageType 12 | dSYM 13 | CFBundleSignature 14 | ???? 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleVersion 18 | 1 19 | 20 | 21 | -------------------------------------------------------------------------------- /Carthage/Build/iOS/UIDrawer.framework.dSYM/Contents/Resources/DWARF/UIDrawer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Que20/UIDrawer/7190513a6c820f046dcd8be2c85adef54366cfc1/Carthage/Build/iOS/UIDrawer.framework.dSYM/Contents/Resources/DWARF/UIDrawer -------------------------------------------------------------------------------- /Carthage/Build/iOS/UIDrawer.framework/Headers/UIDrawer-Swift.h: -------------------------------------------------------------------------------- 1 | #ifndef TARGET_OS_SIMULATOR 2 | #include 3 | #endif 4 | #if TARGET_OS_SIMULATOR 5 | // Generated by Apple Swift version 5.0 (swiftlang-1001.0.69.5 clang-1001.0.46.3) 6 | #pragma clang diagnostic push 7 | #pragma clang diagnostic ignored "-Wgcc-compat" 8 | 9 | #if !defined(__has_include) 10 | # define __has_include(x) 0 11 | #endif 12 | #if !defined(__has_attribute) 13 | # define __has_attribute(x) 0 14 | #endif 15 | #if !defined(__has_feature) 16 | # define __has_feature(x) 0 17 | #endif 18 | #if !defined(__has_warning) 19 | # define __has_warning(x) 0 20 | #endif 21 | 22 | #if __has_include() 23 | # include 24 | #endif 25 | 26 | #pragma clang diagnostic ignored "-Wauto-import" 27 | #include 28 | #include 29 | #include 30 | #include 31 | 32 | #if !defined(SWIFT_TYPEDEFS) 33 | # define SWIFT_TYPEDEFS 1 34 | # if __has_include() 35 | # include 36 | # elif !defined(__cplusplus) 37 | typedef uint_least16_t char16_t; 38 | typedef uint_least32_t char32_t; 39 | # endif 40 | typedef float swift_float2 __attribute__((__ext_vector_type__(2))); 41 | typedef float swift_float3 __attribute__((__ext_vector_type__(3))); 42 | typedef float swift_float4 __attribute__((__ext_vector_type__(4))); 43 | typedef double swift_double2 __attribute__((__ext_vector_type__(2))); 44 | typedef double swift_double3 __attribute__((__ext_vector_type__(3))); 45 | typedef double swift_double4 __attribute__((__ext_vector_type__(4))); 46 | typedef int swift_int2 __attribute__((__ext_vector_type__(2))); 47 | typedef int swift_int3 __attribute__((__ext_vector_type__(3))); 48 | typedef int swift_int4 __attribute__((__ext_vector_type__(4))); 49 | typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); 50 | typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); 51 | typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); 52 | #endif 53 | 54 | #if !defined(SWIFT_PASTE) 55 | # define SWIFT_PASTE_HELPER(x, y) x##y 56 | # define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) 57 | #endif 58 | #if !defined(SWIFT_METATYPE) 59 | # define SWIFT_METATYPE(X) Class 60 | #endif 61 | #if !defined(SWIFT_CLASS_PROPERTY) 62 | # if __has_feature(objc_class_property) 63 | # define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ 64 | # else 65 | # define SWIFT_CLASS_PROPERTY(...) 66 | # endif 67 | #endif 68 | 69 | #if __has_attribute(objc_runtime_name) 70 | # define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) 71 | #else 72 | # define SWIFT_RUNTIME_NAME(X) 73 | #endif 74 | #if __has_attribute(swift_name) 75 | # define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) 76 | #else 77 | # define SWIFT_COMPILE_NAME(X) 78 | #endif 79 | #if __has_attribute(objc_method_family) 80 | # define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) 81 | #else 82 | # define SWIFT_METHOD_FAMILY(X) 83 | #endif 84 | #if __has_attribute(noescape) 85 | # define SWIFT_NOESCAPE __attribute__((noescape)) 86 | #else 87 | # define SWIFT_NOESCAPE 88 | #endif 89 | #if __has_attribute(warn_unused_result) 90 | # define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 91 | #else 92 | # define SWIFT_WARN_UNUSED_RESULT 93 | #endif 94 | #if __has_attribute(noreturn) 95 | # define SWIFT_NORETURN __attribute__((noreturn)) 96 | #else 97 | # define SWIFT_NORETURN 98 | #endif 99 | #if !defined(SWIFT_CLASS_EXTRA) 100 | # define SWIFT_CLASS_EXTRA 101 | #endif 102 | #if !defined(SWIFT_PROTOCOL_EXTRA) 103 | # define SWIFT_PROTOCOL_EXTRA 104 | #endif 105 | #if !defined(SWIFT_ENUM_EXTRA) 106 | # define SWIFT_ENUM_EXTRA 107 | #endif 108 | #if !defined(SWIFT_CLASS) 109 | # if __has_attribute(objc_subclassing_restricted) 110 | # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA 111 | # define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 112 | # else 113 | # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 114 | # define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 115 | # endif 116 | #endif 117 | 118 | #if !defined(SWIFT_PROTOCOL) 119 | # define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 120 | # define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 121 | #endif 122 | 123 | #if !defined(SWIFT_EXTENSION) 124 | # define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) 125 | #endif 126 | 127 | #if !defined(OBJC_DESIGNATED_INITIALIZER) 128 | # if __has_attribute(objc_designated_initializer) 129 | # define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) 130 | # else 131 | # define OBJC_DESIGNATED_INITIALIZER 132 | # endif 133 | #endif 134 | #if !defined(SWIFT_ENUM_ATTR) 135 | # if defined(__has_attribute) && __has_attribute(enum_extensibility) 136 | # define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) 137 | # else 138 | # define SWIFT_ENUM_ATTR(_extensibility) 139 | # endif 140 | #endif 141 | #if !defined(SWIFT_ENUM) 142 | # define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type 143 | # if __has_feature(generalized_swift_name) 144 | # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type 145 | # else 146 | # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) 147 | # endif 148 | #endif 149 | #if !defined(SWIFT_UNAVAILABLE) 150 | # define SWIFT_UNAVAILABLE __attribute__((unavailable)) 151 | #endif 152 | #if !defined(SWIFT_UNAVAILABLE_MSG) 153 | # define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) 154 | #endif 155 | #if !defined(SWIFT_AVAILABILITY) 156 | # define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) 157 | #endif 158 | #if !defined(SWIFT_DEPRECATED) 159 | # define SWIFT_DEPRECATED __attribute__((deprecated)) 160 | #endif 161 | #if !defined(SWIFT_DEPRECATED_MSG) 162 | # define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) 163 | #endif 164 | #if __has_feature(attribute_diagnose_if_objc) 165 | # define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) 166 | #else 167 | # define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) 168 | #endif 169 | #if __has_feature(modules) 170 | #if __has_warning("-Watimport-in-framework-header") 171 | #pragma clang diagnostic ignored "-Watimport-in-framework-header" 172 | #endif 173 | @import CoreGraphics; 174 | @import UIKit; 175 | #endif 176 | 177 | #pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" 178 | #pragma clang diagnostic ignored "-Wduplicate-method-arg" 179 | #if __has_warning("-Wpragma-clang-attribute") 180 | # pragma clang diagnostic ignored "-Wpragma-clang-attribute" 181 | #endif 182 | #pragma clang diagnostic ignored "-Wunknown-pragmas" 183 | #pragma clang diagnostic ignored "-Wnullability" 184 | 185 | #if __has_attribute(external_source_symbol) 186 | # pragma push_macro("any") 187 | # undef any 188 | # pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="UIDrawer",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) 189 | # pragma pop_macro("any") 190 | #endif 191 | 192 | @class UIViewController; 193 | 194 | SWIFT_CLASS("_TtC8UIDrawer28DrawerPresentationController") 195 | @interface DrawerPresentationController : UIPresentationController 196 | @property (nonatomic, readonly) CGRect frameOfPresentedViewInContainerView; 197 | - (nonnull instancetype)initWithPresentedViewController:(UIViewController * _Nonnull)presentedViewController presentingViewController:(UIViewController * _Nullable)presentingViewController SWIFT_UNAVAILABLE; 198 | - (void)dismissalTransitionWillBegin; 199 | - (void)presentationTransitionWillBegin; 200 | - (void)containerViewWillLayoutSubviews; 201 | - (void)containerViewDidLayoutSubviews; 202 | @end 203 | 204 | 205 | 206 | #if __has_attribute(external_source_symbol) 207 | # pragma clang attribute pop 208 | #endif 209 | #pragma clang diagnostic pop 210 | 211 | #else 212 | // Generated by Apple Swift version 5.0 (swiftlang-1001.0.69.5 clang-1001.0.46.3) 213 | #pragma clang diagnostic push 214 | #pragma clang diagnostic ignored "-Wgcc-compat" 215 | 216 | #if !defined(__has_include) 217 | # define __has_include(x) 0 218 | #endif 219 | #if !defined(__has_attribute) 220 | # define __has_attribute(x) 0 221 | #endif 222 | #if !defined(__has_feature) 223 | # define __has_feature(x) 0 224 | #endif 225 | #if !defined(__has_warning) 226 | # define __has_warning(x) 0 227 | #endif 228 | 229 | #if __has_include() 230 | # include 231 | #endif 232 | 233 | #pragma clang diagnostic ignored "-Wauto-import" 234 | #include 235 | #include 236 | #include 237 | #include 238 | 239 | #if !defined(SWIFT_TYPEDEFS) 240 | # define SWIFT_TYPEDEFS 1 241 | # if __has_include() 242 | # include 243 | # elif !defined(__cplusplus) 244 | typedef uint_least16_t char16_t; 245 | typedef uint_least32_t char32_t; 246 | # endif 247 | typedef float swift_float2 __attribute__((__ext_vector_type__(2))); 248 | typedef float swift_float3 __attribute__((__ext_vector_type__(3))); 249 | typedef float swift_float4 __attribute__((__ext_vector_type__(4))); 250 | typedef double swift_double2 __attribute__((__ext_vector_type__(2))); 251 | typedef double swift_double3 __attribute__((__ext_vector_type__(3))); 252 | typedef double swift_double4 __attribute__((__ext_vector_type__(4))); 253 | typedef int swift_int2 __attribute__((__ext_vector_type__(2))); 254 | typedef int swift_int3 __attribute__((__ext_vector_type__(3))); 255 | typedef int swift_int4 __attribute__((__ext_vector_type__(4))); 256 | typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); 257 | typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); 258 | typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); 259 | #endif 260 | 261 | #if !defined(SWIFT_PASTE) 262 | # define SWIFT_PASTE_HELPER(x, y) x##y 263 | # define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) 264 | #endif 265 | #if !defined(SWIFT_METATYPE) 266 | # define SWIFT_METATYPE(X) Class 267 | #endif 268 | #if !defined(SWIFT_CLASS_PROPERTY) 269 | # if __has_feature(objc_class_property) 270 | # define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ 271 | # else 272 | # define SWIFT_CLASS_PROPERTY(...) 273 | # endif 274 | #endif 275 | 276 | #if __has_attribute(objc_runtime_name) 277 | # define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) 278 | #else 279 | # define SWIFT_RUNTIME_NAME(X) 280 | #endif 281 | #if __has_attribute(swift_name) 282 | # define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) 283 | #else 284 | # define SWIFT_COMPILE_NAME(X) 285 | #endif 286 | #if __has_attribute(objc_method_family) 287 | # define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) 288 | #else 289 | # define SWIFT_METHOD_FAMILY(X) 290 | #endif 291 | #if __has_attribute(noescape) 292 | # define SWIFT_NOESCAPE __attribute__((noescape)) 293 | #else 294 | # define SWIFT_NOESCAPE 295 | #endif 296 | #if __has_attribute(warn_unused_result) 297 | # define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 298 | #else 299 | # define SWIFT_WARN_UNUSED_RESULT 300 | #endif 301 | #if __has_attribute(noreturn) 302 | # define SWIFT_NORETURN __attribute__((noreturn)) 303 | #else 304 | # define SWIFT_NORETURN 305 | #endif 306 | #if !defined(SWIFT_CLASS_EXTRA) 307 | # define SWIFT_CLASS_EXTRA 308 | #endif 309 | #if !defined(SWIFT_PROTOCOL_EXTRA) 310 | # define SWIFT_PROTOCOL_EXTRA 311 | #endif 312 | #if !defined(SWIFT_ENUM_EXTRA) 313 | # define SWIFT_ENUM_EXTRA 314 | #endif 315 | #if !defined(SWIFT_CLASS) 316 | # if __has_attribute(objc_subclassing_restricted) 317 | # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA 318 | # define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 319 | # else 320 | # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 321 | # define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 322 | # endif 323 | #endif 324 | 325 | #if !defined(SWIFT_PROTOCOL) 326 | # define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 327 | # define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 328 | #endif 329 | 330 | #if !defined(SWIFT_EXTENSION) 331 | # define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) 332 | #endif 333 | 334 | #if !defined(OBJC_DESIGNATED_INITIALIZER) 335 | # if __has_attribute(objc_designated_initializer) 336 | # define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) 337 | # else 338 | # define OBJC_DESIGNATED_INITIALIZER 339 | # endif 340 | #endif 341 | #if !defined(SWIFT_ENUM_ATTR) 342 | # if defined(__has_attribute) && __has_attribute(enum_extensibility) 343 | # define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) 344 | # else 345 | # define SWIFT_ENUM_ATTR(_extensibility) 346 | # endif 347 | #endif 348 | #if !defined(SWIFT_ENUM) 349 | # define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type 350 | # if __has_feature(generalized_swift_name) 351 | # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type 352 | # else 353 | # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) 354 | # endif 355 | #endif 356 | #if !defined(SWIFT_UNAVAILABLE) 357 | # define SWIFT_UNAVAILABLE __attribute__((unavailable)) 358 | #endif 359 | #if !defined(SWIFT_UNAVAILABLE_MSG) 360 | # define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) 361 | #endif 362 | #if !defined(SWIFT_AVAILABILITY) 363 | # define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) 364 | #endif 365 | #if !defined(SWIFT_DEPRECATED) 366 | # define SWIFT_DEPRECATED __attribute__((deprecated)) 367 | #endif 368 | #if !defined(SWIFT_DEPRECATED_MSG) 369 | # define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) 370 | #endif 371 | #if __has_feature(attribute_diagnose_if_objc) 372 | # define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) 373 | #else 374 | # define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) 375 | #endif 376 | #if __has_feature(modules) 377 | #if __has_warning("-Watimport-in-framework-header") 378 | #pragma clang diagnostic ignored "-Watimport-in-framework-header" 379 | #endif 380 | @import CoreGraphics; 381 | @import UIKit; 382 | #endif 383 | 384 | #pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" 385 | #pragma clang diagnostic ignored "-Wduplicate-method-arg" 386 | #if __has_warning("-Wpragma-clang-attribute") 387 | # pragma clang diagnostic ignored "-Wpragma-clang-attribute" 388 | #endif 389 | #pragma clang diagnostic ignored "-Wunknown-pragmas" 390 | #pragma clang diagnostic ignored "-Wnullability" 391 | 392 | #if __has_attribute(external_source_symbol) 393 | # pragma push_macro("any") 394 | # undef any 395 | # pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="UIDrawer",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) 396 | # pragma pop_macro("any") 397 | #endif 398 | 399 | @class UIViewController; 400 | 401 | SWIFT_CLASS("_TtC8UIDrawer28DrawerPresentationController") 402 | @interface DrawerPresentationController : UIPresentationController 403 | @property (nonatomic, readonly) CGRect frameOfPresentedViewInContainerView; 404 | - (nonnull instancetype)initWithPresentedViewController:(UIViewController * _Nonnull)presentedViewController presentingViewController:(UIViewController * _Nullable)presentingViewController SWIFT_UNAVAILABLE; 405 | - (void)dismissalTransitionWillBegin; 406 | - (void)presentationTransitionWillBegin; 407 | - (void)containerViewWillLayoutSubviews; 408 | - (void)containerViewDidLayoutSubviews; 409 | @end 410 | 411 | 412 | 413 | #if __has_attribute(external_source_symbol) 414 | # pragma clang attribute pop 415 | #endif 416 | #pragma clang diagnostic pop 417 | 418 | #endif 419 | -------------------------------------------------------------------------------- /Carthage/Build/iOS/UIDrawer.framework/Headers/UIDrawer.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIDrawer.h 3 | // UIDrawer 4 | // 5 | // Created by Kevin Maarek on 16/07/2019. 6 | // Copyright © 2019 que20. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for UIDrawer. 12 | FOUNDATION_EXPORT double UIDrawerVersionNumber; 13 | 14 | //! Project version string for UIDrawer. 15 | FOUNDATION_EXPORT const unsigned char UIDrawerVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Carthage/Build/iOS/UIDrawer.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Que20/UIDrawer/7190513a6c820f046dcd8be2c85adef54366cfc1/Carthage/Build/iOS/UIDrawer.framework/Info.plist -------------------------------------------------------------------------------- /Carthage/Build/iOS/UIDrawer.framework/Modules/UIDrawer.swiftmodule/arm64.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Que20/UIDrawer/7190513a6c820f046dcd8be2c85adef54366cfc1/Carthage/Build/iOS/UIDrawer.framework/Modules/UIDrawer.swiftmodule/arm64.swiftdoc -------------------------------------------------------------------------------- /Carthage/Build/iOS/UIDrawer.framework/Modules/UIDrawer.swiftmodule/arm64.swiftmodule: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Que20/UIDrawer/7190513a6c820f046dcd8be2c85adef54366cfc1/Carthage/Build/iOS/UIDrawer.framework/Modules/UIDrawer.swiftmodule/arm64.swiftmodule -------------------------------------------------------------------------------- /Carthage/Build/iOS/UIDrawer.framework/Modules/UIDrawer.swiftmodule/x86_64.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Que20/UIDrawer/7190513a6c820f046dcd8be2c85adef54366cfc1/Carthage/Build/iOS/UIDrawer.framework/Modules/UIDrawer.swiftmodule/x86_64.swiftdoc -------------------------------------------------------------------------------- /Carthage/Build/iOS/UIDrawer.framework/Modules/UIDrawer.swiftmodule/x86_64.swiftmodule: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Que20/UIDrawer/7190513a6c820f046dcd8be2c85adef54366cfc1/Carthage/Build/iOS/UIDrawer.framework/Modules/UIDrawer.swiftmodule/x86_64.swiftmodule -------------------------------------------------------------------------------- /Carthage/Build/iOS/UIDrawer.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module UIDrawer { 2 | umbrella header "UIDrawer.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | 8 | module UIDrawer.Swift { 9 | header "UIDrawer-Swift.h" 10 | requires objc 11 | } 12 | -------------------------------------------------------------------------------- /Carthage/Build/iOS/UIDrawer.framework/UIDrawer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Que20/UIDrawer/7190513a6c820f046dcd8be2c85adef54366cfc1/Carthage/Build/iOS/UIDrawer.framework/UIDrawer -------------------------------------------------------------------------------- /Example/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Example 4 | // 5 | // Created by Personnal on 16/07/2019. 6 | // Copyright © 2019 Personnal. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 18 | self.window = UIWindow(frame: UIScreen.main.bounds) 19 | 20 | let viewController = ViewController() 21 | let navigationController = UINavigationController(rootViewController: viewController) 22 | 23 | self.window?.rootViewController = navigationController 24 | self.window?.makeKeyAndVisible() 25 | 26 | return true 27 | } 28 | } 29 | 30 | -------------------------------------------------------------------------------- /Example/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /Example/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/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 | -------------------------------------------------------------------------------- /Example/DrawerViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DrawerViewController.swift 3 | // Example 4 | // 5 | // Created by Personnal on 16/07/2019. 6 | // Copyright © 2019 Personnal. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class DrawerViewController: UIViewController { 12 | 13 | lazy var button: UIButton = { 14 | let button: UIButton = UIButton(type: .system) 15 | button.translatesAutoresizingMaskIntoConstraints = false 16 | button.setTitle("Close", for: .normal) 17 | button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside) 18 | button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) 19 | return button 20 | }() 21 | 22 | public convenience init() { 23 | self.init(nibName: nil, bundle: nil) 24 | } 25 | 26 | override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { 27 | super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 28 | } 29 | 30 | required init?(coder aDecoder: NSCoder) { 31 | fatalError("init(coder:) has not been implemented") 32 | } 33 | 34 | override func viewDidLoad() { 35 | super.viewDidLoad() 36 | self.view.backgroundColor = .white 37 | 38 | self.view.addSubview(self.button) 39 | NSLayoutConstraint.activate([ 40 | self.button.centerXAnchor.constraint(equalTo: self.view.centerXAnchor), 41 | self.button.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 30) 42 | ]) 43 | } 44 | 45 | @objc public func buttonAction() { 46 | self.dismiss(animated: true) 47 | } 48 | } 49 | 50 | -------------------------------------------------------------------------------- /Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIRequiredDeviceCapabilities 26 | 27 | armv7 28 | 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Example/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Example 4 | // 5 | // Created by Personnal on 16/07/2019. 6 | // Copyright © 2019 Personnal. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import UIDrawer 11 | 12 | class ViewController: UIViewController { 13 | 14 | lazy var button: UIButton = { 15 | let button: UIButton = UIButton() 16 | button.translatesAutoresizingMaskIntoConstraints = false 17 | button.setTitle("Show Drawer", for: .normal) 18 | button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside) 19 | button.backgroundColor = .red 20 | button.contentEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) 21 | button.layer.cornerRadius = 8 22 | return button 23 | }() 24 | 25 | public convenience init() { 26 | self.init(nibName: nil, bundle: nil) 27 | } 28 | 29 | override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { 30 | super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 31 | } 32 | 33 | required init?(coder aDecoder: NSCoder) { 34 | fatalError("init(coder:) has not been implemented") 35 | } 36 | 37 | override func viewDidLoad() { 38 | super.viewDidLoad() 39 | self.view.backgroundColor = .white 40 | 41 | self.view.addSubview(self.button) 42 | NSLayoutConstraint.activate([ 43 | self.button.centerXAnchor.constraint(equalTo: self.view.centerXAnchor), 44 | self.button.centerYAnchor.constraint(equalTo: self.view.centerYAnchor) 45 | ]) 46 | } 47 | 48 | @objc public func buttonAction() { 49 | self.presentDrawer() 50 | } 51 | 52 | func presentDrawer() { 53 | let viewController = DrawerViewController() 54 | viewController.modalPresentationStyle = .custom 55 | viewController.transitioningDelegate = self 56 | self.present(viewController, animated: true) 57 | } 58 | } 59 | 60 | extension ViewController: DrawerPresentationControllerDelegate { 61 | func drawerMovedTo(position: DraweSnapPoint) { 62 | 63 | } 64 | } 65 | 66 | extension ViewController: UIViewControllerTransitioningDelegate { 67 | func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { 68 | return DrawerPresentationController(presentedViewController: presented, presenting: presenting, blurEffectStyle: .dark) 69 | } 70 | } 71 | 72 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Kevin Maarek 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UIDrawer 2 | UIDrawer is a customizable UIPresentationController that allows modals to be presented like a bottom sheet. The kind of presentation style you can see on the Maps app on iOS. 3 | 4 | It supports : 5 | - Dragging up and down 6 | - Multiple snap points (half and top) 7 | - Swipe down to close 8 | - Customization 9 | 10 | ## Screenshot 11 | 12 | ![Demo screenshot](https://raw.githubusercontent.com/Que20/UIDrawer/master/demo.gif) 13 | 14 | ## Installation 15 | 16 | ### Carthage 17 | 18 | [Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate Alamofire into your Xcode project using Carthage, specify it in your `Cartfile`: 19 | 20 | ```ogdl 21 | github "Que20/UIDrawer" ~> 1.0 22 | ``` 23 | 24 | ### CocoaPod 25 | [CocoaPods](https://cocoapods.org) is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate Alamofire into your Xcode project using CocoaPods, specify it in your `Podfile`: 26 | 27 | platform :ios, '12.0' 28 | target 'YourTarget' do 29 | use_frameworks! 30 | pod 'UIDrawer', :git => 'https://github.com/Que20/UIDrawer.git', :tag => '1.0' 31 | end 32 | 33 | 34 | ## Usage 35 | 36 | Present your drawer like a normal modal with a presentation style set as custom and set a transition delegate : 37 | 38 | let viewController = MyViewController() 39 | viewController.modalPresentationStyle = .custom 40 | viewController.transitioningDelegate = self 41 | self.present(viewController, animated: true) 42 | 43 | To your `transitionDelegate`, implement the `presentationController` func, and return a `DrawerPresentationController`. 44 | 45 | extension ViewController: UIViewControllerTransitioningDelegate { 46 | func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { 47 | return DrawerPresentationController(presentedViewController: presented, presenting: presenting) 48 | } 49 | } 50 | 51 | Here `ViewController` is the controller that presents the drawer. 52 | 53 | ## Customization 54 | 55 | You can customize the DrawerPresentationController by setting : 56 | - The blur effect style 57 | - The modal's corner radius 58 | - The modal's with 59 | - The gap from the top of the modal to the top of the parent 60 | 61 | let presentationController = DrawerPresentationController(presentedViewController: presented, presenting: presenting) 62 | 63 | presentationController.blurEffectStyle = .extraLight 64 | presentationController.cornerRadius = 20 65 | presentationController.roundedCorners = [.topLeft, .topRight] 66 | presentationController.modalWidth = 200 67 | presentationController.topGap = 80 68 | presentationController.bounce = true 69 | 70 | ## Evolutions 71 | 72 | A quick todo list for features I want to implement in the futur : 73 | - Install via Swift Package Manager 74 | - Custom snap points 75 | - Automatic handling of scrollview's gesture (e.g. a modal that would have a TableView) to swipe up the drawer 76 | 77 | ## Contribute 78 | 79 | Please ;) 80 | -------------------------------------------------------------------------------- /UIDrawer.framework.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Que20/UIDrawer/7190513a6c820f046dcd8be2c85adef54366cfc1/UIDrawer.framework.zip -------------------------------------------------------------------------------- /UIDrawer.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod spec lint UIDrawer.podspec' to ensure this is a 3 | # valid spec and to remove all comments including this before submitting the spec. 4 | # 5 | # To learn more about Podspec attributes see https://guides.cocoapods.org/syntax/podspec.html 6 | # To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ 7 | # 8 | 9 | Pod::Spec.new do |spec| 10 | 11 | # ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 12 | # 13 | # These will help people to find your library, and whilst it 14 | # can feel like a chore to fill in it's definitely to your advantage. The 15 | # summary should be tweet-length, and the description more in depth. 16 | # 17 | 18 | spec.name = "UIDrawer" 19 | spec.version = "1.0" 20 | spec.summary = "A short description of UIDrawer." 21 | 22 | # This description is used to generate tags and improve search results. 23 | # * Think: What does it do? Why did you write it? What is the focus? 24 | # * Try to keep it short, snappy and to the point. 25 | # * Write the description between the DESC delimiters below. 26 | # * Finally, don't worry about the indent, CocoaPods strips it! 27 | spec.description = "UIDrawer is a customizable UIPresentationController that allows modals to be presented like a bottom sheet. It supports dragging up and down, multiple snap points, swipe down to close and Customization." 28 | 29 | spec.homepage = "https://github.com/Que20/UIDrawer" 30 | spec.screenshots = "https://github.com/Que20/UIDrawer/raw/master/demo.gif" 31 | 32 | 33 | # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 34 | # 35 | # Licensing your code is important. See https://choosealicense.com for more info. 36 | # CocoaPods will detect a license file if there is a named LICENSE* 37 | # Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'. 38 | # 39 | 40 | spec.license = { :type => "MIT", :file => "LICENSE" } 41 | 42 | 43 | # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 44 | # 45 | # Specify the authors of the library, with email addresses. Email addresses 46 | # of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also 47 | # accepts just a name if you'd rather not provide an email address. 48 | # 49 | # Specify a social_media_url where others can refer to, for example a twitter 50 | # profile URL. 51 | # 52 | 53 | spec.author = { "Kevin Maarek" => "me@kevinmaarek.fr" } 54 | # Or just: spec.author = "Kevin Maarek" 55 | # spec.authors = { "Kevin Maarek" => "me@kevinmaarek.fr" } 56 | # spec.social_media_url = "https://twitter.com/Kevin Maarek" 57 | 58 | # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 59 | # 60 | # If this Pod runs only on iOS or OS X, then specify the platform and 61 | # the deployment target. You can optionally include the target after the platform. 62 | # 63 | 64 | # spec.platform = :ios 65 | spec.platform = :ios, "12.0" 66 | 67 | # When using multiple platforms 68 | spec.ios.deployment_target = "12.0" 69 | # spec.osx.deployment_target = "10.7" 70 | # spec.watchos.deployment_target = "2.0" 71 | # spec.tvos.deployment_target = "9.0" 72 | 73 | 74 | # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 75 | # 76 | # Specify the location from where the source should be retrieved. 77 | # Supports git, hg, bzr, svn and HTTP. 78 | # 79 | 80 | spec.source = { :git => "https://github.com/Que20/UIDrawer.git", :tag => "#{spec.version}" } 81 | 82 | 83 | # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 84 | # 85 | # CocoaPods is smart about how it includes source code. For source files 86 | # giving a folder will include any swift, h, m, mm, c & cpp files. 87 | # For header files it will include any header in the folder. 88 | # Not including the public_header_files will make all headers public. 89 | # 90 | 91 | spec.source_files = "UIDrawer" 92 | spec.swift_version = "4.2" 93 | # spec.public_header_files = "Classes/**/*.h" 94 | 95 | 96 | # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 97 | # 98 | # A list of resources included with the Pod. These are copied into the 99 | # target bundle with a build phase script. Anything else will be cleaned. 100 | # You can preserve files from being cleaned, please don't preserve 101 | # non-essential files like tests, examples and documentation. 102 | # 103 | 104 | # spec.resource = "icon.png" 105 | # spec.resources = "Resources/*.png" 106 | 107 | # spec.preserve_paths = "FilesToSave", "MoreFilesToSave" 108 | 109 | 110 | # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 111 | # 112 | # Link your library with frameworks, or libraries. Libraries do not include 113 | # the lib prefix of their name. 114 | # 115 | 116 | # spec.framework = "SomeFramework" 117 | # spec.frameworks = "SomeFramework", "AnotherFramework" 118 | 119 | # spec.library = "iconv" 120 | # spec.libraries = "iconv", "xml2" 121 | 122 | 123 | # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 124 | # 125 | # If your library depends on compiler flags you can set them in the xcconfig hash 126 | # where they will only apply to your library. If you depend on other Podspecs 127 | # you can include multiple dependencies to ensure it works. 128 | 129 | # spec.requires_arc = true 130 | 131 | # spec.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" } 132 | # spec.dependency "JSONKit", "~> 1.4" 133 | 134 | end 135 | -------------------------------------------------------------------------------- /UIDrawer.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 7021947A22DE061A00271DA2 /* UIDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7021947822DE061A00271DA2 /* UIDrawer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 70A4785C22DF1F5F000C6391 /* UIDrawer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7021947522DE061A00271DA2 /* UIDrawer.framework */; }; 12 | 70A4785D22DF1F5F000C6391 /* UIDrawer.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7021947522DE061A00271DA2 /* UIDrawer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 13 | 70BDCE8522DE07FF0076D4F2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70BDCE8422DE07FF0076D4F2 /* AppDelegate.swift */; }; 14 | 70BDCE8722DE07FF0076D4F2 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70BDCE8622DE07FF0076D4F2 /* ViewController.swift */; }; 15 | 70BDCE8C22DE08010076D4F2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 70BDCE8B22DE08010076D4F2 /* Assets.xcassets */; }; 16 | 70BDCE8F22DE08010076D4F2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 70BDCE8D22DE08010076D4F2 /* LaunchScreen.storyboard */; }; 17 | 70BDCE9722DE09FA0076D4F2 /* DrawerPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70BDCE9622DE09FA0076D4F2 /* DrawerPresentationController.swift */; }; 18 | 70BDCE9922DE0A5A0076D4F2 /* DrawerPresentationControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70BDCE9822DE0A5A0076D4F2 /* DrawerPresentationControllerDelegate.swift */; }; 19 | 70F3DE5E22DE291F0048CD4C /* DrawerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70F3DE5D22DE291F0048CD4C /* DrawerViewController.swift */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXContainerItemProxy section */ 23 | 70A4785E22DF1F5F000C6391 /* PBXContainerItemProxy */ = { 24 | isa = PBXContainerItemProxy; 25 | containerPortal = 7021946C22DE061A00271DA2 /* Project object */; 26 | proxyType = 1; 27 | remoteGlobalIDString = 7021947422DE061A00271DA2; 28 | remoteInfo = UIDrawer; 29 | }; 30 | /* End PBXContainerItemProxy section */ 31 | 32 | /* Begin PBXCopyFilesBuildPhase section */ 33 | 70A4786022DF1F5F000C6391 /* Embed Frameworks */ = { 34 | isa = PBXCopyFilesBuildPhase; 35 | buildActionMask = 2147483647; 36 | dstPath = ""; 37 | dstSubfolderSpec = 10; 38 | files = ( 39 | 70A4785D22DF1F5F000C6391 /* UIDrawer.framework in Embed Frameworks */, 40 | ); 41 | name = "Embed Frameworks"; 42 | runOnlyForDeploymentPostprocessing = 0; 43 | }; 44 | /* End PBXCopyFilesBuildPhase section */ 45 | 46 | /* Begin PBXFileReference section */ 47 | 7021947522DE061A00271DA2 /* UIDrawer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIDrawer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 48 | 7021947822DE061A00271DA2 /* UIDrawer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIDrawer.h; sourceTree = ""; }; 49 | 7021947922DE061A00271DA2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 50 | 70BDCE8222DE07FF0076D4F2 /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 70BDCE8422DE07FF0076D4F2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 52 | 70BDCE8622DE07FF0076D4F2 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 53 | 70BDCE8B22DE08010076D4F2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 54 | 70BDCE8E22DE08010076D4F2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 55 | 70BDCE9022DE08010076D4F2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | 70BDCE9622DE09FA0076D4F2 /* DrawerPresentationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DrawerPresentationController.swift; sourceTree = ""; }; 57 | 70BDCE9822DE0A5A0076D4F2 /* DrawerPresentationControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DrawerPresentationControllerDelegate.swift; sourceTree = ""; }; 58 | 70F3DE5D22DE291F0048CD4C /* DrawerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DrawerViewController.swift; sourceTree = ""; }; 59 | /* End PBXFileReference section */ 60 | 61 | /* Begin PBXFrameworksBuildPhase section */ 62 | 7021947222DE061A00271DA2 /* Frameworks */ = { 63 | isa = PBXFrameworksBuildPhase; 64 | buildActionMask = 2147483647; 65 | files = ( 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | 70BDCE7F22DE07FF0076D4F2 /* Frameworks */ = { 70 | isa = PBXFrameworksBuildPhase; 71 | buildActionMask = 2147483647; 72 | files = ( 73 | 70A4785C22DF1F5F000C6391 /* UIDrawer.framework in Frameworks */, 74 | ); 75 | runOnlyForDeploymentPostprocessing = 0; 76 | }; 77 | /* End PBXFrameworksBuildPhase section */ 78 | 79 | /* Begin PBXGroup section */ 80 | 7021946B22DE061A00271DA2 = { 81 | isa = PBXGroup; 82 | children = ( 83 | 7021947722DE061A00271DA2 /* UIDrawer */, 84 | 70BDCE8322DE07FF0076D4F2 /* Example */, 85 | 7021947622DE061A00271DA2 /* Products */, 86 | 70F3DE5F22DE2B770048CD4C /* Frameworks */, 87 | ); 88 | sourceTree = ""; 89 | }; 90 | 7021947622DE061A00271DA2 /* Products */ = { 91 | isa = PBXGroup; 92 | children = ( 93 | 7021947522DE061A00271DA2 /* UIDrawer.framework */, 94 | 70BDCE8222DE07FF0076D4F2 /* Example.app */, 95 | ); 96 | name = Products; 97 | sourceTree = ""; 98 | }; 99 | 7021947722DE061A00271DA2 /* UIDrawer */ = { 100 | isa = PBXGroup; 101 | children = ( 102 | 7021947822DE061A00271DA2 /* UIDrawer.h */, 103 | 7021947922DE061A00271DA2 /* Info.plist */, 104 | 70BDCE9622DE09FA0076D4F2 /* DrawerPresentationController.swift */, 105 | 70BDCE9822DE0A5A0076D4F2 /* DrawerPresentationControllerDelegate.swift */, 106 | ); 107 | path = UIDrawer; 108 | sourceTree = ""; 109 | }; 110 | 70BDCE8322DE07FF0076D4F2 /* Example */ = { 111 | isa = PBXGroup; 112 | children = ( 113 | 70BDCE8422DE07FF0076D4F2 /* AppDelegate.swift */, 114 | 70BDCE8622DE07FF0076D4F2 /* ViewController.swift */, 115 | 70F3DE5D22DE291F0048CD4C /* DrawerViewController.swift */, 116 | 70BDCE8B22DE08010076D4F2 /* Assets.xcassets */, 117 | 70BDCE8D22DE08010076D4F2 /* LaunchScreen.storyboard */, 118 | 70BDCE9022DE08010076D4F2 /* Info.plist */, 119 | ); 120 | path = Example; 121 | sourceTree = ""; 122 | }; 123 | 70F3DE5F22DE2B770048CD4C /* Frameworks */ = { 124 | isa = PBXGroup; 125 | children = ( 126 | ); 127 | name = Frameworks; 128 | sourceTree = ""; 129 | }; 130 | /* End PBXGroup section */ 131 | 132 | /* Begin PBXHeadersBuildPhase section */ 133 | 7021947022DE061A00271DA2 /* Headers */ = { 134 | isa = PBXHeadersBuildPhase; 135 | buildActionMask = 2147483647; 136 | files = ( 137 | 7021947A22DE061A00271DA2 /* UIDrawer.h in Headers */, 138 | ); 139 | runOnlyForDeploymentPostprocessing = 0; 140 | }; 141 | /* End PBXHeadersBuildPhase section */ 142 | 143 | /* Begin PBXNativeTarget section */ 144 | 7021947422DE061A00271DA2 /* UIDrawer */ = { 145 | isa = PBXNativeTarget; 146 | buildConfigurationList = 7021947D22DE061A00271DA2 /* Build configuration list for PBXNativeTarget "UIDrawer" */; 147 | buildPhases = ( 148 | 7021947022DE061A00271DA2 /* Headers */, 149 | 7021947122DE061A00271DA2 /* Sources */, 150 | 7021947222DE061A00271DA2 /* Frameworks */, 151 | 7021947322DE061A00271DA2 /* Resources */, 152 | ); 153 | buildRules = ( 154 | ); 155 | dependencies = ( 156 | ); 157 | name = UIDrawer; 158 | productName = UIDrawer; 159 | productReference = 7021947522DE061A00271DA2 /* UIDrawer.framework */; 160 | productType = "com.apple.product-type.framework"; 161 | }; 162 | 70BDCE8122DE07FF0076D4F2 /* Example */ = { 163 | isa = PBXNativeTarget; 164 | buildConfigurationList = 70BDCE9322DE08010076D4F2 /* Build configuration list for PBXNativeTarget "Example" */; 165 | buildPhases = ( 166 | 70BDCE7E22DE07FF0076D4F2 /* Sources */, 167 | 70BDCE7F22DE07FF0076D4F2 /* Frameworks */, 168 | 70BDCE8022DE07FF0076D4F2 /* Resources */, 169 | 70A4786022DF1F5F000C6391 /* Embed Frameworks */, 170 | ); 171 | buildRules = ( 172 | ); 173 | dependencies = ( 174 | 70A4785F22DF1F5F000C6391 /* PBXTargetDependency */, 175 | ); 176 | name = Example; 177 | productName = Example; 178 | productReference = 70BDCE8222DE07FF0076D4F2 /* Example.app */; 179 | productType = "com.apple.product-type.application"; 180 | }; 181 | /* End PBXNativeTarget section */ 182 | 183 | /* Begin PBXProject section */ 184 | 7021946C22DE061A00271DA2 /* Project object */ = { 185 | isa = PBXProject; 186 | attributes = { 187 | LastSwiftUpdateCheck = 1020; 188 | LastUpgradeCheck = 1020; 189 | ORGANIZATIONNAME = Personnal; 190 | TargetAttributes = { 191 | 7021947422DE061A00271DA2 = { 192 | CreatedOnToolsVersion = 10.2; 193 | LastSwiftMigration = 1020; 194 | }; 195 | 70BDCE8122DE07FF0076D4F2 = { 196 | CreatedOnToolsVersion = 10.2; 197 | }; 198 | }; 199 | }; 200 | buildConfigurationList = 7021946F22DE061A00271DA2 /* Build configuration list for PBXProject "UIDrawer" */; 201 | compatibilityVersion = "Xcode 9.3"; 202 | developmentRegion = en; 203 | hasScannedForEncodings = 0; 204 | knownRegions = ( 205 | en, 206 | Base, 207 | ); 208 | mainGroup = 7021946B22DE061A00271DA2; 209 | productRefGroup = 7021947622DE061A00271DA2 /* Products */; 210 | projectDirPath = ""; 211 | projectRoot = ""; 212 | targets = ( 213 | 7021947422DE061A00271DA2 /* UIDrawer */, 214 | 70BDCE8122DE07FF0076D4F2 /* Example */, 215 | ); 216 | }; 217 | /* End PBXProject section */ 218 | 219 | /* Begin PBXResourcesBuildPhase section */ 220 | 7021947322DE061A00271DA2 /* Resources */ = { 221 | isa = PBXResourcesBuildPhase; 222 | buildActionMask = 2147483647; 223 | files = ( 224 | ); 225 | runOnlyForDeploymentPostprocessing = 0; 226 | }; 227 | 70BDCE8022DE07FF0076D4F2 /* Resources */ = { 228 | isa = PBXResourcesBuildPhase; 229 | buildActionMask = 2147483647; 230 | files = ( 231 | 70BDCE8F22DE08010076D4F2 /* LaunchScreen.storyboard in Resources */, 232 | 70BDCE8C22DE08010076D4F2 /* Assets.xcassets in Resources */, 233 | ); 234 | runOnlyForDeploymentPostprocessing = 0; 235 | }; 236 | /* End PBXResourcesBuildPhase section */ 237 | 238 | /* Begin PBXSourcesBuildPhase section */ 239 | 7021947122DE061A00271DA2 /* Sources */ = { 240 | isa = PBXSourcesBuildPhase; 241 | buildActionMask = 2147483647; 242 | files = ( 243 | 70BDCE9722DE09FA0076D4F2 /* DrawerPresentationController.swift in Sources */, 244 | 70BDCE9922DE0A5A0076D4F2 /* DrawerPresentationControllerDelegate.swift in Sources */, 245 | ); 246 | runOnlyForDeploymentPostprocessing = 0; 247 | }; 248 | 70BDCE7E22DE07FF0076D4F2 /* Sources */ = { 249 | isa = PBXSourcesBuildPhase; 250 | buildActionMask = 2147483647; 251 | files = ( 252 | 70BDCE8722DE07FF0076D4F2 /* ViewController.swift in Sources */, 253 | 70BDCE8522DE07FF0076D4F2 /* AppDelegate.swift in Sources */, 254 | 70F3DE5E22DE291F0048CD4C /* DrawerViewController.swift in Sources */, 255 | ); 256 | runOnlyForDeploymentPostprocessing = 0; 257 | }; 258 | /* End PBXSourcesBuildPhase section */ 259 | 260 | /* Begin PBXTargetDependency section */ 261 | 70A4785F22DF1F5F000C6391 /* PBXTargetDependency */ = { 262 | isa = PBXTargetDependency; 263 | target = 7021947422DE061A00271DA2 /* UIDrawer */; 264 | targetProxy = 70A4785E22DF1F5F000C6391 /* PBXContainerItemProxy */; 265 | }; 266 | /* End PBXTargetDependency section */ 267 | 268 | /* Begin PBXVariantGroup section */ 269 | 70BDCE8D22DE08010076D4F2 /* LaunchScreen.storyboard */ = { 270 | isa = PBXVariantGroup; 271 | children = ( 272 | 70BDCE8E22DE08010076D4F2 /* Base */, 273 | ); 274 | name = LaunchScreen.storyboard; 275 | sourceTree = ""; 276 | }; 277 | /* End PBXVariantGroup section */ 278 | 279 | /* Begin XCBuildConfiguration section */ 280 | 7021947B22DE061A00271DA2 /* Debug */ = { 281 | isa = XCBuildConfiguration; 282 | buildSettings = { 283 | ALWAYS_SEARCH_USER_PATHS = NO; 284 | CLANG_ANALYZER_NONNULL = YES; 285 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 286 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 287 | CLANG_CXX_LIBRARY = "libc++"; 288 | CLANG_ENABLE_MODULES = YES; 289 | CLANG_ENABLE_OBJC_ARC = YES; 290 | CLANG_ENABLE_OBJC_WEAK = YES; 291 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 292 | CLANG_WARN_BOOL_CONVERSION = YES; 293 | CLANG_WARN_COMMA = YES; 294 | CLANG_WARN_CONSTANT_CONVERSION = YES; 295 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 296 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 297 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 298 | CLANG_WARN_EMPTY_BODY = YES; 299 | CLANG_WARN_ENUM_CONVERSION = YES; 300 | CLANG_WARN_INFINITE_RECURSION = YES; 301 | CLANG_WARN_INT_CONVERSION = YES; 302 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 303 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 304 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 305 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 306 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 307 | CLANG_WARN_STRICT_PROTOTYPES = YES; 308 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 309 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 310 | CLANG_WARN_UNREACHABLE_CODE = YES; 311 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 312 | CODE_SIGN_IDENTITY = "iPhone Developer"; 313 | COPY_PHASE_STRIP = NO; 314 | CURRENT_PROJECT_VERSION = 1; 315 | DEBUG_INFORMATION_FORMAT = dwarf; 316 | ENABLE_STRICT_OBJC_MSGSEND = YES; 317 | ENABLE_TESTABILITY = YES; 318 | GCC_C_LANGUAGE_STANDARD = gnu11; 319 | GCC_DYNAMIC_NO_PIC = NO; 320 | GCC_NO_COMMON_BLOCKS = YES; 321 | GCC_OPTIMIZATION_LEVEL = 0; 322 | GCC_PREPROCESSOR_DEFINITIONS = ( 323 | "DEBUG=1", 324 | "$(inherited)", 325 | ); 326 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 327 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 328 | GCC_WARN_UNDECLARED_SELECTOR = YES; 329 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 330 | GCC_WARN_UNUSED_FUNCTION = YES; 331 | GCC_WARN_UNUSED_VARIABLE = YES; 332 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 333 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 334 | MTL_FAST_MATH = YES; 335 | ONLY_ACTIVE_ARCH = YES; 336 | SDKROOT = iphoneos; 337 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 338 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 339 | VERSIONING_SYSTEM = "apple-generic"; 340 | VERSION_INFO_PREFIX = ""; 341 | }; 342 | name = Debug; 343 | }; 344 | 7021947C22DE061A00271DA2 /* Release */ = { 345 | isa = XCBuildConfiguration; 346 | buildSettings = { 347 | ALWAYS_SEARCH_USER_PATHS = NO; 348 | CLANG_ANALYZER_NONNULL = YES; 349 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 350 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 351 | CLANG_CXX_LIBRARY = "libc++"; 352 | CLANG_ENABLE_MODULES = YES; 353 | CLANG_ENABLE_OBJC_ARC = YES; 354 | CLANG_ENABLE_OBJC_WEAK = YES; 355 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 356 | CLANG_WARN_BOOL_CONVERSION = YES; 357 | CLANG_WARN_COMMA = YES; 358 | CLANG_WARN_CONSTANT_CONVERSION = YES; 359 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 360 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 361 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 362 | CLANG_WARN_EMPTY_BODY = YES; 363 | CLANG_WARN_ENUM_CONVERSION = YES; 364 | CLANG_WARN_INFINITE_RECURSION = YES; 365 | CLANG_WARN_INT_CONVERSION = YES; 366 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 367 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 368 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 369 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 370 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 371 | CLANG_WARN_STRICT_PROTOTYPES = YES; 372 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 373 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 374 | CLANG_WARN_UNREACHABLE_CODE = YES; 375 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 376 | CODE_SIGN_IDENTITY = "iPhone Developer"; 377 | COPY_PHASE_STRIP = NO; 378 | CURRENT_PROJECT_VERSION = 1; 379 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 380 | ENABLE_NS_ASSERTIONS = NO; 381 | ENABLE_STRICT_OBJC_MSGSEND = YES; 382 | GCC_C_LANGUAGE_STANDARD = gnu11; 383 | GCC_NO_COMMON_BLOCKS = YES; 384 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 385 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 386 | GCC_WARN_UNDECLARED_SELECTOR = YES; 387 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 388 | GCC_WARN_UNUSED_FUNCTION = YES; 389 | GCC_WARN_UNUSED_VARIABLE = YES; 390 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 391 | MTL_ENABLE_DEBUG_INFO = NO; 392 | MTL_FAST_MATH = YES; 393 | SDKROOT = iphoneos; 394 | SWIFT_COMPILATION_MODE = wholemodule; 395 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 396 | VALIDATE_PRODUCT = YES; 397 | VERSIONING_SYSTEM = "apple-generic"; 398 | VERSION_INFO_PREFIX = ""; 399 | }; 400 | name = Release; 401 | }; 402 | 7021947E22DE061A00271DA2 /* Debug */ = { 403 | isa = XCBuildConfiguration; 404 | buildSettings = { 405 | CLANG_ENABLE_MODULES = YES; 406 | CODE_SIGN_IDENTITY = ""; 407 | CODE_SIGN_STYLE = Automatic; 408 | DEFINES_MODULE = YES; 409 | DYLIB_COMPATIBILITY_VERSION = 1; 410 | DYLIB_CURRENT_VERSION = 1; 411 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 412 | INFOPLIST_FILE = UIDrawer/Info.plist; 413 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 414 | LD_RUNPATH_SEARCH_PATHS = ( 415 | "$(inherited)", 416 | "@executable_path/Frameworks", 417 | "@loader_path/Frameworks", 418 | ); 419 | PRODUCT_BUNDLE_IDENTIFIER = que20.UIDrawer; 420 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 421 | SKIP_INSTALL = YES; 422 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 423 | SWIFT_VERSION = 5.0; 424 | TARGETED_DEVICE_FAMILY = "1,2"; 425 | }; 426 | name = Debug; 427 | }; 428 | 7021947F22DE061A00271DA2 /* Release */ = { 429 | isa = XCBuildConfiguration; 430 | buildSettings = { 431 | CLANG_ENABLE_MODULES = YES; 432 | CODE_SIGN_IDENTITY = ""; 433 | CODE_SIGN_STYLE = Automatic; 434 | DEFINES_MODULE = YES; 435 | DYLIB_COMPATIBILITY_VERSION = 1; 436 | DYLIB_CURRENT_VERSION = 1; 437 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 438 | INFOPLIST_FILE = UIDrawer/Info.plist; 439 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 440 | LD_RUNPATH_SEARCH_PATHS = ( 441 | "$(inherited)", 442 | "@executable_path/Frameworks", 443 | "@loader_path/Frameworks", 444 | ); 445 | PRODUCT_BUNDLE_IDENTIFIER = que20.UIDrawer; 446 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 447 | SKIP_INSTALL = YES; 448 | SWIFT_VERSION = 5.0; 449 | TARGETED_DEVICE_FAMILY = "1,2"; 450 | }; 451 | name = Release; 452 | }; 453 | 70BDCE9122DE08010076D4F2 /* Debug */ = { 454 | isa = XCBuildConfiguration; 455 | buildSettings = { 456 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 457 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 458 | CODE_SIGN_STYLE = Automatic; 459 | INFOPLIST_FILE = Example/Info.plist; 460 | LD_RUNPATH_SEARCH_PATHS = ( 461 | "$(inherited)", 462 | "@executable_path/Frameworks", 463 | ); 464 | PRODUCT_BUNDLE_IDENTIFIER = que20.Example; 465 | PRODUCT_NAME = "$(TARGET_NAME)"; 466 | SWIFT_VERSION = 5.0; 467 | TARGETED_DEVICE_FAMILY = "1,2"; 468 | }; 469 | name = Debug; 470 | }; 471 | 70BDCE9222DE08010076D4F2 /* Release */ = { 472 | isa = XCBuildConfiguration; 473 | buildSettings = { 474 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 475 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 476 | CODE_SIGN_STYLE = Automatic; 477 | INFOPLIST_FILE = Example/Info.plist; 478 | LD_RUNPATH_SEARCH_PATHS = ( 479 | "$(inherited)", 480 | "@executable_path/Frameworks", 481 | ); 482 | PRODUCT_BUNDLE_IDENTIFIER = que20.Example; 483 | PRODUCT_NAME = "$(TARGET_NAME)"; 484 | SWIFT_VERSION = 5.0; 485 | TARGETED_DEVICE_FAMILY = "1,2"; 486 | }; 487 | name = Release; 488 | }; 489 | /* End XCBuildConfiguration section */ 490 | 491 | /* Begin XCConfigurationList section */ 492 | 7021946F22DE061A00271DA2 /* Build configuration list for PBXProject "UIDrawer" */ = { 493 | isa = XCConfigurationList; 494 | buildConfigurations = ( 495 | 7021947B22DE061A00271DA2 /* Debug */, 496 | 7021947C22DE061A00271DA2 /* Release */, 497 | ); 498 | defaultConfigurationIsVisible = 0; 499 | defaultConfigurationName = Release; 500 | }; 501 | 7021947D22DE061A00271DA2 /* Build configuration list for PBXNativeTarget "UIDrawer" */ = { 502 | isa = XCConfigurationList; 503 | buildConfigurations = ( 504 | 7021947E22DE061A00271DA2 /* Debug */, 505 | 7021947F22DE061A00271DA2 /* Release */, 506 | ); 507 | defaultConfigurationIsVisible = 0; 508 | defaultConfigurationName = Release; 509 | }; 510 | 70BDCE9322DE08010076D4F2 /* Build configuration list for PBXNativeTarget "Example" */ = { 511 | isa = XCConfigurationList; 512 | buildConfigurations = ( 513 | 70BDCE9122DE08010076D4F2 /* Debug */, 514 | 70BDCE9222DE08010076D4F2 /* Release */, 515 | ); 516 | defaultConfigurationIsVisible = 0; 517 | defaultConfigurationName = Release; 518 | }; 519 | /* End XCConfigurationList section */ 520 | }; 521 | rootObject = 7021946C22DE061A00271DA2 /* Project object */; 522 | } 523 | -------------------------------------------------------------------------------- /UIDrawer.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /UIDrawer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /UIDrawer.xcodeproj/xcshareddata/xcschemes/UIDrawer.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /UIDrawer.xcodeproj/xcuserdata/personnal.xcuserdatad/xcschemes/Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /UIDrawer.xcodeproj/xcuserdata/personnal.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Example.xcscheme 8 | 9 | orderHint 10 | 1 11 | 12 | UIDrawer.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | SuppressBuildableAutocreation 19 | 20 | 7021947422DE061A00271DA2 21 | 22 | primary 23 | 24 | 25 | 70BDCE8122DE07FF0076D4F2 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /UIDrawer/DrawerPresentationController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DrawerPresentationController.swift 3 | // UIDrawer 4 | // 5 | // Created by Personnal on 16/07/2019. 6 | // Copyright © 2019 Personnal. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | /// DrawerPresentationController is a UIPresentationController that allows 12 | /// modals to be presented like a bottom sheet. The kind of presentation style 13 | /// you can see on the Maps app on iOS. 14 | /// 15 | /// Return a DrawerPresentationController in a UIViewControllerTransitioningDelegate. 16 | 17 | public class DrawerPresentationController: UIPresentationController { 18 | 19 | /// Optional attributes 20 | 21 | /// Drawer delegate serves as a notifier for the presenting view controller. 22 | /// It will notify when the state (position) of the drawer has changed. 23 | /// Sate and position are here described as SnapPoints. 24 | public weak var drawerDelegate: DrawerPresentationControllerDelegate? 25 | 26 | /// Public setable attributes 27 | 28 | /// Blur effect for the view displayed behind the drawer. 29 | /// ------- 30 | /// |...A...| 31 | /// |.......| 32 | /// |.......| . = Bulrred view 33 | /// |/¯¯¯¯¯\| A = Presenting 34 | /// | B | B = Presented (Modal) 35 | /// |_______| 36 | public var blurEffectStyle: UIBlurEffect.Style = .light 37 | 38 | /// The gap between the top of the modal and the top of the presenting 39 | /// view controller. 40 | /// ------- 41 | /// | A | ¯| 42 | /// | | |< this is the top gap 43 | /// | | _| 44 | /// |/¯¯¯¯¯\| A = Presenting 45 | /// | B | B = Presented (Modal) 46 | /// |_______| 47 | public var topGap: CGFloat = 88 48 | 49 | /// Modal width, you probably want to change it on an iPad to prevent it 50 | /// taking the whole width available. 51 | /// 0 = same with of the presenting view controller. 52 | /// ------- 53 | /// | A | 54 | /// | | 55 | /// | | 56 | /// |/¯¯¯¯¯\| A = Presenting 57 | /// | B | B = Presented (Modal) 58 | /// |_______| 59 | /// ___^___ -> This is the modal width 60 | /// 0 = full width 61 | public var modalWidth: CGFloat = 0 62 | 63 | /// Toggle the bounce value to allow the modal to bounce when it's being 64 | /// dragged top, over the max width (add the top gap). 65 | public var bounce: Bool = false 66 | 67 | /// The modal corners radius. 68 | /// The default value is 20 for a minimal yet elegant radius. 69 | public var cornerRadius: CGFloat = 20 70 | 71 | /// Set the modal's corners that should be rounded. 72 | /// Defaults are the two top corners. 73 | public var roundedCorners: UIRectCorner = [.topLeft, .topRight] 74 | 75 | /// Frame for the modally presented view. 76 | override public var frameOfPresentedViewInContainerView: CGRect { 77 | return CGRect(origin: CGPoint(x: 0, y: self.containerView!.frame.height/2), size: CGSize(width: (self.modalWidth == 0 ? self.containerView!.frame.width : self.modalWidth), height: self.containerView!.frame.height-self.topGap)) 78 | } 79 | 80 | /// Private Attributes 81 | private var currentSnapPoint: DraweSnapPoint = .middle 82 | 83 | private lazy var blurEffectView: UIVisualEffectView = { 84 | let blur = UIVisualEffectView(effect: UIBlurEffect(style: self.blurEffectStyle)) 85 | blur.isUserInteractionEnabled = true 86 | blur.autoresizingMask = [.flexibleWidth, .flexibleHeight] 87 | blur.addGestureRecognizer(self.tapGestureRecognizer) 88 | return blur 89 | }() 90 | 91 | private lazy var tapGestureRecognizer: UITapGestureRecognizer = { 92 | return UITapGestureRecognizer(target: self, action: #selector(self.dismiss)) 93 | }() 94 | 95 | private lazy var panGesture: UIPanGestureRecognizer = { 96 | let pan = UIPanGestureRecognizer(target: self, action: #selector(self.drag(_:))) 97 | return pan 98 | }() 99 | 100 | /// Initializers 101 | /// Init with non required values - defaults are provided. 102 | public convenience init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?, drawerDelegate: DrawerPresentationControllerDelegate? = nil, blurEffectStyle: UIBlurEffect.Style = .light, topGap: CGFloat = 88, modalWidth: CGFloat = 0, cornerRadius: CGFloat = 20) { 103 | self.init(presentedViewController: presentedViewController, presenting: presentingViewController) 104 | self.drawerDelegate = drawerDelegate 105 | self.blurEffectStyle = blurEffectStyle 106 | self.topGap = topGap 107 | self.modalWidth = modalWidth 108 | self.cornerRadius = cornerRadius 109 | } 110 | /// Regular init. 111 | override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) { 112 | super.init(presentedViewController: presentedViewController, presenting: presentingViewController) 113 | } 114 | 115 | override public func dismissalTransitionWillBegin() { 116 | self.presentedViewController.transitionCoordinator?.animate(alongsideTransition: { (UIViewControllerTransitionCoordinatorContext) in 117 | self.blurEffectView.alpha = 0 118 | }, completion: { (UIViewControllerTransitionCoordinatorContext) in 119 | self.blurEffectView.removeFromSuperview() 120 | }) 121 | } 122 | 123 | override public func presentationTransitionWillBegin() { 124 | self.blurEffectView.alpha = 0 125 | // Add the blur effect view 126 | guard let presenterView = self.containerView else { return } 127 | presenterView.addSubview(self.blurEffectView) 128 | 129 | self.presentedViewController.transitionCoordinator?.animate(alongsideTransition: { (UIViewControllerTransitionCoordinatorContext) in 130 | self.blurEffectView.alpha = 1 131 | }, completion: { (UIViewControllerTransitionCoordinatorContext) in }) 132 | } 133 | 134 | override public func containerViewWillLayoutSubviews() { 135 | super.containerViewWillLayoutSubviews() 136 | guard let presentedView = self.presentedView else { return } 137 | 138 | presentedView.layer.masksToBounds = true 139 | presentedView.roundCorners(corners: self.roundedCorners, radius: self.cornerRadius) 140 | presentedView.addGestureRecognizer(self.panGesture) 141 | } 142 | 143 | override public func containerViewDidLayoutSubviews() { 144 | super.containerViewDidLayoutSubviews() 145 | guard let presenterView = self.containerView else { return } 146 | guard let presentedView = self.presentedView else { return } 147 | 148 | // Set the frame and position of the modal 149 | presentedView.frame = self.frameOfPresentedViewInContainerView 150 | presentedView.frame.origin.x = (presenterView.frame.width - presentedView.frame.width) / 2 151 | presentedView.center = CGPoint(x: presentedView.center.x, y: presenterView.center.y * 2) 152 | 153 | // Set the blur effect frame, behind the modal 154 | self.blurEffectView.frame = presenterView.bounds 155 | } 156 | 157 | @objc func dismiss() { 158 | self.presentedViewController.dismiss(animated: true, completion: nil) 159 | } 160 | 161 | @objc func drag(_ gesture:UIPanGestureRecognizer) { 162 | guard let presentedView = self.presentedView else { return } 163 | switch gesture.state { 164 | case .changed: 165 | self.presentingViewController.view.bringSubviewToFront(presentedView) 166 | let translation = gesture.translation(in: self.presentingViewController.view) 167 | let y = presentedView.center.y + translation.y 168 | 169 | let preventBounce: Bool = self.bounce ? true : (y - (self.topGap / 2) > self.presentingViewController.view.center.y) 170 | // If bounce enabled or view went over the maximum y postion. 171 | if preventBounce { 172 | presentedView.center = CGPoint(x: self.presentedView!.center.x, y: y) 173 | } 174 | gesture.setTranslation(CGPoint.zero, in: self.presentingViewController.view) 175 | case .ended: 176 | let height = self.presentingViewController.view.frame.height 177 | let position = presentedView.convert(self.presentingViewController.view.frame, to: nil).origin.y 178 | if position < 0 || position < (1/4 * height) { 179 | // TOP SNAP POINT 180 | self.sendToTop() 181 | self.currentSnapPoint = .top 182 | } else if (position < (height / 2)) || (position > (height / 2) && position < (height / 3)) { 183 | // MIDDLE SNAP POINT 184 | self.sendToMiddle() 185 | self.currentSnapPoint = .middle 186 | } else { 187 | // BOTTOM SNAP POINT 188 | self.currentSnapPoint = .close 189 | self.dismiss() 190 | } 191 | if let d = self.drawerDelegate { 192 | d.drawerMovedTo(position: self.currentSnapPoint) 193 | } 194 | gesture.setTranslation(CGPoint.zero, in: self.presentingViewController.view) 195 | default: 196 | return 197 | } 198 | } 199 | 200 | func sendToTop() { 201 | guard let presentedView = self.presentedView else { return } 202 | let topYPosition: CGFloat = (self.presentingViewController.view.center.y + CGFloat(self.topGap / 2)) 203 | UIView.animate(withDuration: 0.25) { 204 | presentedView.center = CGPoint(x: presentedView.center.x, y: topYPosition) 205 | } 206 | } 207 | 208 | func sendToMiddle() { 209 | if let presentedView = self.presentedView { 210 | let y = self.presentingViewController.view.center.y * 2 211 | UIView.animate(withDuration: 0.25) { 212 | presentedView.center = CGPoint(x: presentedView.center.x, y: y) 213 | } 214 | } 215 | } 216 | } 217 | 218 | private extension UIView { 219 | func roundCorners(corners: UIRectCorner, radius: CGFloat) { 220 | let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) 221 | let mask = CAShapeLayer() 222 | mask.path = path.cgPath 223 | layer.mask = mask 224 | } 225 | } 226 | -------------------------------------------------------------------------------- /UIDrawer/DrawerPresentationControllerDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DrawerPresentationControllerDelegate.swift 3 | // UIDrawer 4 | // 5 | // Created by Personnal on 16/07/2019. 6 | // Copyright © 2019 Personnal. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public protocol DrawerPresentationControllerDelegate: class { 12 | func drawerMovedTo(position: DraweSnapPoint) 13 | } 14 | 15 | public enum DraweSnapPoint { 16 | case top 17 | case middle 18 | case close 19 | } 20 | -------------------------------------------------------------------------------- /UIDrawer/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /UIDrawer/UIDrawer.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIDrawer.h 3 | // UIDrawer 4 | // 5 | // Created by Kevin Maarek on 16/07/2019. 6 | // Copyright © 2019 que20. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for UIDrawer. 12 | FOUNDATION_EXPORT double UIDrawerVersionNumber; 13 | 14 | //! Project version string for UIDrawer. 15 | FOUNDATION_EXPORT const unsigned char UIDrawerVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Que20/UIDrawer/7190513a6c820f046dcd8be2c85adef54366cfc1/demo.gif --------------------------------------------------------------------------------