├── .gitignore
├── .swiftpm
└── xcode
│ └── package.xcworkspace
│ └── contents.xcworkspacedata
├── .travis.yml
├── AppBottomActionSheet.podspec
├── Example
├── .gitignore
├── AppBottomActionSheet.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── AppBottomActionSheet-Example.xcscheme
├── AppBottomActionSheet.xcworkspace
│ └── contents.xcworkspacedata
├── AppBottomActionSheet
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ ├── LaunchScreen.xib
│ │ └── Main.storyboard
│ ├── DetailViewController.swift
│ ├── Images.xcassets
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── Info.plist
│ └── ViewController.swift
├── Podfile
├── Podfile.lock
├── Pods
│ ├── Local Podspecs
│ │ └── AppBottomActionSheet.podspec.json
│ ├── Manifest.lock
│ ├── Pods.xcodeproj
│ │ └── project.pbxproj
│ └── Target Support Files
│ │ ├── AppBottomActionSheet
│ │ ├── AppBottomActionSheet-Info.plist
│ │ ├── AppBottomActionSheet-dummy.m
│ │ ├── AppBottomActionSheet-prefix.pch
│ │ ├── AppBottomActionSheet-umbrella.h
│ │ ├── AppBottomActionSheet.debug.xcconfig
│ │ ├── AppBottomActionSheet.modulemap
│ │ ├── AppBottomActionSheet.release.xcconfig
│ │ ├── AppBottomActionSheet.xcconfig
│ │ ├── Info.plist
│ │ ├── ResourceBundle-AppBottomActionSheet-AppBottomActionSheet-Info.plist
│ │ └── ResourceBundle-AppBottomActionSheet-Info.plist
│ │ └── Pods-AppBottomActionSheet_Example
│ │ ├── Info.plist
│ │ ├── Pods-AppBottomActionSheet_Example-Info.plist
│ │ ├── Pods-AppBottomActionSheet_Example-acknowledgements.markdown
│ │ ├── Pods-AppBottomActionSheet_Example-acknowledgements.plist
│ │ ├── Pods-AppBottomActionSheet_Example-dummy.m
│ │ ├── Pods-AppBottomActionSheet_Example-frameworks.sh
│ │ ├── Pods-AppBottomActionSheet_Example-resources.sh
│ │ ├── Pods-AppBottomActionSheet_Example-umbrella.h
│ │ ├── Pods-AppBottomActionSheet_Example.debug.xcconfig
│ │ ├── Pods-AppBottomActionSheet_Example.modulemap
│ │ └── Pods-AppBottomActionSheet_Example.release.xcconfig
└── Tests
│ ├── Info.plist
│ └── Tests.swift
├── LICENSE
├── Package.swift
├── README.md
├── Sources
└── AppBottomActionSheet
│ ├── Assets
│ └── .gitkeep
│ └── Classes
│ ├── .gitkeep
│ ├── AnimatorConvenience.swift
│ ├── DismissBar.storyboard
│ ├── DismissBarViewController.swift
│ ├── DismissalAnimator.swift
│ ├── PresentationAnimator.swift
│ ├── PresentationManager.swift
│ ├── PresentationProtocol.swift
│ ├── PresentationViewController.swift
│ ├── Protocols.swift
│ ├── TransitionConfiguration.swift
│ ├── Utilities.swift
│ └── VerticalPanGestureRecognizer.swift
├── Tests
├── AppBottomActionSheetTests
│ ├── AppBottomActionSheetTests.swift
│ └── XCTestManifests.swift
└── LinuxMain.swift
├── _Pods.xcodeproj
├── facebookstyle.PNG
├── fastlane
├── Appfile
├── Fastfile
├── README.md
└── report.xml
└── whatsappstyle.PNG
/.gitignore:
--------------------------------------------------------------------------------
1 | # OS X
2 | .DS_Store
3 |
4 | # Xcode
5 | build/
6 | *.pbxuser
7 | !default.pbxuser
8 | *.mode1v3
9 | !default.mode1v3
10 | *.mode2v3
11 | !default.mode2v3
12 | *.perspectivev3
13 | !default.perspectivev3
14 | xcuserdata/
15 | *.xccheckout
16 | profile
17 | *.moved-aside
18 | DerivedData
19 | *.hmap
20 | *.ipa
21 | AppBottomActionSheet.xcworkspace
22 |
23 | # Bundler
24 | .bundle
25 |
26 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
27 | # Carthage/Checkouts
28 |
29 | Carthage/Build
30 |
31 | # We recommend against adding the Pods directory to your .gitignore. However
32 | # you should judge for yourself, the pros and cons are mentioned at:
33 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
34 | #
35 | # Note: if you ignore the Pods directory, make sure to uncomment
36 | # `pod install` in .travis.yml
37 | #
38 | # Pods/
39 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | # references:
2 | # * http://www.objc.io/issue-6/travis-ci.html
3 | # * https://github.com/supermarin/xcpretty#usage
4 |
5 | osx_image: xcode7.3
6 | language: objective-c
7 | # cache: cocoapods
8 | # podfile: Example/Podfile
9 | # before_install:
10 | # - gem install cocoapods # Since Travis is not always on latest version
11 | # - pod install --project-directory=Example
12 | script:
13 | - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/AppBottomActionSheet.xcworkspace -scheme AppBottomActionSheet-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty
14 | - pod lib lint
15 |
--------------------------------------------------------------------------------
/AppBottomActionSheet.podspec:
--------------------------------------------------------------------------------
1 |
2 |
3 | Pod::Spec.new do |s|
4 | s.name = 'AppBottomActionSheet'
5 | s.version = '1.0.11'
6 | s.swift_version = '5.0'
7 | s.summary = 'A Sweet extension for custom bottom sheet'
8 | s.homepage = 'https://github.com/karthikAdaptavant/AppBottomActionSheet'
9 | s.license = { :type => 'MIT', :file => 'LICENSE' }
10 | s.author = { 'karthikAdaptavant' => 'karthik.samy@a-cti.com' }
11 | s.source = { :git => 'https://github.com/karthikAdaptavant/AppBottomActionSheet.git', :tag => s.version.to_s }
12 | s.social_media_url = 'https://twitter.com/i_am_kaarthik'
13 |
14 | s.ios.deployment_target = '10.0'
15 | s.source_files = 'Sources/AppBottomActionSheet/Classes/**/*.{swift}'
16 |
17 | s.resource_bundles = {
18 | 'AppBottomActionSheet' => ['Sources/AppBottomActionSheet/Classes/**/*.{storyboard}']
19 | }
20 |
21 | end
22 |
23 |
24 | # To Make a new build, run fastlane.
25 |
--------------------------------------------------------------------------------
/Example/.gitignore:
--------------------------------------------------------------------------------
1 | # OS X
2 | .DS_Store
3 |
4 | # Xcode
5 | build/
6 | *.pbxuser
7 | !default.pbxuser
8 | *.mode1v3
9 | !default.mode1v3
10 | *.mode2v3
11 | !default.mode2v3
12 | *.perspectivev3
13 | !default.perspectivev3
14 | xcuserdata/
15 | xcshareddata/
16 | *.xccheckout
17 | profile
18 | *.moved-aside
19 | DerivedData
20 | *.hmap
21 | *.ipa
22 |
23 | # Bundler
24 | .bundle
25 |
26 | # Pods/
27 |
--------------------------------------------------------------------------------
/Example/AppBottomActionSheet.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 256C16EA206248EC007A32CA /* .gitignore in Resources */ = {isa = PBXBuildFile; fileRef = 256C16E9206248EC007A32CA /* .gitignore */; };
11 | 2577C7E22062837D00259ABF /* DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2577C7E12062837D00259ABF /* DetailViewController.swift */; };
12 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; };
13 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; };
14 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; };
15 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; };
16 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; };
17 | 6403C1B13871A27A33049B07 /* Pods_AppBottomActionSheet_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E66280FB348756449C7B7CC6 /* Pods_AppBottomActionSheet_Example.framework */; };
18 | /* End PBXBuildFile section */
19 |
20 | /* Begin PBXFileReference section */
21 | 03A2743066FF83EDB2F9EB28 /* AppBottomActionSheet.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = AppBottomActionSheet.podspec; path = ../AppBottomActionSheet.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
22 | 256C16E9206248EC007A32CA /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; };
23 | 2577C7E12062837D00259ABF /* DetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = ""; };
24 | 4C3BA6ECE9F7D2F176AB1FBF /* Pods-AppBottomActionSheet_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AppBottomActionSheet_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-AppBottomActionSheet_Tests/Pods-AppBottomActionSheet_Tests.debug.xcconfig"; sourceTree = ""; };
25 | 607FACD01AFB9204008FA782 /* AppBottomActionSheet_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AppBottomActionSheet_Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
26 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
27 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
28 | 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
29 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
30 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
31 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
32 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
33 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; };
34 | 6629F7EA36279FCA6E39EC90 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; };
35 | 8AB42E91187129D96A2D6AA2 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; };
36 | 90A3ADDFC9872844C3FB28B8 /* Pods-AppBottomActionSheet_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AppBottomActionSheet_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example.release.xcconfig"; sourceTree = ""; };
37 | A81BB6843CD001F2935CED89 /* Pods-AppBottomActionSheet_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AppBottomActionSheet_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-AppBottomActionSheet_Tests/Pods-AppBottomActionSheet_Tests.release.xcconfig"; sourceTree = ""; };
38 | DB640DBB74D225C81025653F /* Pods-AppBottomActionSheet_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AppBottomActionSheet_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example.debug.xcconfig"; sourceTree = ""; };
39 | E66280FB348756449C7B7CC6 /* Pods_AppBottomActionSheet_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AppBottomActionSheet_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
40 | F5E045DEAF0528EBF81E731F /* Pods_AppBottomActionSheet_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AppBottomActionSheet_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
41 | /* End PBXFileReference section */
42 |
43 | /* Begin PBXFrameworksBuildPhase section */
44 | 607FACCD1AFB9204008FA782 /* Frameworks */ = {
45 | isa = PBXFrameworksBuildPhase;
46 | buildActionMask = 2147483647;
47 | files = (
48 | 6403C1B13871A27A33049B07 /* Pods_AppBottomActionSheet_Example.framework in Frameworks */,
49 | );
50 | runOnlyForDeploymentPostprocessing = 0;
51 | };
52 | /* End PBXFrameworksBuildPhase section */
53 |
54 | /* Begin PBXGroup section */
55 | 48C1367C2CAA1EEF73F96C2A /* Pods */ = {
56 | isa = PBXGroup;
57 | children = (
58 | DB640DBB74D225C81025653F /* Pods-AppBottomActionSheet_Example.debug.xcconfig */,
59 | 90A3ADDFC9872844C3FB28B8 /* Pods-AppBottomActionSheet_Example.release.xcconfig */,
60 | 4C3BA6ECE9F7D2F176AB1FBF /* Pods-AppBottomActionSheet_Tests.debug.xcconfig */,
61 | A81BB6843CD001F2935CED89 /* Pods-AppBottomActionSheet_Tests.release.xcconfig */,
62 | );
63 | name = Pods;
64 | sourceTree = "";
65 | };
66 | 607FACC71AFB9204008FA782 = {
67 | isa = PBXGroup;
68 | children = (
69 | 256C16E9206248EC007A32CA /* .gitignore */,
70 | 607FACF51AFB993E008FA782 /* Podspec Metadata */,
71 | 607FACD21AFB9204008FA782 /* Example for AppBottomActionSheet */,
72 | 607FACE81AFB9204008FA782 /* Tests */,
73 | 607FACD11AFB9204008FA782 /* Products */,
74 | 48C1367C2CAA1EEF73F96C2A /* Pods */,
75 | E040EB8774C3A67346703BDA /* Frameworks */,
76 | );
77 | sourceTree = "";
78 | };
79 | 607FACD11AFB9204008FA782 /* Products */ = {
80 | isa = PBXGroup;
81 | children = (
82 | 607FACD01AFB9204008FA782 /* AppBottomActionSheet_Example.app */,
83 | );
84 | name = Products;
85 | sourceTree = "";
86 | };
87 | 607FACD21AFB9204008FA782 /* Example for AppBottomActionSheet */ = {
88 | isa = PBXGroup;
89 | children = (
90 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */,
91 | 607FACD71AFB9204008FA782 /* ViewController.swift */,
92 | 2577C7E12062837D00259ABF /* DetailViewController.swift */,
93 | 607FACD91AFB9204008FA782 /* Main.storyboard */,
94 | 607FACDC1AFB9204008FA782 /* Images.xcassets */,
95 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */,
96 | 607FACD31AFB9204008FA782 /* Supporting Files */,
97 | );
98 | name = "Example for AppBottomActionSheet";
99 | path = AppBottomActionSheet;
100 | sourceTree = "";
101 | };
102 | 607FACD31AFB9204008FA782 /* Supporting Files */ = {
103 | isa = PBXGroup;
104 | children = (
105 | 607FACD41AFB9204008FA782 /* Info.plist */,
106 | );
107 | name = "Supporting Files";
108 | sourceTree = "";
109 | };
110 | 607FACE81AFB9204008FA782 /* Tests */ = {
111 | isa = PBXGroup;
112 | children = (
113 | 607FACEB1AFB9204008FA782 /* Tests.swift */,
114 | 607FACE91AFB9204008FA782 /* Supporting Files */,
115 | );
116 | path = Tests;
117 | sourceTree = "";
118 | };
119 | 607FACE91AFB9204008FA782 /* Supporting Files */ = {
120 | isa = PBXGroup;
121 | children = (
122 | 607FACEA1AFB9204008FA782 /* Info.plist */,
123 | );
124 | name = "Supporting Files";
125 | sourceTree = "";
126 | };
127 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = {
128 | isa = PBXGroup;
129 | children = (
130 | 03A2743066FF83EDB2F9EB28 /* AppBottomActionSheet.podspec */,
131 | 8AB42E91187129D96A2D6AA2 /* README.md */,
132 | 6629F7EA36279FCA6E39EC90 /* LICENSE */,
133 | );
134 | name = "Podspec Metadata";
135 | sourceTree = "";
136 | };
137 | E040EB8774C3A67346703BDA /* Frameworks */ = {
138 | isa = PBXGroup;
139 | children = (
140 | E66280FB348756449C7B7CC6 /* Pods_AppBottomActionSheet_Example.framework */,
141 | F5E045DEAF0528EBF81E731F /* Pods_AppBottomActionSheet_Tests.framework */,
142 | );
143 | name = Frameworks;
144 | sourceTree = "";
145 | };
146 | /* End PBXGroup section */
147 |
148 | /* Begin PBXNativeTarget section */
149 | 607FACCF1AFB9204008FA782 /* AppBottomActionSheet_Example */ = {
150 | isa = PBXNativeTarget;
151 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AppBottomActionSheet_Example" */;
152 | buildPhases = (
153 | BC13468721ED081D01B27E5F /* [CP] Check Pods Manifest.lock */,
154 | 607FACCC1AFB9204008FA782 /* Sources */,
155 | 607FACCD1AFB9204008FA782 /* Frameworks */,
156 | 607FACCE1AFB9204008FA782 /* Resources */,
157 | E0859376903B9D3D0A4226E7 /* [CP] Embed Pods Frameworks */,
158 | );
159 | buildRules = (
160 | );
161 | dependencies = (
162 | );
163 | name = AppBottomActionSheet_Example;
164 | productName = AppBottomActionSheet;
165 | productReference = 607FACD01AFB9204008FA782 /* AppBottomActionSheet_Example.app */;
166 | productType = "com.apple.product-type.application";
167 | };
168 | /* End PBXNativeTarget section */
169 |
170 | /* Begin PBXProject section */
171 | 607FACC81AFB9204008FA782 /* Project object */ = {
172 | isa = PBXProject;
173 | attributes = {
174 | LastSwiftUpdateCheck = 0830;
175 | LastUpgradeCheck = 1200;
176 | ORGANIZATIONNAME = CocoaPods;
177 | TargetAttributes = {
178 | 607FACCF1AFB9204008FA782 = {
179 | CreatedOnToolsVersion = 6.3.1;
180 | DevelopmentTeam = LN6WEZTE69;
181 | LastSwiftMigration = 1200;
182 | ProvisioningStyle = Manual;
183 | };
184 | };
185 | };
186 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "AppBottomActionSheet" */;
187 | compatibilityVersion = "Xcode 3.2";
188 | developmentRegion = en;
189 | hasScannedForEncodings = 0;
190 | knownRegions = (
191 | en,
192 | Base,
193 | );
194 | mainGroup = 607FACC71AFB9204008FA782;
195 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */;
196 | projectDirPath = "";
197 | projectRoot = "";
198 | targets = (
199 | 607FACCF1AFB9204008FA782 /* AppBottomActionSheet_Example */,
200 | );
201 | };
202 | /* End PBXProject section */
203 |
204 | /* Begin PBXResourcesBuildPhase section */
205 | 607FACCE1AFB9204008FA782 /* Resources */ = {
206 | isa = PBXResourcesBuildPhase;
207 | buildActionMask = 2147483647;
208 | files = (
209 | 256C16EA206248EC007A32CA /* .gitignore in Resources */,
210 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */,
211 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */,
212 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */,
213 | );
214 | runOnlyForDeploymentPostprocessing = 0;
215 | };
216 | /* End PBXResourcesBuildPhase section */
217 |
218 | /* Begin PBXShellScriptBuildPhase section */
219 | BC13468721ED081D01B27E5F /* [CP] Check Pods Manifest.lock */ = {
220 | isa = PBXShellScriptBuildPhase;
221 | buildActionMask = 2147483647;
222 | files = (
223 | );
224 | inputPaths = (
225 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
226 | "${PODS_ROOT}/Manifest.lock",
227 | );
228 | name = "[CP] Check Pods Manifest.lock";
229 | outputPaths = (
230 | "$(DERIVED_FILE_DIR)/Pods-AppBottomActionSheet_Example-checkManifestLockResult.txt",
231 | );
232 | runOnlyForDeploymentPostprocessing = 0;
233 | shellPath = /bin/sh;
234 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
235 | showEnvVarsInLog = 0;
236 | };
237 | E0859376903B9D3D0A4226E7 /* [CP] Embed Pods Frameworks */ = {
238 | isa = PBXShellScriptBuildPhase;
239 | buildActionMask = 2147483647;
240 | files = (
241 | );
242 | inputPaths = (
243 | "${PODS_ROOT}/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example-frameworks.sh",
244 | "${BUILT_PRODUCTS_DIR}/AppBottomActionSheet/AppBottomActionSheet.framework",
245 | );
246 | name = "[CP] Embed Pods Frameworks";
247 | outputPaths = (
248 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppBottomActionSheet.framework",
249 | );
250 | runOnlyForDeploymentPostprocessing = 0;
251 | shellPath = /bin/sh;
252 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example-frameworks.sh\"\n";
253 | showEnvVarsInLog = 0;
254 | };
255 | /* End PBXShellScriptBuildPhase section */
256 |
257 | /* Begin PBXSourcesBuildPhase section */
258 | 607FACCC1AFB9204008FA782 /* Sources */ = {
259 | isa = PBXSourcesBuildPhase;
260 | buildActionMask = 2147483647;
261 | files = (
262 | 2577C7E22062837D00259ABF /* DetailViewController.swift in Sources */,
263 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */,
264 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */,
265 | );
266 | runOnlyForDeploymentPostprocessing = 0;
267 | };
268 | /* End PBXSourcesBuildPhase section */
269 |
270 | /* Begin PBXVariantGroup section */
271 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = {
272 | isa = PBXVariantGroup;
273 | children = (
274 | 607FACDA1AFB9204008FA782 /* Base */,
275 | );
276 | name = Main.storyboard;
277 | sourceTree = "";
278 | };
279 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = {
280 | isa = PBXVariantGroup;
281 | children = (
282 | 607FACDF1AFB9204008FA782 /* Base */,
283 | );
284 | name = LaunchScreen.xib;
285 | sourceTree = "";
286 | };
287 | /* End PBXVariantGroup section */
288 |
289 | /* Begin XCBuildConfiguration section */
290 | 607FACED1AFB9204008FA782 /* Debug */ = {
291 | isa = XCBuildConfiguration;
292 | buildSettings = {
293 | ALWAYS_SEARCH_USER_PATHS = NO;
294 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
295 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
296 | CLANG_CXX_LIBRARY = "libc++";
297 | CLANG_ENABLE_MODULES = YES;
298 | CLANG_ENABLE_OBJC_ARC = YES;
299 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
300 | CLANG_WARN_BOOL_CONVERSION = YES;
301 | CLANG_WARN_COMMA = YES;
302 | CLANG_WARN_CONSTANT_CONVERSION = YES;
303 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
304 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
305 | CLANG_WARN_EMPTY_BODY = YES;
306 | CLANG_WARN_ENUM_CONVERSION = YES;
307 | CLANG_WARN_INFINITE_RECURSION = YES;
308 | CLANG_WARN_INT_CONVERSION = YES;
309 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
310 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
311 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
312 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
313 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
314 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
315 | CLANG_WARN_STRICT_PROTOTYPES = YES;
316 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
317 | CLANG_WARN_UNREACHABLE_CODE = YES;
318 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
319 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
320 | COPY_PHASE_STRIP = NO;
321 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
322 | ENABLE_STRICT_OBJC_MSGSEND = YES;
323 | ENABLE_TESTABILITY = YES;
324 | GCC_C_LANGUAGE_STANDARD = gnu99;
325 | GCC_DYNAMIC_NO_PIC = NO;
326 | GCC_NO_COMMON_BLOCKS = YES;
327 | GCC_OPTIMIZATION_LEVEL = 0;
328 | GCC_PREPROCESSOR_DEFINITIONS = (
329 | "DEBUG=1",
330 | "$(inherited)",
331 | );
332 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
333 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
334 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
335 | GCC_WARN_UNDECLARED_SELECTOR = YES;
336 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
337 | GCC_WARN_UNUSED_FUNCTION = YES;
338 | GCC_WARN_UNUSED_VARIABLE = YES;
339 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
340 | MTL_ENABLE_DEBUG_INFO = YES;
341 | ONLY_ACTIVE_ARCH = YES;
342 | SDKROOT = iphoneos;
343 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
344 | SWIFT_VERSION = 5.0;
345 | };
346 | name = Debug;
347 | };
348 | 607FACEE1AFB9204008FA782 /* Release */ = {
349 | isa = XCBuildConfiguration;
350 | buildSettings = {
351 | ALWAYS_SEARCH_USER_PATHS = NO;
352 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
353 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
354 | CLANG_CXX_LIBRARY = "libc++";
355 | CLANG_ENABLE_MODULES = YES;
356 | CLANG_ENABLE_OBJC_ARC = YES;
357 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
358 | CLANG_WARN_BOOL_CONVERSION = YES;
359 | CLANG_WARN_COMMA = YES;
360 | CLANG_WARN_CONSTANT_CONVERSION = YES;
361 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
362 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
363 | CLANG_WARN_EMPTY_BODY = YES;
364 | CLANG_WARN_ENUM_CONVERSION = YES;
365 | CLANG_WARN_INFINITE_RECURSION = YES;
366 | CLANG_WARN_INT_CONVERSION = YES;
367 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
368 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
369 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
370 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
371 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
372 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
373 | CLANG_WARN_STRICT_PROTOTYPES = YES;
374 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
375 | CLANG_WARN_UNREACHABLE_CODE = YES;
376 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
377 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
378 | COPY_PHASE_STRIP = NO;
379 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
380 | ENABLE_NS_ASSERTIONS = NO;
381 | ENABLE_STRICT_OBJC_MSGSEND = YES;
382 | GCC_C_LANGUAGE_STANDARD = gnu99;
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 = 10.0;
391 | MTL_ENABLE_DEBUG_INFO = NO;
392 | SDKROOT = iphoneos;
393 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
394 | SWIFT_VERSION = 5.0;
395 | VALIDATE_PRODUCT = YES;
396 | };
397 | name = Release;
398 | };
399 | 607FACF01AFB9204008FA782 /* Debug */ = {
400 | isa = XCBuildConfiguration;
401 | baseConfigurationReference = DB640DBB74D225C81025653F /* Pods-AppBottomActionSheet_Example.debug.xcconfig */;
402 | buildSettings = {
403 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
404 | CODE_SIGN_STYLE = Manual;
405 | DEVELOPMENT_TEAM = LN6WEZTE69;
406 | INFOPLIST_FILE = AppBottomActionSheet/Info.plist;
407 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
408 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
409 | MODULE_NAME = ExampleApp;
410 | PRODUCT_BUNDLE_IDENTIFIER = io.full.answerconnect;
411 | PRODUCT_NAME = "$(TARGET_NAME)";
412 | PROVISIONING_PROFILE = "3b88fa5d-61ac-4b68-95ac-61371e775e9a";
413 | PROVISIONING_PROFILE_SPECIFIER = "Answerconnect dev profile";
414 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
415 | SWIFT_VERSION = 5.0;
416 | };
417 | name = Debug;
418 | };
419 | 607FACF11AFB9204008FA782 /* Release */ = {
420 | isa = XCBuildConfiguration;
421 | baseConfigurationReference = 90A3ADDFC9872844C3FB28B8 /* Pods-AppBottomActionSheet_Example.release.xcconfig */;
422 | buildSettings = {
423 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
424 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
425 | CODE_SIGN_STYLE = Manual;
426 | DEVELOPMENT_TEAM = LN6WEZTE69;
427 | INFOPLIST_FILE = AppBottomActionSheet/Info.plist;
428 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
429 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
430 | MODULE_NAME = ExampleApp;
431 | PRODUCT_BUNDLE_IDENTIFIER = io.full.answerconnect;
432 | PRODUCT_NAME = "$(TARGET_NAME)";
433 | PROVISIONING_PROFILE = "f49927a3-22b5-42eb-8302-fea626d1b4b6";
434 | PROVISIONING_PROFILE_SPECIFIER = "Answerconnect live profile";
435 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
436 | SWIFT_VERSION = 5.0;
437 | };
438 | name = Release;
439 | };
440 | /* End XCBuildConfiguration section */
441 |
442 | /* Begin XCConfigurationList section */
443 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "AppBottomActionSheet" */ = {
444 | isa = XCConfigurationList;
445 | buildConfigurations = (
446 | 607FACED1AFB9204008FA782 /* Debug */,
447 | 607FACEE1AFB9204008FA782 /* Release */,
448 | );
449 | defaultConfigurationIsVisible = 0;
450 | defaultConfigurationName = Release;
451 | };
452 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AppBottomActionSheet_Example" */ = {
453 | isa = XCConfigurationList;
454 | buildConfigurations = (
455 | 607FACF01AFB9204008FA782 /* Debug */,
456 | 607FACF11AFB9204008FA782 /* Release */,
457 | );
458 | defaultConfigurationIsVisible = 0;
459 | defaultConfigurationName = Release;
460 | };
461 | /* End XCConfigurationList section */
462 | };
463 | rootObject = 607FACC81AFB9204008FA782 /* Project object */;
464 | }
465 |
--------------------------------------------------------------------------------
/Example/AppBottomActionSheet.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Example/AppBottomActionSheet.xcodeproj/xcshareddata/xcschemes/AppBottomActionSheet-Example.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
51 |
52 |
53 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
76 |
78 |
84 |
85 |
86 |
87 |
93 |
95 |
101 |
102 |
103 |
104 |
106 |
107 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/Example/AppBottomActionSheet.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Example/AppBottomActionSheet/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. 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 | // Override point for customization after application launch.
19 | return true
20 | }
21 |
22 | func applicationWillResignActive(_ application: UIApplication) {
23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
25 | }
26 |
27 | func applicationDidEnterBackground(_ application: UIApplication) {
28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
30 | }
31 |
32 | func applicationWillEnterForeground(_ application: UIApplication) {
33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
34 | }
35 |
36 | func applicationDidBecomeActive(_ application: UIApplication) {
37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
38 | }
39 |
40 | func applicationWillTerminate(_ application: UIApplication) {
41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
42 | }
43 |
44 |
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/Example/AppBottomActionSheet/Base.lproj/LaunchScreen.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
25 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/Example/AppBottomActionSheet/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
--------------------------------------------------------------------------------
/Example/AppBottomActionSheet/DetailViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DetailViewController.swift
3 | // AppBottomActionSheet_Example
4 | //
5 | // Created by Karthik on 3/21/18.
6 | // Copyright © 2018 CocoaPods. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import AppBottomActionSheet
11 |
12 | extension UIView {
13 | func rounded(corners: UIRectCorner, radius: CGFloat) {
14 | let maskPath = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
15 | let maskLayer = CAShapeLayer()
16 | maskLayer.frame = self.bounds
17 | maskLayer.path = maskPath.cgPath
18 | self.layer.mask = maskLayer
19 | }
20 | }
21 |
22 | class DetailViewController: UIViewController, HalfSheetPresentableProtocol, HalfSheetTopVCProviderProtocol {
23 |
24 | @IBOutlet weak var containerview: UIView! {
25 | didSet {
26 | containerview.layer.cornerRadius = 14
27 | containerview.clipsToBounds = true
28 | }
29 | }
30 |
31 | var topVCTransitionStyle: HalfSheetTopVCTransitionStyle {
32 | return .slide
33 | }
34 |
35 | lazy var topVC: UIViewController = {
36 | DismissView.canShow = false
37 | return DismissBarViewController.instance()!
38 | }()
39 |
40 | var sheetHeight: CGFloat? = 400
41 |
42 | weak var managedScrollView: UIScrollView? {
43 | return nil
44 | }
45 |
46 | var dismissMethod: [DismissMethod] {
47 | return [.tap, .swipe]
48 | }
49 |
50 | @IBAction func dismiss() {
51 | dismiss(animated: true)
52 | }
53 | }
54 |
55 | extension DetailViewController: HalfSheetAppearanceProtocol {
56 |
57 | var presentAnimationDuration: TimeInterval {
58 | return 0.35
59 | }
60 |
61 | var dismissAnimationDuration: TimeInterval {
62 | return 0.25
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/Example/AppBottomActionSheet/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "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" : "ios-marketing",
45 | "size" : "1024x1024",
46 | "scale" : "1x"
47 | }
48 | ],
49 | "info" : {
50 | "version" : 1,
51 | "author" : "xcode"
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/Example/AppBottomActionSheet/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/Example/AppBottomActionSheet/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import AppBottomActionSheet
11 |
12 | class ViewController: UIViewController, HalfSheetPresentingProtocol, HalfSheetCompletionProtocol {
13 |
14 | var transitionManager: HalfSheetPresentationManager!
15 |
16 | override func viewDidLoad() {
17 | super.viewDidLoad()
18 | }
19 |
20 | override func didReceiveMemoryWarning() {
21 | super.didReceiveMemoryWarning()
22 | }
23 |
24 | @IBAction func btnAct(_ sender: Any) {
25 |
26 | let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "DetailViewController") as! DetailViewController
27 | presentUsingHalfSheet(vc)
28 | }
29 |
30 | func didDismiss() {
31 | print("dismiss called in view controller")
32 | }
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/Example/Podfile:
--------------------------------------------------------------------------------
1 | platform :ios, '10.0'
2 | use_frameworks!
3 |
4 | target 'AppBottomActionSheet_Example' do
5 | pod 'AppBottomActionSheet', :path => '../'
6 | end
7 |
--------------------------------------------------------------------------------
/Example/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - AppBottomActionSheet (1.0.8)
3 |
4 | DEPENDENCIES:
5 | - AppBottomActionSheet (from `../`)
6 |
7 | EXTERNAL SOURCES:
8 | AppBottomActionSheet:
9 | :path: "../"
10 |
11 | SPEC CHECKSUMS:
12 | AppBottomActionSheet: 99edb7ff7a41db6aad9765ef3787ce03e97c29f8
13 |
14 | PODFILE CHECKSUM: 52f9dfcf0fea921dacbdc38f55ecabcddae74b2e
15 |
16 | COCOAPODS: 1.9.1
17 |
--------------------------------------------------------------------------------
/Example/Pods/Local Podspecs/AppBottomActionSheet.podspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "AppBottomActionSheet",
3 | "version": "1.0.8",
4 | "swift_versions": "5.0",
5 | "summary": "A Sweet extension for custom bottom sheet",
6 | "homepage": "https://github.com/karthikAdaptavant/AppBottomActionSheet",
7 | "license": {
8 | "type": "MIT",
9 | "file": "LICENSE"
10 | },
11 | "authors": {
12 | "karthikAdaptavant": "karthik.samy@a-cti.com"
13 | },
14 | "source": {
15 | "git": "https://github.com/karthikAdaptavant/AppBottomActionSheet.git",
16 | "tag": "1.0.8"
17 | },
18 | "social_media_url": "https://twitter.com/i_am_kaarthik",
19 | "platforms": {
20 | "ios": "10.0"
21 | },
22 | "source_files": "Sources/AppBottomActionSheet/Classes/**/*.{swift}",
23 | "resource_bundles": {
24 | "AppBottomActionSheet": [
25 | "Sources/AppBottomActionSheet/Classes/**/*.{storyboard}"
26 | ]
27 | },
28 | "swift_version": "5.0"
29 | }
30 |
--------------------------------------------------------------------------------
/Example/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - AppBottomActionSheet (1.0.8)
3 |
4 | DEPENDENCIES:
5 | - AppBottomActionSheet (from `../`)
6 |
7 | EXTERNAL SOURCES:
8 | AppBottomActionSheet:
9 | :path: "../"
10 |
11 | SPEC CHECKSUMS:
12 | AppBottomActionSheet: 99edb7ff7a41db6aad9765ef3787ce03e97c29f8
13 |
14 | PODFILE CHECKSUM: 52f9dfcf0fea921dacbdc38f55ecabcddae74b2e
15 |
16 | COCOAPODS: 1.9.1
17 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 0584A0FE7D4A93241A9C12074E0C7B85 /* PresentationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8010EB52702AC52C5F34B73E57E145 /* PresentationManager.swift */; };
11 | 152DADB3A9D7362A466C1C1F93A5FB28 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A8E10D6C77C7820A081ACFF4D0AD94C /* Utilities.swift */; };
12 | 2CA12583F5589D912E23DBB334B69679 /* TransitionConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = E678BC21F5E47412B59AC0BFC4A29615 /* TransitionConfiguration.swift */; };
13 | 3B12CAFDC0C8A61540CEA357F12CF309 /* Pods-AppBottomActionSheet_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D98579A0E9FB33D6EF511A2588D5B731 /* Pods-AppBottomActionSheet_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
14 | 4A1288515FEB0504B7384218683F1322 /* DismissBar.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0A38DEFE46DCB5972025FAD6B5187CF9 /* DismissBar.storyboard */; };
15 | 4F39440273BC620966B51B8ED3700A63 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; };
16 | 5D774BFDF9DA632C6CBB5AB5364B3B0D /* Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 213B4A226D1778671643265EEC11D4BF /* Protocols.swift */; };
17 | 70D243EA357ACAB7DCC6F463684B8719 /* DismissalAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7892DD38E7405B26A9FECD2ADD48533 /* DismissalAnimator.swift */; };
18 | 716580781ACE6068A0F440F2C56CF2B7 /* PresentationProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D7ADB25CC2AA1AF1BA79EC5A0EA986C /* PresentationProtocol.swift */; };
19 | 7D1E084CCF1C5CC0AF11940D2304E19A /* AppBottomActionSheet.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E5CC7E124B8FD724E55C269D9EBBDD0C /* AppBottomActionSheet.bundle */; };
20 | 82389CCB8CF956EEA8116E60C74AEFB3 /* DismissBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BDB7ED6EDFB304E09AD697B750E3039 /* DismissBarViewController.swift */; };
21 | 8D5BCAFEC678D0F7CB8145028FEACB05 /* Pods-AppBottomActionSheet_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 65FDAE137823E70B58C31F8585CEF4D3 /* Pods-AppBottomActionSheet_Example-dummy.m */; };
22 | 8FA0E2FBF8D3BF07D846FF80121ADF76 /* AppBottomActionSheet-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 89CF14359882246899710B974498CF59 /* AppBottomActionSheet-dummy.m */; };
23 | AF85E07D1D2481C4FAA4F913E013083B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; };
24 | CCF4EE4BF10493CBD8A8DAAF78416822 /* PresentationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9FDF05F87169E044A2D35C2B12A4F21 /* PresentationViewController.swift */; };
25 | D247EC103522B951B817A9D541E46A1D /* AnimatorConvenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459F7CAD977D3D3AED893C67010AD479 /* AnimatorConvenience.swift */; };
26 | D41C81113F9C0B8B8763A14E0F4A9B6E /* PresentationAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68DDDFF7D05A35F33E2BA2CFEFB062E7 /* PresentationAnimator.swift */; };
27 | F7845B72734850006B116E4EEB134FB8 /* VerticalPanGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E626A4EF7D491F9207800C8E05BFC3FD /* VerticalPanGestureRecognizer.swift */; };
28 | FAAEBF6392718F227456DEC57625D7EB /* AppBottomActionSheet-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = ABB267EA8BF67D05A66CF1CEF9253091 /* AppBottomActionSheet-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
29 | /* End PBXBuildFile section */
30 |
31 | /* Begin PBXContainerItemProxy section */
32 | 6587ACADAE55C1842B002F2AF13F83BA /* PBXContainerItemProxy */ = {
33 | isa = PBXContainerItemProxy;
34 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
35 | proxyType = 1;
36 | remoteGlobalIDString = BFE90B680D6D1AFC19637A9B2D87C90B;
37 | remoteInfo = "AppBottomActionSheet-AppBottomActionSheet";
38 | };
39 | B522DB4D65E8F8017394D95BCEE44824 /* PBXContainerItemProxy */ = {
40 | isa = PBXContainerItemProxy;
41 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
42 | proxyType = 1;
43 | remoteGlobalIDString = A5A64AAC4F8896630674764FACC88497;
44 | remoteInfo = AppBottomActionSheet;
45 | };
46 | /* End PBXContainerItemProxy section */
47 |
48 | /* Begin PBXFileReference section */
49 | 0A38DEFE46DCB5972025FAD6B5187CF9 /* DismissBar.storyboard */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.storyboard; name = DismissBar.storyboard; path = Sources/AppBottomActionSheet/Classes/DismissBar.storyboard; sourceTree = ""; };
50 | 0D7ADB25CC2AA1AF1BA79EC5A0EA986C /* PresentationProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PresentationProtocol.swift; path = Sources/AppBottomActionSheet/Classes/PresentationProtocol.swift; sourceTree = ""; };
51 | 213B4A226D1778671643265EEC11D4BF /* Protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protocols.swift; path = Sources/AppBottomActionSheet/Classes/Protocols.swift; sourceTree = ""; };
52 | 28B43BF92BA80E8A71EBCF81894E425C /* Pods-AppBottomActionSheet_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AppBottomActionSheet_Example-acknowledgements.plist"; sourceTree = ""; };
53 | 2EEB11473BFD2E9B3D79DC76FF5145FC /* Pods-AppBottomActionSheet_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AppBottomActionSheet_Example-acknowledgements.markdown"; sourceTree = ""; };
54 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
55 | 3ABDC143059F5213410C510595A545C5 /* Pods-AppBottomActionSheet_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AppBottomActionSheet_Example-Info.plist"; sourceTree = ""; };
56 | 41DDD5E48EA2F17A5D644A4BCF07B284 /* Pods-AppBottomActionSheet_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AppBottomActionSheet_Example.release.xcconfig"; sourceTree = ""; };
57 | 459F7CAD977D3D3AED893C67010AD479 /* AnimatorConvenience.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatorConvenience.swift; path = Sources/AppBottomActionSheet/Classes/AnimatorConvenience.swift; sourceTree = ""; };
58 | 4C8010EB52702AC52C5F34B73E57E145 /* PresentationManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PresentationManager.swift; path = Sources/AppBottomActionSheet/Classes/PresentationManager.swift; sourceTree = ""; };
59 | 5E6963D436C4404F355EC8F8920AD254 /* AppBottomActionSheet-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AppBottomActionSheet-prefix.pch"; sourceTree = ""; };
60 | 65FDAE137823E70B58C31F8585CEF4D3 /* Pods-AppBottomActionSheet_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AppBottomActionSheet_Example-dummy.m"; sourceTree = ""; };
61 | 6729B70860CD1835D88EBFE8E13884E7 /* Pods_AppBottomActionSheet_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AppBottomActionSheet_Example.framework; path = "Pods-AppBottomActionSheet_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
62 | 68DDDFF7D05A35F33E2BA2CFEFB062E7 /* PresentationAnimator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PresentationAnimator.swift; path = Sources/AppBottomActionSheet/Classes/PresentationAnimator.swift; sourceTree = ""; };
63 | 6A8E10D6C77C7820A081ACFF4D0AD94C /* Utilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utilities.swift; path = Sources/AppBottomActionSheet/Classes/Utilities.swift; sourceTree = ""; };
64 | 89CF14359882246899710B974498CF59 /* AppBottomActionSheet-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AppBottomActionSheet-dummy.m"; sourceTree = ""; };
65 | 9B27F36555AEB5450D4D756D5BC1A532 /* AppBottomActionSheet.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AppBottomActionSheet.modulemap; sourceTree = ""; };
66 | 9BDB7ED6EDFB304E09AD697B750E3039 /* DismissBarViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DismissBarViewController.swift; path = Sources/AppBottomActionSheet/Classes/DismissBarViewController.swift; sourceTree = ""; };
67 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
68 | A4E078D81D40ABA4CBF5D8B5E4BFD093 /* Pods-AppBottomActionSheet_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AppBottomActionSheet_Example.debug.xcconfig"; sourceTree = ""; };
69 | ABB267EA8BF67D05A66CF1CEF9253091 /* AppBottomActionSheet-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AppBottomActionSheet-umbrella.h"; sourceTree = ""; };
70 | B621599588A8AC13BAC986BB584789EB /* Pods-AppBottomActionSheet_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AppBottomActionSheet_Example-frameworks.sh"; sourceTree = ""; };
71 | B7892DD38E7405B26A9FECD2ADD48533 /* DismissalAnimator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DismissalAnimator.swift; path = Sources/AppBottomActionSheet/Classes/DismissalAnimator.swift; sourceTree = ""; };
72 | B8ED54234CEEA419DAFB855EDC5671BF /* Pods-AppBottomActionSheet_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AppBottomActionSheet_Example.modulemap"; sourceTree = ""; };
73 | BB08878530F11338F6EFA6459D4D2E6B /* AppBottomActionSheet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AppBottomActionSheet.framework; path = AppBottomActionSheet.framework; sourceTree = BUILT_PRODUCTS_DIR; };
74 | BB718D0AAF94CA64BF622A8E40D2F560 /* AppBottomActionSheet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppBottomActionSheet.release.xcconfig; sourceTree = ""; };
75 | C3D9178932055B06720545B735317562 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; };
76 | C94D658CBC2F94B377A1932CEFB8E1DC /* ResourceBundle-AppBottomActionSheet-AppBottomActionSheet-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-AppBottomActionSheet-AppBottomActionSheet-Info.plist"; sourceTree = ""; };
77 | C9FDF05F87169E044A2D35C2B12A4F21 /* PresentationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PresentationViewController.swift; path = Sources/AppBottomActionSheet/Classes/PresentationViewController.swift; sourceTree = ""; };
78 | CA9396CCC583915F90C48FE677967344 /* AppBottomActionSheet.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = AppBottomActionSheet.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
79 | D98579A0E9FB33D6EF511A2588D5B731 /* Pods-AppBottomActionSheet_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AppBottomActionSheet_Example-umbrella.h"; sourceTree = ""; };
80 | DD93F9FBDD76757149FC3A53148CE90F /* AppBottomActionSheet-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AppBottomActionSheet-Info.plist"; sourceTree = ""; };
81 | E5CC7E124B8FD724E55C269D9EBBDD0C /* AppBottomActionSheet.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = AppBottomActionSheet.bundle; path = "AppBottomActionSheet-AppBottomActionSheet.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
82 | E626A4EF7D491F9207800C8E05BFC3FD /* VerticalPanGestureRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VerticalPanGestureRecognizer.swift; path = Sources/AppBottomActionSheet/Classes/VerticalPanGestureRecognizer.swift; sourceTree = ""; };
83 | E678BC21F5E47412B59AC0BFC4A29615 /* TransitionConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransitionConfiguration.swift; path = Sources/AppBottomActionSheet/Classes/TransitionConfiguration.swift; sourceTree = ""; };
84 | F7942C5BD65101C47B91DEF017DFA70A /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; };
85 | FF6D90F0F4F658A4850F798F728E2E34 /* AppBottomActionSheet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppBottomActionSheet.debug.xcconfig; sourceTree = ""; };
86 | /* End PBXFileReference section */
87 |
88 | /* Begin PBXFrameworksBuildPhase section */
89 | 1FDA14E82548A7EE7CF149F744616BCB /* Frameworks */ = {
90 | isa = PBXFrameworksBuildPhase;
91 | buildActionMask = 2147483647;
92 | files = (
93 | 4F39440273BC620966B51B8ED3700A63 /* Foundation.framework in Frameworks */,
94 | );
95 | runOnlyForDeploymentPostprocessing = 0;
96 | };
97 | CB9D5FEF3CC1AF17B4711A4B9C62C803 /* Frameworks */ = {
98 | isa = PBXFrameworksBuildPhase;
99 | buildActionMask = 2147483647;
100 | files = (
101 | );
102 | runOnlyForDeploymentPostprocessing = 0;
103 | };
104 | FFC16F76467C4C68DCDED28711234AAF /* Frameworks */ = {
105 | isa = PBXFrameworksBuildPhase;
106 | buildActionMask = 2147483647;
107 | files = (
108 | AF85E07D1D2481C4FAA4F913E013083B /* Foundation.framework in Frameworks */,
109 | );
110 | runOnlyForDeploymentPostprocessing = 0;
111 | };
112 | /* End PBXFrameworksBuildPhase section */
113 |
114 | /* Begin PBXGroup section */
115 | 394A428A548BD4A4C194A3B571EC5031 /* Support Files */ = {
116 | isa = PBXGroup;
117 | children = (
118 | 9B27F36555AEB5450D4D756D5BC1A532 /* AppBottomActionSheet.modulemap */,
119 | 89CF14359882246899710B974498CF59 /* AppBottomActionSheet-dummy.m */,
120 | DD93F9FBDD76757149FC3A53148CE90F /* AppBottomActionSheet-Info.plist */,
121 | 5E6963D436C4404F355EC8F8920AD254 /* AppBottomActionSheet-prefix.pch */,
122 | ABB267EA8BF67D05A66CF1CEF9253091 /* AppBottomActionSheet-umbrella.h */,
123 | FF6D90F0F4F658A4850F798F728E2E34 /* AppBottomActionSheet.debug.xcconfig */,
124 | BB718D0AAF94CA64BF622A8E40D2F560 /* AppBottomActionSheet.release.xcconfig */,
125 | C94D658CBC2F94B377A1932CEFB8E1DC /* ResourceBundle-AppBottomActionSheet-AppBottomActionSheet-Info.plist */,
126 | );
127 | name = "Support Files";
128 | path = "Example/Pods/Target Support Files/AppBottomActionSheet";
129 | sourceTree = "";
130 | };
131 | 4533761CCC5599B222C4FCDBDB0FAE70 /* Products */ = {
132 | isa = PBXGroup;
133 | children = (
134 | E5CC7E124B8FD724E55C269D9EBBDD0C /* AppBottomActionSheet.bundle */,
135 | BB08878530F11338F6EFA6459D4D2E6B /* AppBottomActionSheet.framework */,
136 | 6729B70860CD1835D88EBFE8E13884E7 /* Pods_AppBottomActionSheet_Example.framework */,
137 | );
138 | name = Products;
139 | sourceTree = "";
140 | };
141 | 816F9E2B5A23F9FE1FAC90F84E429E45 /* Pods-AppBottomActionSheet_Example */ = {
142 | isa = PBXGroup;
143 | children = (
144 | B8ED54234CEEA419DAFB855EDC5671BF /* Pods-AppBottomActionSheet_Example.modulemap */,
145 | 2EEB11473BFD2E9B3D79DC76FF5145FC /* Pods-AppBottomActionSheet_Example-acknowledgements.markdown */,
146 | 28B43BF92BA80E8A71EBCF81894E425C /* Pods-AppBottomActionSheet_Example-acknowledgements.plist */,
147 | 65FDAE137823E70B58C31F8585CEF4D3 /* Pods-AppBottomActionSheet_Example-dummy.m */,
148 | B621599588A8AC13BAC986BB584789EB /* Pods-AppBottomActionSheet_Example-frameworks.sh */,
149 | 3ABDC143059F5213410C510595A545C5 /* Pods-AppBottomActionSheet_Example-Info.plist */,
150 | D98579A0E9FB33D6EF511A2588D5B731 /* Pods-AppBottomActionSheet_Example-umbrella.h */,
151 | A4E078D81D40ABA4CBF5D8B5E4BFD093 /* Pods-AppBottomActionSheet_Example.debug.xcconfig */,
152 | 41DDD5E48EA2F17A5D644A4BCF07B284 /* Pods-AppBottomActionSheet_Example.release.xcconfig */,
153 | );
154 | name = "Pods-AppBottomActionSheet_Example";
155 | path = "Target Support Files/Pods-AppBottomActionSheet_Example";
156 | sourceTree = "";
157 | };
158 | 8E8CE397C03BAD8F3E00C5B49C122470 /* Resources */ = {
159 | isa = PBXGroup;
160 | children = (
161 | 0A38DEFE46DCB5972025FAD6B5187CF9 /* DismissBar.storyboard */,
162 | );
163 | name = Resources;
164 | sourceTree = "";
165 | };
166 | BDAD424B087D16C1BE30B41BED39A446 /* AppBottomActionSheet */ = {
167 | isa = PBXGroup;
168 | children = (
169 | 459F7CAD977D3D3AED893C67010AD479 /* AnimatorConvenience.swift */,
170 | B7892DD38E7405B26A9FECD2ADD48533 /* DismissalAnimator.swift */,
171 | 9BDB7ED6EDFB304E09AD697B750E3039 /* DismissBarViewController.swift */,
172 | 68DDDFF7D05A35F33E2BA2CFEFB062E7 /* PresentationAnimator.swift */,
173 | 4C8010EB52702AC52C5F34B73E57E145 /* PresentationManager.swift */,
174 | 0D7ADB25CC2AA1AF1BA79EC5A0EA986C /* PresentationProtocol.swift */,
175 | C9FDF05F87169E044A2D35C2B12A4F21 /* PresentationViewController.swift */,
176 | 213B4A226D1778671643265EEC11D4BF /* Protocols.swift */,
177 | E678BC21F5E47412B59AC0BFC4A29615 /* TransitionConfiguration.swift */,
178 | 6A8E10D6C77C7820A081ACFF4D0AD94C /* Utilities.swift */,
179 | E626A4EF7D491F9207800C8E05BFC3FD /* VerticalPanGestureRecognizer.swift */,
180 | D6FC633A9026A80F17CD370C908848F1 /* Pod */,
181 | 8E8CE397C03BAD8F3E00C5B49C122470 /* Resources */,
182 | 394A428A548BD4A4C194A3B571EC5031 /* Support Files */,
183 | );
184 | name = AppBottomActionSheet;
185 | path = ../..;
186 | sourceTree = "";
187 | };
188 | C0834CEBB1379A84116EF29F93051C60 /* iOS */ = {
189 | isa = PBXGroup;
190 | children = (
191 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */,
192 | );
193 | name = iOS;
194 | sourceTree = "";
195 | };
196 | CCE5741203750E1DB441A1D211C3904F /* Targets Support Files */ = {
197 | isa = PBXGroup;
198 | children = (
199 | 816F9E2B5A23F9FE1FAC90F84E429E45 /* Pods-AppBottomActionSheet_Example */,
200 | );
201 | name = "Targets Support Files";
202 | sourceTree = "";
203 | };
204 | CF1408CF629C7361332E53B88F7BD30C = {
205 | isa = PBXGroup;
206 | children = (
207 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
208 | F048416A71EC3A82DB1B4E2CB7A77577 /* Development Pods */,
209 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */,
210 | 4533761CCC5599B222C4FCDBDB0FAE70 /* Products */,
211 | CCE5741203750E1DB441A1D211C3904F /* Targets Support Files */,
212 | );
213 | sourceTree = "";
214 | };
215 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = {
216 | isa = PBXGroup;
217 | children = (
218 | C0834CEBB1379A84116EF29F93051C60 /* iOS */,
219 | );
220 | name = Frameworks;
221 | sourceTree = "";
222 | };
223 | D6FC633A9026A80F17CD370C908848F1 /* Pod */ = {
224 | isa = PBXGroup;
225 | children = (
226 | CA9396CCC583915F90C48FE677967344 /* AppBottomActionSheet.podspec */,
227 | C3D9178932055B06720545B735317562 /* LICENSE */,
228 | F7942C5BD65101C47B91DEF017DFA70A /* README.md */,
229 | );
230 | name = Pod;
231 | sourceTree = "";
232 | };
233 | F048416A71EC3A82DB1B4E2CB7A77577 /* Development Pods */ = {
234 | isa = PBXGroup;
235 | children = (
236 | BDAD424B087D16C1BE30B41BED39A446 /* AppBottomActionSheet */,
237 | );
238 | name = "Development Pods";
239 | sourceTree = "";
240 | };
241 | /* End PBXGroup section */
242 |
243 | /* Begin PBXHeadersBuildPhase section */
244 | A52105A0680F0745EF4A26101C25F309 /* Headers */ = {
245 | isa = PBXHeadersBuildPhase;
246 | buildActionMask = 2147483647;
247 | files = (
248 | FAAEBF6392718F227456DEC57625D7EB /* AppBottomActionSheet-umbrella.h in Headers */,
249 | );
250 | runOnlyForDeploymentPostprocessing = 0;
251 | };
252 | F195D529C6115606115A972BA98D77C7 /* Headers */ = {
253 | isa = PBXHeadersBuildPhase;
254 | buildActionMask = 2147483647;
255 | files = (
256 | 3B12CAFDC0C8A61540CEA357F12CF309 /* Pods-AppBottomActionSheet_Example-umbrella.h in Headers */,
257 | );
258 | runOnlyForDeploymentPostprocessing = 0;
259 | };
260 | /* End PBXHeadersBuildPhase section */
261 |
262 | /* Begin PBXNativeTarget section */
263 | 58AE347583BFBDD710BCD6F274B01B40 /* Pods-AppBottomActionSheet_Example */ = {
264 | isa = PBXNativeTarget;
265 | buildConfigurationList = 7DB39C706323DFE540AD66DA6012FF4C /* Build configuration list for PBXNativeTarget "Pods-AppBottomActionSheet_Example" */;
266 | buildPhases = (
267 | F195D529C6115606115A972BA98D77C7 /* Headers */,
268 | 7AA32EC7B3BACF049768C452060D5D5A /* Sources */,
269 | 1FDA14E82548A7EE7CF149F744616BCB /* Frameworks */,
270 | F904C3047EA0B5540D5A0A2F7B24D4B2 /* Resources */,
271 | );
272 | buildRules = (
273 | );
274 | dependencies = (
275 | B1BE1CF229D4FD897F4DB6E581C76FBE /* PBXTargetDependency */,
276 | );
277 | name = "Pods-AppBottomActionSheet_Example";
278 | productName = "Pods-AppBottomActionSheet_Example";
279 | productReference = 6729B70860CD1835D88EBFE8E13884E7 /* Pods_AppBottomActionSheet_Example.framework */;
280 | productType = "com.apple.product-type.framework";
281 | };
282 | A5A64AAC4F8896630674764FACC88497 /* AppBottomActionSheet */ = {
283 | isa = PBXNativeTarget;
284 | buildConfigurationList = B8DB443EBC02682F85920A8604E4DFF4 /* Build configuration list for PBXNativeTarget "AppBottomActionSheet" */;
285 | buildPhases = (
286 | A52105A0680F0745EF4A26101C25F309 /* Headers */,
287 | 4CB542892D31A4F88556E0563754E758 /* Sources */,
288 | FFC16F76467C4C68DCDED28711234AAF /* Frameworks */,
289 | B0A025575CF1C470BD509DCF5144CD0A /* Resources */,
290 | );
291 | buildRules = (
292 | );
293 | dependencies = (
294 | F4ED227CEA3731510BE449AC49BC9CE2 /* PBXTargetDependency */,
295 | );
296 | name = AppBottomActionSheet;
297 | productName = AppBottomActionSheet;
298 | productReference = BB08878530F11338F6EFA6459D4D2E6B /* AppBottomActionSheet.framework */;
299 | productType = "com.apple.product-type.framework";
300 | };
301 | BFE90B680D6D1AFC19637A9B2D87C90B /* AppBottomActionSheet-AppBottomActionSheet */ = {
302 | isa = PBXNativeTarget;
303 | buildConfigurationList = B16E1C4ECD3D7AD917038A383772E085 /* Build configuration list for PBXNativeTarget "AppBottomActionSheet-AppBottomActionSheet" */;
304 | buildPhases = (
305 | 47106646DF80E8DD776525BD31CC9C74 /* Sources */,
306 | CB9D5FEF3CC1AF17B4711A4B9C62C803 /* Frameworks */,
307 | 2DA96FAC8237CBA7CCC92D3A10CE0B66 /* Resources */,
308 | );
309 | buildRules = (
310 | );
311 | dependencies = (
312 | );
313 | name = "AppBottomActionSheet-AppBottomActionSheet";
314 | productName = "AppBottomActionSheet-AppBottomActionSheet";
315 | productReference = E5CC7E124B8FD724E55C269D9EBBDD0C /* AppBottomActionSheet.bundle */;
316 | productType = "com.apple.product-type.bundle";
317 | };
318 | /* End PBXNativeTarget section */
319 |
320 | /* Begin PBXProject section */
321 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = {
322 | isa = PBXProject;
323 | attributes = {
324 | LastSwiftUpdateCheck = 1100;
325 | LastUpgradeCheck = 1100;
326 | };
327 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */;
328 | compatibilityVersion = "Xcode 3.2";
329 | developmentRegion = en;
330 | hasScannedForEncodings = 0;
331 | knownRegions = (
332 | en,
333 | Base,
334 | );
335 | mainGroup = CF1408CF629C7361332E53B88F7BD30C;
336 | productRefGroup = 4533761CCC5599B222C4FCDBDB0FAE70 /* Products */;
337 | projectDirPath = "";
338 | projectRoot = "";
339 | targets = (
340 | A5A64AAC4F8896630674764FACC88497 /* AppBottomActionSheet */,
341 | BFE90B680D6D1AFC19637A9B2D87C90B /* AppBottomActionSheet-AppBottomActionSheet */,
342 | 58AE347583BFBDD710BCD6F274B01B40 /* Pods-AppBottomActionSheet_Example */,
343 | );
344 | };
345 | /* End PBXProject section */
346 |
347 | /* Begin PBXResourcesBuildPhase section */
348 | 2DA96FAC8237CBA7CCC92D3A10CE0B66 /* Resources */ = {
349 | isa = PBXResourcesBuildPhase;
350 | buildActionMask = 2147483647;
351 | files = (
352 | 4A1288515FEB0504B7384218683F1322 /* DismissBar.storyboard in Resources */,
353 | );
354 | runOnlyForDeploymentPostprocessing = 0;
355 | };
356 | B0A025575CF1C470BD509DCF5144CD0A /* Resources */ = {
357 | isa = PBXResourcesBuildPhase;
358 | buildActionMask = 2147483647;
359 | files = (
360 | 7D1E084CCF1C5CC0AF11940D2304E19A /* AppBottomActionSheet.bundle in Resources */,
361 | );
362 | runOnlyForDeploymentPostprocessing = 0;
363 | };
364 | F904C3047EA0B5540D5A0A2F7B24D4B2 /* Resources */ = {
365 | isa = PBXResourcesBuildPhase;
366 | buildActionMask = 2147483647;
367 | files = (
368 | );
369 | runOnlyForDeploymentPostprocessing = 0;
370 | };
371 | /* End PBXResourcesBuildPhase section */
372 |
373 | /* Begin PBXSourcesBuildPhase section */
374 | 47106646DF80E8DD776525BD31CC9C74 /* Sources */ = {
375 | isa = PBXSourcesBuildPhase;
376 | buildActionMask = 2147483647;
377 | files = (
378 | );
379 | runOnlyForDeploymentPostprocessing = 0;
380 | };
381 | 4CB542892D31A4F88556E0563754E758 /* Sources */ = {
382 | isa = PBXSourcesBuildPhase;
383 | buildActionMask = 2147483647;
384 | files = (
385 | D247EC103522B951B817A9D541E46A1D /* AnimatorConvenience.swift in Sources */,
386 | 8FA0E2FBF8D3BF07D846FF80121ADF76 /* AppBottomActionSheet-dummy.m in Sources */,
387 | 70D243EA357ACAB7DCC6F463684B8719 /* DismissalAnimator.swift in Sources */,
388 | 82389CCB8CF956EEA8116E60C74AEFB3 /* DismissBarViewController.swift in Sources */,
389 | D41C81113F9C0B8B8763A14E0F4A9B6E /* PresentationAnimator.swift in Sources */,
390 | 0584A0FE7D4A93241A9C12074E0C7B85 /* PresentationManager.swift in Sources */,
391 | 716580781ACE6068A0F440F2C56CF2B7 /* PresentationProtocol.swift in Sources */,
392 | CCF4EE4BF10493CBD8A8DAAF78416822 /* PresentationViewController.swift in Sources */,
393 | 5D774BFDF9DA632C6CBB5AB5364B3B0D /* Protocols.swift in Sources */,
394 | 2CA12583F5589D912E23DBB334B69679 /* TransitionConfiguration.swift in Sources */,
395 | 152DADB3A9D7362A466C1C1F93A5FB28 /* Utilities.swift in Sources */,
396 | F7845B72734850006B116E4EEB134FB8 /* VerticalPanGestureRecognizer.swift in Sources */,
397 | );
398 | runOnlyForDeploymentPostprocessing = 0;
399 | };
400 | 7AA32EC7B3BACF049768C452060D5D5A /* Sources */ = {
401 | isa = PBXSourcesBuildPhase;
402 | buildActionMask = 2147483647;
403 | files = (
404 | 8D5BCAFEC678D0F7CB8145028FEACB05 /* Pods-AppBottomActionSheet_Example-dummy.m in Sources */,
405 | );
406 | runOnlyForDeploymentPostprocessing = 0;
407 | };
408 | /* End PBXSourcesBuildPhase section */
409 |
410 | /* Begin PBXTargetDependency section */
411 | B1BE1CF229D4FD897F4DB6E581C76FBE /* PBXTargetDependency */ = {
412 | isa = PBXTargetDependency;
413 | name = AppBottomActionSheet;
414 | target = A5A64AAC4F8896630674764FACC88497 /* AppBottomActionSheet */;
415 | targetProxy = B522DB4D65E8F8017394D95BCEE44824 /* PBXContainerItemProxy */;
416 | };
417 | F4ED227CEA3731510BE449AC49BC9CE2 /* PBXTargetDependency */ = {
418 | isa = PBXTargetDependency;
419 | name = "AppBottomActionSheet-AppBottomActionSheet";
420 | target = BFE90B680D6D1AFC19637A9B2D87C90B /* AppBottomActionSheet-AppBottomActionSheet */;
421 | targetProxy = 6587ACADAE55C1842B002F2AF13F83BA /* PBXContainerItemProxy */;
422 | };
423 | /* End PBXTargetDependency section */
424 |
425 | /* Begin XCBuildConfiguration section */
426 | 196DFA3E4A09A28224918543529A1885 /* Debug */ = {
427 | isa = XCBuildConfiguration;
428 | buildSettings = {
429 | ALWAYS_SEARCH_USER_PATHS = NO;
430 | CLANG_ANALYZER_NONNULL = YES;
431 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
432 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
433 | CLANG_CXX_LIBRARY = "libc++";
434 | CLANG_ENABLE_MODULES = YES;
435 | CLANG_ENABLE_OBJC_ARC = YES;
436 | CLANG_ENABLE_OBJC_WEAK = YES;
437 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
438 | CLANG_WARN_BOOL_CONVERSION = YES;
439 | CLANG_WARN_COMMA = YES;
440 | CLANG_WARN_CONSTANT_CONVERSION = YES;
441 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
442 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
443 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
444 | CLANG_WARN_EMPTY_BODY = YES;
445 | CLANG_WARN_ENUM_CONVERSION = YES;
446 | CLANG_WARN_INFINITE_RECURSION = YES;
447 | CLANG_WARN_INT_CONVERSION = YES;
448 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
449 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
450 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
451 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
452 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
453 | CLANG_WARN_STRICT_PROTOTYPES = YES;
454 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
455 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
456 | CLANG_WARN_UNREACHABLE_CODE = YES;
457 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
458 | COPY_PHASE_STRIP = NO;
459 | DEBUG_INFORMATION_FORMAT = dwarf;
460 | ENABLE_STRICT_OBJC_MSGSEND = YES;
461 | ENABLE_TESTABILITY = YES;
462 | GCC_C_LANGUAGE_STANDARD = gnu11;
463 | GCC_DYNAMIC_NO_PIC = NO;
464 | GCC_NO_COMMON_BLOCKS = YES;
465 | GCC_OPTIMIZATION_LEVEL = 0;
466 | GCC_PREPROCESSOR_DEFINITIONS = (
467 | "POD_CONFIGURATION_DEBUG=1",
468 | "DEBUG=1",
469 | "$(inherited)",
470 | );
471 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
472 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
473 | GCC_WARN_UNDECLARED_SELECTOR = YES;
474 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
475 | GCC_WARN_UNUSED_FUNCTION = YES;
476 | GCC_WARN_UNUSED_VARIABLE = YES;
477 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
478 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
479 | MTL_FAST_MATH = YES;
480 | ONLY_ACTIVE_ARCH = YES;
481 | PRODUCT_NAME = "$(TARGET_NAME)";
482 | STRIP_INSTALLED_PRODUCT = NO;
483 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
484 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
485 | SWIFT_VERSION = 5.0;
486 | SYMROOT = "${SRCROOT}/../build";
487 | };
488 | name = Debug;
489 | };
490 | 211E07F7D102E18D88F0B77D15B4033A /* Debug */ = {
491 | isa = XCBuildConfiguration;
492 | baseConfigurationReference = FF6D90F0F4F658A4850F798F728E2E34 /* AppBottomActionSheet.debug.xcconfig */;
493 | buildSettings = {
494 | CLANG_ENABLE_OBJC_WEAK = NO;
495 | CODE_SIGN_IDENTITY = "";
496 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
497 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
498 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
499 | CURRENT_PROJECT_VERSION = 1;
500 | DEFINES_MODULE = YES;
501 | DYLIB_COMPATIBILITY_VERSION = 1;
502 | DYLIB_CURRENT_VERSION = 1;
503 | DYLIB_INSTALL_NAME_BASE = "@rpath";
504 | GCC_PREFIX_HEADER = "Target Support Files/AppBottomActionSheet/AppBottomActionSheet-prefix.pch";
505 | INFOPLIST_FILE = "Target Support Files/AppBottomActionSheet/AppBottomActionSheet-Info.plist";
506 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
507 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
508 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
509 | MODULEMAP_FILE = "Target Support Files/AppBottomActionSheet/AppBottomActionSheet.modulemap";
510 | PRODUCT_MODULE_NAME = AppBottomActionSheet;
511 | PRODUCT_NAME = AppBottomActionSheet;
512 | SDKROOT = iphoneos;
513 | SKIP_INSTALL = YES;
514 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
515 | SWIFT_VERSION = 5.0;
516 | TARGETED_DEVICE_FAMILY = "1,2";
517 | VERSIONING_SYSTEM = "apple-generic";
518 | VERSION_INFO_PREFIX = "";
519 | };
520 | name = Debug;
521 | };
522 | 4959D67A5E4E9405EC18CB9932C79D6C /* Release */ = {
523 | isa = XCBuildConfiguration;
524 | baseConfigurationReference = BB718D0AAF94CA64BF622A8E40D2F560 /* AppBottomActionSheet.release.xcconfig */;
525 | buildSettings = {
526 | CODE_SIGN_IDENTITY = "iPhone Developer";
527 | CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/AppBottomActionSheet";
528 | IBSC_MODULE = AppBottomActionSheet;
529 | INFOPLIST_FILE = "Target Support Files/AppBottomActionSheet/ResourceBundle-AppBottomActionSheet-AppBottomActionSheet-Info.plist";
530 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
531 | PRODUCT_NAME = AppBottomActionSheet;
532 | SDKROOT = iphoneos;
533 | SKIP_INSTALL = YES;
534 | TARGETED_DEVICE_FAMILY = "1,2";
535 | WRAPPER_EXTENSION = bundle;
536 | };
537 | name = Release;
538 | };
539 | 5408039C918B21447A18E283C023F37E /* Release */ = {
540 | isa = XCBuildConfiguration;
541 | baseConfigurationReference = 41DDD5E48EA2F17A5D644A4BCF07B284 /* Pods-AppBottomActionSheet_Example.release.xcconfig */;
542 | buildSettings = {
543 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
544 | CLANG_ENABLE_OBJC_WEAK = NO;
545 | CODE_SIGN_IDENTITY = "";
546 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
547 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
548 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
549 | CURRENT_PROJECT_VERSION = 1;
550 | DEFINES_MODULE = YES;
551 | DYLIB_COMPATIBILITY_VERSION = 1;
552 | DYLIB_CURRENT_VERSION = 1;
553 | DYLIB_INSTALL_NAME_BASE = "@rpath";
554 | INFOPLIST_FILE = "Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example-Info.plist";
555 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
556 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
557 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
558 | MACH_O_TYPE = staticlib;
559 | MODULEMAP_FILE = "Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example.modulemap";
560 | OTHER_LDFLAGS = "";
561 | OTHER_LIBTOOLFLAGS = "";
562 | PODS_ROOT = "$(SRCROOT)";
563 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
564 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
565 | SDKROOT = iphoneos;
566 | SKIP_INSTALL = YES;
567 | TARGETED_DEVICE_FAMILY = "1,2";
568 | VALIDATE_PRODUCT = YES;
569 | VERSIONING_SYSTEM = "apple-generic";
570 | VERSION_INFO_PREFIX = "";
571 | };
572 | name = Release;
573 | };
574 | B01D14FDC83DCF9D4BE53066BEA96D05 /* Release */ = {
575 | isa = XCBuildConfiguration;
576 | buildSettings = {
577 | ALWAYS_SEARCH_USER_PATHS = NO;
578 | CLANG_ANALYZER_NONNULL = YES;
579 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
580 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
581 | CLANG_CXX_LIBRARY = "libc++";
582 | CLANG_ENABLE_MODULES = YES;
583 | CLANG_ENABLE_OBJC_ARC = YES;
584 | CLANG_ENABLE_OBJC_WEAK = YES;
585 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
586 | CLANG_WARN_BOOL_CONVERSION = YES;
587 | CLANG_WARN_COMMA = YES;
588 | CLANG_WARN_CONSTANT_CONVERSION = YES;
589 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
590 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
591 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
592 | CLANG_WARN_EMPTY_BODY = YES;
593 | CLANG_WARN_ENUM_CONVERSION = YES;
594 | CLANG_WARN_INFINITE_RECURSION = YES;
595 | CLANG_WARN_INT_CONVERSION = YES;
596 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
597 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
598 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
599 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
600 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
601 | CLANG_WARN_STRICT_PROTOTYPES = YES;
602 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
603 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
604 | CLANG_WARN_UNREACHABLE_CODE = YES;
605 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
606 | COPY_PHASE_STRIP = NO;
607 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
608 | ENABLE_NS_ASSERTIONS = NO;
609 | ENABLE_STRICT_OBJC_MSGSEND = YES;
610 | GCC_C_LANGUAGE_STANDARD = gnu11;
611 | GCC_NO_COMMON_BLOCKS = YES;
612 | GCC_PREPROCESSOR_DEFINITIONS = (
613 | "POD_CONFIGURATION_RELEASE=1",
614 | "$(inherited)",
615 | );
616 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
617 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
618 | GCC_WARN_UNDECLARED_SELECTOR = YES;
619 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
620 | GCC_WARN_UNUSED_FUNCTION = YES;
621 | GCC_WARN_UNUSED_VARIABLE = YES;
622 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
623 | MTL_ENABLE_DEBUG_INFO = NO;
624 | MTL_FAST_MATH = YES;
625 | PRODUCT_NAME = "$(TARGET_NAME)";
626 | STRIP_INSTALLED_PRODUCT = NO;
627 | SWIFT_COMPILATION_MODE = wholemodule;
628 | SWIFT_OPTIMIZATION_LEVEL = "-O";
629 | SWIFT_VERSION = 5.0;
630 | SYMROOT = "${SRCROOT}/../build";
631 | };
632 | name = Release;
633 | };
634 | C4256DBAFCEB10A953F7F6CCDE47CF2E /* Debug */ = {
635 | isa = XCBuildConfiguration;
636 | baseConfigurationReference = FF6D90F0F4F658A4850F798F728E2E34 /* AppBottomActionSheet.debug.xcconfig */;
637 | buildSettings = {
638 | CODE_SIGN_IDENTITY = "iPhone Developer";
639 | CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/AppBottomActionSheet";
640 | IBSC_MODULE = AppBottomActionSheet;
641 | INFOPLIST_FILE = "Target Support Files/AppBottomActionSheet/ResourceBundle-AppBottomActionSheet-AppBottomActionSheet-Info.plist";
642 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
643 | PRODUCT_NAME = AppBottomActionSheet;
644 | SDKROOT = iphoneos;
645 | SKIP_INSTALL = YES;
646 | TARGETED_DEVICE_FAMILY = "1,2";
647 | WRAPPER_EXTENSION = bundle;
648 | };
649 | name = Debug;
650 | };
651 | E82E9B4BBC7F8A625743447AE70E6AF4 /* Release */ = {
652 | isa = XCBuildConfiguration;
653 | baseConfigurationReference = BB718D0AAF94CA64BF622A8E40D2F560 /* AppBottomActionSheet.release.xcconfig */;
654 | buildSettings = {
655 | CLANG_ENABLE_OBJC_WEAK = NO;
656 | CODE_SIGN_IDENTITY = "";
657 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
658 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
659 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
660 | CURRENT_PROJECT_VERSION = 1;
661 | DEFINES_MODULE = YES;
662 | DYLIB_COMPATIBILITY_VERSION = 1;
663 | DYLIB_CURRENT_VERSION = 1;
664 | DYLIB_INSTALL_NAME_BASE = "@rpath";
665 | GCC_PREFIX_HEADER = "Target Support Files/AppBottomActionSheet/AppBottomActionSheet-prefix.pch";
666 | INFOPLIST_FILE = "Target Support Files/AppBottomActionSheet/AppBottomActionSheet-Info.plist";
667 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
668 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
669 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
670 | MODULEMAP_FILE = "Target Support Files/AppBottomActionSheet/AppBottomActionSheet.modulemap";
671 | PRODUCT_MODULE_NAME = AppBottomActionSheet;
672 | PRODUCT_NAME = AppBottomActionSheet;
673 | SDKROOT = iphoneos;
674 | SKIP_INSTALL = YES;
675 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
676 | SWIFT_VERSION = 5.0;
677 | TARGETED_DEVICE_FAMILY = "1,2";
678 | VALIDATE_PRODUCT = YES;
679 | VERSIONING_SYSTEM = "apple-generic";
680 | VERSION_INFO_PREFIX = "";
681 | };
682 | name = Release;
683 | };
684 | FC493464695B623E7E295C851650529E /* Debug */ = {
685 | isa = XCBuildConfiguration;
686 | baseConfigurationReference = A4E078D81D40ABA4CBF5D8B5E4BFD093 /* Pods-AppBottomActionSheet_Example.debug.xcconfig */;
687 | buildSettings = {
688 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
689 | CLANG_ENABLE_OBJC_WEAK = NO;
690 | CODE_SIGN_IDENTITY = "";
691 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
692 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
693 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
694 | CURRENT_PROJECT_VERSION = 1;
695 | DEFINES_MODULE = YES;
696 | DYLIB_COMPATIBILITY_VERSION = 1;
697 | DYLIB_CURRENT_VERSION = 1;
698 | DYLIB_INSTALL_NAME_BASE = "@rpath";
699 | INFOPLIST_FILE = "Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example-Info.plist";
700 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
701 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
702 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
703 | MACH_O_TYPE = staticlib;
704 | MODULEMAP_FILE = "Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example.modulemap";
705 | OTHER_LDFLAGS = "";
706 | OTHER_LIBTOOLFLAGS = "";
707 | PODS_ROOT = "$(SRCROOT)";
708 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
709 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
710 | SDKROOT = iphoneos;
711 | SKIP_INSTALL = YES;
712 | TARGETED_DEVICE_FAMILY = "1,2";
713 | VERSIONING_SYSTEM = "apple-generic";
714 | VERSION_INFO_PREFIX = "";
715 | };
716 | name = Debug;
717 | };
718 | /* End XCBuildConfiguration section */
719 |
720 | /* Begin XCConfigurationList section */
721 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = {
722 | isa = XCConfigurationList;
723 | buildConfigurations = (
724 | 196DFA3E4A09A28224918543529A1885 /* Debug */,
725 | B01D14FDC83DCF9D4BE53066BEA96D05 /* Release */,
726 | );
727 | defaultConfigurationIsVisible = 0;
728 | defaultConfigurationName = Release;
729 | };
730 | 7DB39C706323DFE540AD66DA6012FF4C /* Build configuration list for PBXNativeTarget "Pods-AppBottomActionSheet_Example" */ = {
731 | isa = XCConfigurationList;
732 | buildConfigurations = (
733 | FC493464695B623E7E295C851650529E /* Debug */,
734 | 5408039C918B21447A18E283C023F37E /* Release */,
735 | );
736 | defaultConfigurationIsVisible = 0;
737 | defaultConfigurationName = Release;
738 | };
739 | B16E1C4ECD3D7AD917038A383772E085 /* Build configuration list for PBXNativeTarget "AppBottomActionSheet-AppBottomActionSheet" */ = {
740 | isa = XCConfigurationList;
741 | buildConfigurations = (
742 | C4256DBAFCEB10A953F7F6CCDE47CF2E /* Debug */,
743 | 4959D67A5E4E9405EC18CB9932C79D6C /* Release */,
744 | );
745 | defaultConfigurationIsVisible = 0;
746 | defaultConfigurationName = Release;
747 | };
748 | B8DB443EBC02682F85920A8604E4DFF4 /* Build configuration list for PBXNativeTarget "AppBottomActionSheet" */ = {
749 | isa = XCConfigurationList;
750 | buildConfigurations = (
751 | 211E07F7D102E18D88F0B77D15B4033A /* Debug */,
752 | E82E9B4BBC7F8A625743447AE70E6AF4 /* Release */,
753 | );
754 | defaultConfigurationIsVisible = 0;
755 | defaultConfigurationName = Release;
756 | };
757 | /* End XCConfigurationList section */
758 | };
759 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;
760 | }
761 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AppBottomActionSheet/AppBottomActionSheet-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.8
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AppBottomActionSheet/AppBottomActionSheet-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_AppBottomActionSheet : NSObject
3 | @end
4 | @implementation PodsDummy_AppBottomActionSheet
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AppBottomActionSheet/AppBottomActionSheet-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AppBottomActionSheet/AppBottomActionSheet-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double AppBottomActionSheetVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char AppBottomActionSheetVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AppBottomActionSheet/AppBottomActionSheet.debug.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AppBottomActionSheet
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_ROOT = ${SRCROOT}
7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../..
8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
11 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AppBottomActionSheet/AppBottomActionSheet.modulemap:
--------------------------------------------------------------------------------
1 | framework module AppBottomActionSheet {
2 | umbrella header "AppBottomActionSheet-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AppBottomActionSheet/AppBottomActionSheet.release.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AppBottomActionSheet
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_ROOT = ${SRCROOT}
7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../..
8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
11 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AppBottomActionSheet/AppBottomActionSheet.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AppBottomActionSheet
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
4 | PODS_BUILD_DIR = ${BUILD_DIR}
5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
6 | PODS_ROOT = ${SRCROOT}
7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../..
8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
9 | SKIP_INSTALL = YES
10 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
11 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AppBottomActionSheet/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AppBottomActionSheet/ResourceBundle-AppBottomActionSheet-AppBottomActionSheet-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleIdentifier
8 | ${PRODUCT_BUNDLE_IDENTIFIER}
9 | CFBundleInfoDictionaryVersion
10 | 6.0
11 | CFBundleName
12 | ${PRODUCT_NAME}
13 | CFBundlePackageType
14 | BNDL
15 | CFBundleShortVersionString
16 | 1.0.8
17 | CFBundleSignature
18 | ????
19 | CFBundleVersion
20 | 1
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/AppBottomActionSheet/ResourceBundle-AppBottomActionSheet-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleIdentifier
8 | ${PRODUCT_BUNDLE_IDENTIFIER}
9 | CFBundleInfoDictionaryVersion
10 | 6.0
11 | CFBundleName
12 | ${PRODUCT_NAME}
13 | CFBundlePackageType
14 | BNDL
15 | CFBundleShortVersionString
16 | 1.0.0
17 | CFBundleSignature
18 | ????
19 | CFBundleVersion
20 | 1
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 |
4 | ## AppBottomActionSheet
5 |
6 | Copyright (c) 2018 karthikAdaptavant
7 |
8 | Permission is hereby granted, free of charge, to any person obtaining a copy
9 | of this software and associated documentation files (the "Software"), to deal
10 | in the Software without restriction, including without limitation the rights
11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | copies of the Software, and to permit persons to whom the Software is
13 | furnished to do so, subject to the following conditions:
14 |
15 | The above copyright notice and this permission notice shall be included in
16 | all copies or substantial portions of the Software.
17 |
18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 | THE SOFTWARE.
25 |
26 | Generated by CocoaPods - https://cocoapods.org
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | Copyright (c) 2018 karthikAdaptavant <karthik.samy@a-cti.com>
18 |
19 | Permission is hereby granted, free of charge, to any person obtaining a copy
20 | of this software and associated documentation files (the "Software"), to deal
21 | in the Software without restriction, including without limitation the rights
22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
23 | copies of the Software, and to permit persons to whom the Software is
24 | furnished to do so, subject to the following conditions:
25 |
26 | The above copyright notice and this permission notice shall be included in
27 | all copies or substantial portions of the Software.
28 |
29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
35 | THE SOFTWARE.
36 |
37 | License
38 | MIT
39 | Title
40 | AppBottomActionSheet
41 | Type
42 | PSGroupSpecifier
43 |
44 |
45 | FooterText
46 | Generated by CocoaPods - https://cocoapods.org
47 | Title
48 |
49 | Type
50 | PSGroupSpecifier
51 |
52 |
53 | StringsTable
54 | Acknowledgements
55 | Title
56 | Acknowledgements
57 |
58 |
59 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_AppBottomActionSheet_Example : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_AppBottomActionSheet_Example
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example-frameworks.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 | set -u
4 | set -o pipefail
5 |
6 | function on_error {
7 | echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
8 | }
9 | trap 'on_error $LINENO' ERR
10 |
11 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then
12 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy
13 | # frameworks to, so exit 0 (signalling the script phase was successful).
14 | exit 0
15 | fi
16 |
17 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
18 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
19 |
20 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}"
21 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
22 |
23 | # Used as a return value for each invocation of `strip_invalid_archs` function.
24 | STRIP_BINARY_RETVAL=0
25 |
26 | # This protects against multiple targets copying the same framework dependency at the same time. The solution
27 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
28 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
29 |
30 | # Copies and strips a vendored framework
31 | install_framework()
32 | {
33 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
34 | local source="${BUILT_PRODUCTS_DIR}/$1"
35 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
36 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
37 | elif [ -r "$1" ]; then
38 | local source="$1"
39 | fi
40 |
41 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
42 |
43 | if [ -L "${source}" ]; then
44 | echo "Symlinked..."
45 | source="$(readlink "${source}")"
46 | fi
47 |
48 | # Use filter instead of exclude so missing patterns don't throw errors.
49 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
50 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
51 |
52 | local basename
53 | basename="$(basename -s .framework "$1")"
54 | binary="${destination}/${basename}.framework/${basename}"
55 |
56 | if ! [ -r "$binary" ]; then
57 | binary="${destination}/${basename}"
58 | elif [ -L "${binary}" ]; then
59 | echo "Destination binary is symlinked..."
60 | dirname="$(dirname "${binary}")"
61 | binary="${dirname}/$(readlink "${binary}")"
62 | fi
63 |
64 | # Strip invalid architectures so "fat" simulator / device frameworks work on device
65 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
66 | strip_invalid_archs "$binary"
67 | fi
68 |
69 | # Resign the code if required by the build settings to avoid unstable apps
70 | code_sign_if_enabled "${destination}/$(basename "$1")"
71 |
72 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
73 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
74 | local swift_runtime_libs
75 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u)
76 | for lib in $swift_runtime_libs; do
77 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
78 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
79 | code_sign_if_enabled "${destination}/${lib}"
80 | done
81 | fi
82 | }
83 |
84 | # Copies and strips a vendored dSYM
85 | install_dsym() {
86 | local source="$1"
87 | warn_missing_arch=${2:-true}
88 | if [ -r "$source" ]; then
89 | # Copy the dSYM into the targets temp dir.
90 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\""
91 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}"
92 |
93 | local basename
94 | basename="$(basename -s .dSYM "$source")"
95 | binary_name="$(ls "$source/Contents/Resources/DWARF")"
96 | binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}"
97 |
98 | # Strip invalid architectures so "fat" simulator / device frameworks work on device
99 | if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then
100 | strip_invalid_archs "$binary" "$warn_missing_arch"
101 | fi
102 |
103 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then
104 | # Move the stripped file into its final destination.
105 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\""
106 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
107 | else
108 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
109 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM"
110 | fi
111 | fi
112 | }
113 |
114 | # Copies the bcsymbolmap files of a vendored framework
115 | install_bcsymbolmap() {
116 | local bcsymbolmap_path="$1"
117 | local destination="${BUILT_PRODUCTS_DIR}"
118 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}""
119 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"
120 | }
121 |
122 | # Signs a framework with the provided identity
123 | code_sign_if_enabled() {
124 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
125 | # Use the current code_sign_identity
126 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
127 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'"
128 |
129 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
130 | code_sign_cmd="$code_sign_cmd &"
131 | fi
132 | echo "$code_sign_cmd"
133 | eval "$code_sign_cmd"
134 | fi
135 | }
136 |
137 | # Strip invalid architectures
138 | strip_invalid_archs() {
139 | binary="$1"
140 | warn_missing_arch=${2:-true}
141 | # Get architectures for current target binary
142 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
143 | # Intersect them with the architectures we are building for
144 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)"
145 | # If there are no archs supported by this binary then warn the user
146 | if [[ -z "$intersected_archs" ]]; then
147 | if [[ "$warn_missing_arch" == "true" ]]; then
148 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
149 | fi
150 | STRIP_BINARY_RETVAL=0
151 | return
152 | fi
153 | stripped=""
154 | for arch in $binary_archs; do
155 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then
156 | # Strip non-valid architectures in-place
157 | lipo -remove "$arch" -output "$binary" "$binary"
158 | stripped="$stripped $arch"
159 | fi
160 | done
161 | if [[ "$stripped" ]]; then
162 | echo "Stripped $binary of architectures:$stripped"
163 | fi
164 | STRIP_BINARY_RETVAL=1
165 | }
166 |
167 | install_artifact() {
168 | artifact="$1"
169 | base="$(basename "$artifact")"
170 | case $base in
171 | *.framework)
172 | install_framework "$artifact"
173 | ;;
174 | *.dSYM)
175 | # Suppress arch warnings since XCFrameworks will include many dSYM files
176 | install_dsym "$artifact" "false"
177 | ;;
178 | *.bcsymbolmap)
179 | install_bcsymbolmap "$artifact"
180 | ;;
181 | *)
182 | echo "error: Unrecognized artifact "$artifact""
183 | ;;
184 | esac
185 | }
186 |
187 | copy_artifacts() {
188 | file_list="$1"
189 | while read artifact; do
190 | install_artifact "$artifact"
191 | done <$file_list
192 | }
193 |
194 | ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt"
195 | if [ -r "${ARTIFACT_LIST_FILE}" ]; then
196 | copy_artifacts "${ARTIFACT_LIST_FILE}"
197 | fi
198 |
199 | if [[ "$CONFIGURATION" == "Debug" ]]; then
200 | install_framework "${BUILT_PRODUCTS_DIR}/AppBottomActionSheet/AppBottomActionSheet.framework"
201 | fi
202 | if [[ "$CONFIGURATION" == "Release" ]]; then
203 | install_framework "${BUILT_PRODUCTS_DIR}/AppBottomActionSheet/AppBottomActionSheet.framework"
204 | fi
205 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
206 | wait
207 | fi
208 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example-resources.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 | set -u
4 | set -o pipefail
5 |
6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then
7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy
8 | # resources to, so exit 0 (signalling the script phase was successful).
9 | exit 0
10 | fi
11 |
12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
13 |
14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
15 | > "$RESOURCES_TO_COPY"
16 |
17 | XCASSET_FILES=()
18 |
19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution
20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
22 |
23 | case "${TARGETED_DEVICE_FAMILY:-}" in
24 | 1,2)
25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
26 | ;;
27 | 1)
28 | TARGET_DEVICE_ARGS="--target-device iphone"
29 | ;;
30 | 2)
31 | TARGET_DEVICE_ARGS="--target-device ipad"
32 | ;;
33 | 3)
34 | TARGET_DEVICE_ARGS="--target-device tv"
35 | ;;
36 | 4)
37 | TARGET_DEVICE_ARGS="--target-device watch"
38 | ;;
39 | *)
40 | TARGET_DEVICE_ARGS="--target-device mac"
41 | ;;
42 | esac
43 |
44 | install_resource()
45 | {
46 | if [[ "$1" = /* ]] ; then
47 | RESOURCE_PATH="$1"
48 | else
49 | RESOURCE_PATH="${PODS_ROOT}/$1"
50 | fi
51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then
52 | cat << EOM
53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
54 | EOM
55 | exit 1
56 | fi
57 | case $RESOURCE_PATH in
58 | *.storyboard)
59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
61 | ;;
62 | *.xib)
63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
65 | ;;
66 | *.framework)
67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
71 | ;;
72 | *.xcdatamodel)
73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true
74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom"
75 | ;;
76 | *.xcdatamodeld)
77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true
78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd"
79 | ;;
80 | *.xcmappingmodel)
81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true
82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
83 | ;;
84 | *.xcassets)
85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
87 | ;;
88 | *)
89 | echo "$RESOURCE_PATH" || true
90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY"
91 | ;;
92 | esac
93 | }
94 |
95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then
98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
100 | fi
101 | rm -f "$RESOURCES_TO_COPY"
102 |
103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ]
104 | then
105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets).
106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
107 | while read line; do
108 | if [[ $line != "${PODS_ROOT}*" ]]; then
109 | XCASSET_FILES+=("$line")
110 | fi
111 | done <<<"$OTHER_XCASSETS"
112 |
113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then
114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
115 | else
116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist"
117 | fi
118 | fi
119 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double Pods_AppBottomActionSheet_ExampleVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_AppBottomActionSheet_ExampleVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example.debug.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppBottomActionSheet"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppBottomActionSheet/AppBottomActionSheet.framework/Headers"
5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
6 | OTHER_LDFLAGS = $(inherited) -framework "AppBottomActionSheet"
7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
8 | PODS_BUILD_DIR = ${BUILD_DIR}
9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
11 | PODS_ROOT = ${SRCROOT}/Pods
12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
13 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_AppBottomActionSheet_Example {
2 | umbrella header "Pods-AppBottomActionSheet_Example-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-AppBottomActionSheet_Example/Pods-AppBottomActionSheet_Example.release.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppBottomActionSheet"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppBottomActionSheet/AppBottomActionSheet.framework/Headers"
5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
6 | OTHER_LDFLAGS = $(inherited) -framework "AppBottomActionSheet"
7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
8 | PODS_BUILD_DIR = ${BUILD_DIR}
9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
11 | PODS_ROOT = ${SRCROOT}/Pods
12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
13 |
--------------------------------------------------------------------------------
/Example/Tests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Example/Tests/Tests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 | import AppBottomActionSheet
3 |
4 | class Tests: XCTestCase {
5 |
6 | override func setUp() {
7 | super.setUp()
8 | // Put setup code here. This method is called before the invocation of each test method in the class.
9 | }
10 |
11 | override func tearDown() {
12 | // Put teardown code here. This method is called after the invocation of each test method in the class.
13 | super.tearDown()
14 | }
15 |
16 | func testExample() {
17 | // This is an example of a functional test case.
18 | XCTAssert(true, "Pass")
19 | }
20 |
21 | func testPerformanceExample() {
22 | // This is an example of a performance test case.
23 | self.measure() {
24 | // Put the code you want to measure the time of here.
25 | }
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2018 karthikAdaptavant
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.1
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "AppBottomActionSheet",
8 | platforms: [.iOS(.v10)],
9 | products: [
10 | .library(name: "AppBottomActionSheet", targets: ["AppBottomActionSheet"]),
11 | ],
12 | targets: [
13 | .target(name: "AppBottomActionSheet", dependencies: []),
14 | .testTarget(name: "AppBottomActionSheetTests", dependencies: ["AppBottomActionSheet"]),
15 | ],
16 | swiftLanguageVersions: [.v4_2]
17 | )
18 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # AppBottomActionSheet
2 |
3 | [](https://travis-ci.org/karthikAdaptavant/AppBottomActionSheet)
4 | [](http://cocoapods.org/pods/AppBottomActionSheet)
5 | [](http://cocoapods.org/pods/AppBottomActionSheet)
6 | [](http://cocoapods.org/pods/AppBottomActionSheet)
7 |
8 |
9 | A ActionSheet Style presenting viewcontroller to make the feel like facebook, whatsapp option menu. Download and run to get the better view of the pod.
10 |
11 |
12 | ##### Facebook style
13 |
14 | 
15 |
16 | #### Whatsapp style
17 | 
18 |
19 | ## Requirements
20 | ios 11+
21 | Swift 4.2
22 |
23 | ## Installation
24 |
25 | AppBottomActionSheet is available through [CocoaPods](http://cocoapods.org). To install
26 | it, simply add the following line to your Podfile:
27 |
28 | ```ruby
29 | pod 'AppBottomActionSheet'
30 | ```
31 | ### Swift Package Manager
32 | AppBottomActionSheet is available through Swift Package Manager. To install it, simply add the following dependency to your Package.swift
33 | ```` swift
34 | .package(url: "https://github.com/karthikAdaptavant/AppBottomActionSheet.git", from: "1.0.6")
35 | ````
36 |
37 | ## Author
38 |
39 | karthikAdaptavant, karthik.samy@a-cti.com
40 |
41 | ## License
42 |
43 | AppBottomActionSheet is available under the MIT license. See the LICENSE file for more info.
44 |
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/karthiikmk/AppBottomActionSheet/db3a305a030535df3da39e79b01fdda4b2283b0e/Sources/AppBottomActionSheet/Assets/.gitkeep
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/karthiikmk/AppBottomActionSheet/db3a305a030535df3da39e79b01fdda4b2283b0e/Sources/AppBottomActionSheet/Classes/.gitkeep
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/AnimatorConvenience.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public protocol AnimatorConvenience: class {
12 | var manager: HalfSheetPresentationManager? { get }
13 | }
14 |
15 | extension AnimatorConvenience {
16 |
17 | //
18 | // MARK: Auxilery View
19 | //
20 |
21 | var auxileryView: UIView? {
22 | return topVCProvider?.topVC.view
23 | }
24 |
25 | var auxileryTransition: HalfSheetTopVCTransitionStyle? {
26 | return topVCProvider?.topVCTransitionStyle
27 | }
28 |
29 | var shouldFadeAuxilery: Bool {
30 | return manager?.auxileryTransition?.isFade == true
31 | }
32 |
33 | var shouldSlideAuxilery: Bool {
34 | return manager?.auxileryTransition?.isSlide == true
35 | }
36 |
37 | //
38 | // MARK: Container View
39 | //
40 |
41 | var containerView: UIView? {
42 | return manager?.presentationController?.containerView
43 | }
44 |
45 | var containerHeight: CGFloat {
46 | return containerView?.bounds.height ?? 0.0
47 | }
48 |
49 | var containerWidth: CGFloat {
50 | return containerView?.bounds.width ?? 0.0
51 | }
52 |
53 | var presentedContentHeight: CGFloat {
54 | return manager?.presentationController?.presentedViewController.view.bounds.height ?? 0.0
55 | }
56 |
57 | //
58 | // MARK: Scroll View
59 | //
60 |
61 | weak var managedScrollView: UIScrollView? {
62 | return manager?.presentationController?.managedScrollView
63 | }
64 |
65 | var isScrolling: Bool {
66 | return managedScrollView?.isScrolling ?? false
67 | }
68 |
69 | //
70 | // MARK: Misc
71 | //
72 |
73 | func dismissPresentedVC() {
74 | manager?.presentationController?.presentedViewController.dismiss(animated: true)
75 | }
76 | }
77 |
78 | extension AnimatorConvenience {
79 |
80 | var respondingVC: HalfSheetPresentableProtocol? {
81 |
82 | if let pc = manager?.presentationController?.presentedViewController as? HalfSheetPresentableProtocol {
83 | return pc
84 | }
85 |
86 | if let nc = manager?.presentationController?.presentedViewController as? UINavigationController, let pc = nc.viewControllers.last as? HalfSheetPresentableProtocol {
87 | return pc
88 | }
89 |
90 | return nil
91 | }
92 |
93 | var topVCProvider: HalfSheetTopVCProviderProtocol? {
94 |
95 | if let pc = manager?.presentationController?.presentedViewController as? HalfSheetTopVCProviderProtocol {
96 | return pc
97 | }
98 |
99 | if let nc = manager?.presentationController?.presentedViewController as? UINavigationController, let pc = nc.viewControllers.last as? HalfSheetTopVCProviderProtocol {
100 | return pc
101 | }
102 |
103 | return nil
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/DismissBar.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/DismissBarViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | /// Change this to customize
12 | public struct DismissView {
13 | public static var canShow: Bool = true
14 | public static var overlay: UIColor = UIColor.black.withAlphaComponent(0.55)
15 | public static var spacing: CGFloat = 0
16 | public static var bgColor: UIColor = UIColor.white
17 | public static var cornerRadius: CGFloat = 8
18 |
19 | public static var indicatorColor: UIColor = UIColor.lightGray
20 | public static var indicatorHeight: CGFloat = 4
21 | public static var indicatorWidth: CGFloat = 60
22 | public static var indicatorSpacing: CGFloat = 0
23 | public static var indicatorCornerRadius: CGFloat = 2
24 | }
25 |
26 | public class DismissBarViewController: UIViewController {
27 |
28 | private static var storyboardName: String = "DismissBar"
29 | private static var identifier: String = "DismissBarViewController"
30 |
31 | @IBOutlet weak var backgroundView: UIView!
32 | @IBOutlet weak var dismissIndicator: UIView!
33 |
34 | @IBOutlet weak var leadingCons: NSLayoutConstraint!
35 | @IBOutlet weak var trailingCons: NSLayoutConstraint!
36 |
37 | @IBOutlet weak var indicatorWidthCons: NSLayoutConstraint!
38 | @IBOutlet weak var indicatorHeightCons: NSLayoutConstraint!
39 | @IBOutlet weak var indicatorBottomCons: NSLayoutConstraint!
40 |
41 | public override func viewDidLoad() {
42 | super.viewDidLoad()
43 | }
44 |
45 | private static func getDismissViewController() -> DismissBarViewController? {
46 |
47 | guard let bunlde = AppBottmSheetHelper.getBundle() else {
48 | print("Error: AppBottomActionSheet Bundle not found")
49 | return nil
50 | }
51 |
52 | let storyboard = UIStoryboard(name: DismissBarViewController.storyboardName, bundle: bunlde)
53 |
54 | guard let vc = storyboard.instantiateViewController(withIdentifier: DismissBarViewController.identifier) as? DismissBarViewController else {
55 | return nil
56 | }
57 |
58 | // Layouting - imp
59 | vc.loadViewIfNeeded()
60 |
61 | return vc
62 | }
63 |
64 | /// Show Top bar with Customization
65 | public static func instance() -> DismissBarViewController? {
66 |
67 | guard let vc = self.getDismissViewController() else {
68 | return nil
69 | }
70 |
71 | guard DismissView.canShow else {
72 | vc.backgroundView.isHidden = true
73 | vc.dismissIndicator.isHidden = true
74 | return vc
75 | }
76 |
77 | /// Top Background View
78 | vc.backgroundView.layer.cornerRadius = DismissView.cornerRadius
79 | vc.backgroundView.clipsToBounds = true
80 | vc.backgroundView.backgroundColor = DismissView.bgColor
81 | vc.leadingCons.constant = DismissView.spacing
82 | vc.trailingCons.constant = DismissView.spacing
83 |
84 | /// Indicator Height and Spacing
85 | vc.dismissIndicator.backgroundColor = DismissView.indicatorColor
86 | vc.dismissIndicator.layer.cornerRadius = DismissView.indicatorCornerRadius
87 | vc.dismissIndicator.clipsToBounds = true
88 | vc.indicatorBottomCons.constant = DismissView.indicatorSpacing
89 | vc.indicatorHeightCons.constant = DismissView.indicatorHeight
90 | vc.indicatorWidthCons.constant = DismissView.indicatorWidth
91 |
92 | return vc
93 | }
94 | }
95 |
96 |
97 | class AppBottmSheetHelper {
98 |
99 | static func getBundle() -> Bundle? {
100 |
101 | let podBundle = Bundle(for: self)
102 |
103 | guard let bundleUrl = podBundle.url(forResource: "AppBottomActionSheet", withExtension: "bundle") else {
104 | print("Error: Bundle url not found")
105 | return nil
106 | }
107 |
108 | guard let bundle = Bundle(url: bundleUrl) else {
109 | print("Error: Bundle not found")
110 | return nil
111 | }
112 |
113 | return bundle
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/DismissalAnimator.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public class DismissalAnimator: UIPercentDrivenInteractiveTransition, UIViewControllerAnimatedTransitioning, AnimatorConvenience {
12 |
13 | public weak var manager: HalfSheetPresentationManager?
14 |
15 | var isFromGesture: Bool = false
16 | var animator: UIViewPropertyAnimator?
17 | var interuptableAnimator: UIViewImplicitlyAnimating?
18 |
19 | public init(manager: HalfSheetPresentationManager) {
20 | super.init()
21 | self.manager = manager
22 | }
23 |
24 | public func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
25 |
26 | switch isFromGesture {
27 | case true:
28 | return TransitionConfiguration.Dismissal.durationAfterGesture
29 |
30 | case false:
31 | guard let manager = self.manager, let respondingView = manager.respondingVC, let appearanceProvider = respondingView as? HalfSheetAppearanceProtocol else {
32 | return TransitionConfiguration.Presentation.duration
33 | }
34 | return appearanceProvider.dismissAnimationDuration
35 | }
36 | }
37 |
38 | public func interruptibleAnimator(using transitionContext: UIViewControllerContextTransitioning) -> UIViewImplicitlyAnimating {
39 | guard let interupt = interuptableAnimator else {
40 | interuptableAnimator = transition(using: transitionContext)
41 | return interuptableAnimator!
42 | }
43 |
44 | return interupt
45 | }
46 |
47 | public func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
48 | interuptableAnimator = transition(using: transitionContext)
49 | }
50 |
51 | private func transition(using transitionContext: UIViewControllerContextTransitioning) -> UIViewImplicitlyAnimating {
52 |
53 | let presentedControllerView = transitionContext.view(forKey: UITransitionContextViewKey.from)!
54 | weak var weakManager = manager
55 |
56 | let finalTransform = CGAffineTransform(translationX: 0, y: shouldSlideAuxilery ? containerHeight : presentedContentHeight)
57 |
58 | func animate() {
59 | presentedControllerView.layer.transform = finalTransform.as3D
60 | weakManager?.presentationController?.presentingViewContainer.layer.transform = .identity
61 | weakManager?.presentationController?.backgroundView.alpha = 0.0
62 | weakManager?.auxileryView?.alpha = self.shouldFadeAuxilery ? 0.0 : 1.0
63 | weakManager?.auxileryView?.layer.transform = self.shouldSlideAuxilery ? finalTransform.as3D : .identity
64 | }
65 |
66 | func complete(completed: Bool) {
67 |
68 | let finished = completed && !transitionContext.transitionWasCancelled
69 | if finished {
70 | weakManager?.dismissComplete()
71 | transitionContext.finishInteractiveTransition()
72 | }
73 | transitionContext.completeTransition(finished)
74 | }
75 |
76 | let duration = transitionDuration(using: transitionContext)
77 | let timing = UISpringTimingParameters(dampingRatio: 1.3)
78 |
79 | animator = UIViewPropertyAnimator(
80 | duration: duration * 2.5,
81 | timingParameters: timing
82 | )
83 |
84 | animator?.addAnimations(animate)
85 | animator?.addCompletion { complete(completed: $0 == .end) }
86 | animator?.startAnimation()
87 |
88 | return animator!
89 | }
90 |
91 | override public func cancel() {
92 | super.cancel()
93 |
94 | animator?.pauseAnimation()
95 |
96 | let duration: CGFloat = CGFloat(TransitionConfiguration.Dismissal.duration)
97 | let timing = UISpringTimingParameters(dampingRatio: 0.7)
98 |
99 | animator?.continueAnimation(
100 | withTimingParameters: timing,
101 | durationFactor: duration
102 | )
103 | }
104 |
105 | override public func finish() {
106 | super.finish()
107 |
108 | animator?.pauseAnimation()
109 |
110 | let duration: CGFloat = CGFloat(TransitionConfiguration.Dismissal.duration)
111 | let timing = UISpringTimingParameters(dampingRatio: 1.2)
112 |
113 | animator?.continueAnimation(
114 | withTimingParameters: timing,
115 | durationFactor: duration
116 | )
117 | }
118 |
119 | override public func update(_ percentComplete: CGFloat) {
120 | super.update(percentComplete)
121 | animator?.fractionComplete = percentComplete
122 | }
123 | }
124 |
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/PresentationAnimator.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class PresentationAnimator: NSObject, UIViewControllerAnimatedTransitioning, AnimatorConvenience {
12 |
13 | weak var manager: HalfSheetPresentationManager?
14 |
15 | public init(manager: HalfSheetPresentationManager) {
16 | super.init()
17 | self.manager = manager
18 | }
19 |
20 | func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
21 |
22 | guard let manager = self.manager, let respondingView = manager.respondingVC, let appearanceProvider = respondingView as? HalfSheetAppearanceProtocol else {
23 | return TransitionConfiguration.Presentation.duration
24 | }
25 |
26 | return appearanceProvider.presentAnimationDuration
27 | }
28 |
29 | func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
30 |
31 | let presentedController = transitionContext.viewController(forKey: .to)!
32 | let wrappedPresentedView = manager!.presentationController!.wrappingView
33 |
34 | let initialTransform = CGAffineTransform(translationX: 0, y: containerHeight).as3D
35 |
36 | wrappedPresentedView.frame = transitionContext.finalFrame(for: presentedController)
37 | wrappedPresentedView.layer.transform = initialTransform
38 |
39 | transitionContext.containerView.addSubview(wrappedPresentedView)
40 |
41 | manager?.presentationController?.backgroundView.alpha = 0.0
42 | manager?.auxileryView?.alpha = shouldFadeAuxilery ? 0.0 : 1.0
43 | manager?.auxileryView?.layer.transform = shouldSlideAuxilery ? initialTransform : .identity
44 |
45 | weak var weakManager = manager
46 |
47 | let animator = UIViewPropertyAnimator(
48 | duration: transitionDuration(using: transitionContext),
49 | timingParameters: UISpringTimingParameters(dampingRatio: 1)
50 | )
51 |
52 | func animate() {
53 | wrappedPresentedView.layer.transform = .identity
54 | weakManager?.presentationController?.presentingViewContainer.layer.transform = backgroundTransform(rect: wrappedPresentedView.frame)
55 | weakManager?.presentationController?.backgroundView.alpha = 1.0
56 | weakManager?.auxileryView?.layer.transform = .identity
57 |
58 | UIView.animateKeyframes(withDuration: transitionDuration(using: transitionContext), delay: 0, options:[], animations: {
59 | UIView.addKeyframe(withRelativeStartTime: 0.4, relativeDuration: 0.6) {
60 | weakManager?.auxileryView?.alpha = 1.0
61 | }
62 | })
63 | }
64 |
65 | func complete(completed: Bool) {
66 | transitionContext.completeTransition(completed)
67 | weakManager?.didFinishPresentation()
68 | }
69 |
70 | animator.addAnimations(animate)
71 | animator.addCompletion { complete(completed: $0 == .end) }
72 | animator.startAnimation()
73 | }
74 |
75 | func backgroundTransform(rect: CGRect) -> CATransform3D {
76 |
77 | //let statusBarHeight = max(28.0, UIApplication.shared.statusBarFrame.height)
78 | let scale = CGAffineTransform(scaleX: 1, y: 1)
79 | let transform = CGAffineTransform(translationX: 0, y: 0)
80 |
81 | return transform.concatenating(scale).as3D
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/PresentationManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public class HalfSheetPresentationManager: NSObject, UIGestureRecognizerDelegate {
12 |
13 | private var observer: NSKeyValueObservation?
14 | private var displayLink: CADisplayLink?
15 | private var lastSnapshot: UIView?
16 |
17 | public private(set) lazy var dismissingPanGesture: VerticalPanGestureRecognizer = { [unowned self] in
18 | return VerticalPanGestureRecognizer(
19 | target: self,
20 | action: #selector(HalfSheetPresentationManager.handleDismissingPan(_:))
21 | )
22 | }()
23 |
24 | public private(set) lazy var contentDismissingPanGesture: UIPanGestureRecognizer = { [unowned self] in
25 | return UIPanGestureRecognizer(
26 | target: self,
27 | action: #selector(HalfSheetPresentationManager.handleDismissingPan(_:))
28 | )
29 | }()
30 |
31 | public private(set) lazy var backgroundViewDismissTrigger: UITapGestureRecognizer = { [unowned self] in
32 | return UITapGestureRecognizer(
33 | target: self,
34 | action: #selector(HalfSheetPresentationManager.handleDismissingTap)
35 | )
36 | }()
37 |
38 | fileprivate lazy var presentationAnimation: PresentationAnimator = { [unowned self] in
39 | return PresentationAnimator(manager: self)
40 | }()
41 |
42 | fileprivate lazy var dismissalAnimation: DismissalAnimator = { [unowned self] in
43 | return DismissalAnimator(manager: self)
44 | }()
45 |
46 | internal var presentationController: PresentationViewController?
47 |
48 | var hasActiveGesture: Bool {
49 | return [dismissingPanGesture.state, contentDismissingPanGesture.state].filter { ![.possible, .failed].contains($0) }.isEmpty == false
50 | }
51 |
52 | public override init() {
53 | super.init()
54 |
55 | NotificationCenter.default.addObserver(forName: UIApplication.willResignActiveNotification, object: nil, queue: OperationQueue.main) { [weak self] _ in
56 | self?.unlinkDisplay()
57 | }
58 |
59 | NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: OperationQueue.main) { [weak self] _ in
60 | self?.linkDisplay()
61 | }
62 |
63 | linkDisplay()
64 | }
65 |
66 | //
67 | // MARK: Gesture Recoginzers
68 | //
69 |
70 | @objc
71 | func handleDismissingTap() {
72 | guard allowTapToDismiss, !isScrolling else { return }
73 | dismissPresentedVC()
74 | }
75 |
76 | @objc
77 | func handleDismissingPan(_ pan: UIPanGestureRecognizer) {
78 |
79 | guard allowSwipeToDismiss, !isScrolling else { return }
80 |
81 | let translation = pan.translation(in: containerView)
82 | let velocity = pan.velocity(in: containerView)
83 | let d: CGFloat = max(translation.y, 0) / containerHeight
84 |
85 | switch pan.state {
86 |
87 | case .began:
88 |
89 | guard velocity.y > 0 else { return }
90 | HapticHelper.warmUp()
91 | dismissalAnimation.isFromGesture = true
92 | dismissPresentedVC()
93 |
94 | case .changed:
95 |
96 | dismissalAnimation.update(d)
97 |
98 | if max(translation.y, 0) > TransitionConfiguration.Dismissal.dismissBreakpoint {
99 | pan.isEnabled = false
100 | HapticHelper.impact()
101 | dismissalAnimation.finish()
102 | }
103 |
104 | default:
105 | func commitTransition() {
106 | dismissalAnimation.finish()
107 | }
108 |
109 | func cancelTransition() {
110 | dismissalAnimation.isFromGesture = false
111 | dismissalAnimation.cancel()
112 | }
113 |
114 | translation.y > TransitionConfiguration.Dismissal.dismissBreakpoint ? commitTransition() : cancelTransition()
115 | }
116 | }
117 |
118 | public func updateForScrollPosition(yOffset: CGFloat) {
119 |
120 | let fullOffset = yOffset + topOffset
121 | guard fullOffset < 0 else { return }
122 |
123 | let forwardTransform = CGAffineTransform(translationX: 0, y: -fullOffset)
124 | let backwardsTransform = CGAffineTransform(translationX: 0, y: fullOffset)
125 |
126 | presentationController?.wrappingView.layer.transform = forwardTransform.as3D
127 | presentationController?.managedScrollView?.layer.transform = backwardsTransform.as3D
128 |
129 | if shouldSlideAuxilery {
130 | auxileryView?.transform = forwardTransform
131 | }
132 |
133 | if -fullOffset > TransitionConfiguration.Dismissal.dismissBreakpoint {
134 | observer = nil
135 | HapticHelper.impact()
136 | dismissalAnimation.isFromGesture = false
137 | dismissPresentedVC()
138 | }
139 | }
140 |
141 | internal func dismissComplete() {
142 | observer = nil
143 |
144 | var respondingHalfSheetCompletionProtocol: HalfSheetCompletionProtocol? {
145 | if let pc = presentationController?.presentingViewController as? HalfSheetCompletionProtocol {
146 | return pc
147 | }
148 |
149 | if let nc = presentationController?.presentingViewController as? UINavigationController, let pc = nc.viewControllers.last as? HalfSheetCompletionProtocol {
150 | return pc
151 | }
152 |
153 | return nil
154 | }
155 |
156 | var respondingPresentationProtocol: HalfSheetPresentingProtocol? {
157 | if let pc = presentationController?.presentingViewController as? HalfSheetPresentingProtocol {
158 | return pc
159 | }
160 |
161 | if let nc = presentationController?.presentingViewController as? UINavigationController, let pc = nc.viewControllers.last as? HalfSheetPresentingProtocol {
162 | return pc
163 | }
164 |
165 | return nil
166 | }
167 |
168 | respondingHalfSheetCompletionProtocol?.didDismiss()
169 | respondingPresentationProtocol?.transitionManager = nil
170 |
171 | displayLink?.invalidate()
172 | displayLink = nil
173 | presentationController = nil
174 | }
175 |
176 | public func didChangeSheetHeight() {
177 | presentationController?.updateSheetHeight()
178 | }
179 |
180 | private var allowSwipeToDismiss: Bool {
181 | return respondingVC?.dismissMethod.allowSwipe ?? false
182 | }
183 |
184 | private var allowTapToDismiss: Bool {
185 | return respondingVC?.dismissMethod.allowTap ?? false
186 | }
187 |
188 | private var topOffset: CGFloat {
189 | if #available(iOS 11.0, *) {
190 | return presentationController?.managedScrollView?.safeAreaInsets.top ?? 0.0
191 | } else {
192 | return presentationController?.managedScrollView?.contentInset.top ?? 0.0
193 | }
194 | }
195 | }
196 |
197 | extension HalfSheetPresentationManager: UIViewControllerTransitioningDelegate {
198 |
199 | public func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
200 | return presentationAnimation
201 | }
202 |
203 | public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
204 | return dismissalAnimation
205 | }
206 |
207 | public func interactionControllerForDismissal(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {
208 | return hasActiveGesture ? dismissalAnimation : nil
209 | }
210 |
211 | public func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
212 |
213 | presented.modalPresentationStyle = .custom
214 |
215 | presentationController = PresentationViewController(
216 | presentedViewController: presented,
217 | presentingViewController: source,
218 | manager: self
219 | )
220 |
221 | return presentationController
222 | }
223 |
224 | internal func didFinishPresentation() {
225 | observer = presentationController?.managedScrollView?.observe(\UIScrollView.contentOffset, options: [.new]) { [weak self] _, change in
226 | guard let offset = change.newValue, offset.y < 0 else { return }
227 | self?.updateForScrollPosition(yOffset: offset.y)
228 | }
229 | }
230 | }
231 |
232 | extension HalfSheetPresentationManager {
233 |
234 | private func unlinkDisplay() {
235 | displayLink?.invalidate()
236 | displayLink = nil
237 | }
238 |
239 | private func linkDisplay() {
240 | copyPresentingViewToTransitionContext(afterScreenUpdate: true)
241 | displayLink?.invalidate()
242 | displayLink = UIScreen.main.displayLink(withTarget: self, selector: #selector(HalfSheetPresentationManager.displayDidRefresh(_:)))
243 | displayLink?.add(to: .main, forMode: RunLoop.Mode.default)
244 | }
245 |
246 | @objc private func displayDidRefresh(_ displayLink: CADisplayLink) {
247 | copyPresentingViewToTransitionContext(afterScreenUpdate: false)
248 | }
249 |
250 | func copyPresentingViewToTransitionContext(afterScreenUpdate: Bool) {
251 | guard let newSnapshot = presentationController?.presentingViewController.view.snapshotView(afterScreenUpdates: afterScreenUpdate) else { return }
252 | presentationController?.presentingViewContainer.isHidden = false
253 | lastSnapshot?.removeFromSuperview()
254 | newSnapshot.frame = presentationController?.presentingViewController.view.frame ?? .zero
255 | presentationController?.presentingViewContainer.addSubview(newSnapshot)
256 | lastSnapshot = newSnapshot
257 | }
258 | }
259 |
260 | extension HalfSheetPresentationManager: AnimatorConvenience {
261 |
262 | weak public var manager: HalfSheetPresentationManager? {
263 | return self
264 | }
265 | }
266 |
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/PresentationProtocol.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | public protocol HalfSheetPresentingProtocol: class {
13 | var transitionManager: HalfSheetPresentationManager! { get set }
14 | }
15 |
16 | public extension HalfSheetPresentingProtocol where Self: UIViewController {
17 |
18 | func presentUsingHalfSheet(_ vc: UIViewController, animated: Bool = true) {
19 | transitionManager = HalfSheetPresentationManager()
20 | vc.transitioningDelegate = transitionManager
21 | vc.modalPresentationStyle = .custom
22 | present(vc, animated: animated)
23 | }
24 |
25 | @discardableResult func presentUsingHalfSheetInNC(_ vc: UIViewController, animated: Bool = true) -> UINavigationController {
26 | let nc = UINavigationController(rootViewController: vc)
27 | transitionManager = HalfSheetPresentationManager()
28 | nc.transitioningDelegate = transitionManager
29 | nc.modalPresentationStyle = .custom
30 | present(nc, animated: animated)
31 | return nc
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/PresentationViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public class PresentationViewController: UIPresentationController, AnimatorConvenience {
12 |
13 | weak public var manager: HalfSheetPresentationManager?
14 |
15 | lazy var backgroundView: UIView = { [unowned self] in
16 | let view = UIView()
17 | view.backgroundColor = DismissView.overlay
18 | return view
19 | }()
20 |
21 | lazy var backgroundLayer: UIView = { [unowned self] in
22 | let view = UIView()
23 | view.backgroundColor = UIColor.black
24 | return view
25 | }()
26 |
27 | lazy var presentingViewContainer: UIView = {
28 | let view = UIView()
29 | view.layer.cornerRadius = 0
30 | view.layer.borderColor = UIColor.white.withAlphaComponent(0.15).cgColor
31 | view.layer.borderWidth = 0.5
32 | view.clipsToBounds = true
33 | view.isHidden = true
34 | return view
35 | }()
36 |
37 | var wrappingView: UIView = UIView()
38 |
39 | var presentedViewConstraints: [NSLayoutConstraint] = []
40 | var wrappingViewConstraints: [NSLayoutConstraint] = []
41 | var topViewConstraints: [NSLayoutConstraint] = []
42 |
43 | public init(presentedViewController: UIViewController, presentingViewController: UIViewController?, manager: HalfSheetPresentationManager) {
44 | super.init(presentedViewController: presentedViewController, presenting: presentingViewController)
45 | self.manager = manager
46 | }
47 |
48 | public func updateSheetHeight() {
49 |
50 | guard let presentedView = presentedView, let _ = presentedView.superview else {
51 | return
52 | }
53 |
54 | manager?.auxileryView?.superview?.removeConstraints(topViewConstraints)
55 | manager?.auxileryView?.removeConstraints(topViewConstraints)
56 |
57 | wrappingView.superview?.removeConstraints(wrappingViewConstraints)
58 | wrappingView.removeConstraints(wrappingViewConstraints)
59 |
60 | wrappingViewConstraints = wrappingView.bindToSuperView(edgeInsets:
61 | UIEdgeInsets(withTop: topContainerOffset)
62 | )
63 |
64 | topViewConstraints = manager?.auxileryView?.bindToSuperView(edgeInsets:
65 | UIEdgeInsets(withBottom: containerHeight - topContainerOffset)
66 | ) ?? []
67 |
68 | let animator = UIViewPropertyAnimator(duration: 0.4, timingParameters: UISpringTimingParameters(dampingRatio: 1))
69 |
70 | animator.addAnimations { [weak self] in
71 | self?.containerView?.layoutIfNeeded()
72 | }
73 |
74 | animator.startAnimation()
75 | }
76 |
77 | override public func presentationTransitionWillBegin() {
78 |
79 | guard let containerView = containerView, let presentedView = presentedView else {
80 | return
81 | }
82 |
83 | (presentedViewController as? UINavigationController)?.delegate = self
84 |
85 | containerView.addSubview(backgroundLayer)
86 | containerView.addSubview(presentingViewContainer)
87 | containerView.addSubview(backgroundView)
88 | containerView.addSubview(wrappingView)
89 | wrappingView.addSubview(presentedView)
90 |
91 | if let view = auxileryView {
92 | addTopContent(view: view)
93 | }
94 |
95 | backgroundLayer.bindToSuperView(edgeInsets: .zero)
96 | presentingViewContainer.bindToSuperView(edgeInsets: .zero)
97 | manager?.copyPresentingViewToTransitionContext(afterScreenUpdate: true)
98 | backgroundView.bindToSuperView(edgeInsets: .zero)
99 | presentedView.bindToSuperView(edgeInsets: .zero)
100 |
101 | wrappingView.superview?.removeConstraints(wrappingViewConstraints)
102 | wrappingView.removeConstraints(wrappingViewConstraints)
103 |
104 | wrappingViewConstraints = wrappingView.bindToSuperView(edgeInsets:
105 | UIEdgeInsets(withTop: topContainerOffset)
106 | )
107 |
108 | // if let appearanceProvider = respondingVC as? HalfSheetAppearanceProtocol {
109 | //
110 | // presentedView.clipsToBounds = true
111 | // presentedView.round(corners: [.topLeft, .topRight], radius: appearanceProvider.cornerRadius)
112 | // }
113 |
114 | presentedView.add(gestureRecognizer: manager?.dismissingPanGesture)
115 | backgroundView.add(gestureRecognizer: manager?.backgroundViewDismissTrigger)
116 | backgroundView.add(gestureRecognizer: manager?.contentDismissingPanGesture)
117 |
118 | containerView.setNeedsLayout()
119 | containerView.layoutIfNeeded()
120 | }
121 |
122 | override public func dismissalTransitionDidEnd(_ completed: Bool) {
123 | guard completed else { return }
124 | presentingViewController.view.layer.transform = .identity
125 | manager?.auxileryView?.removeFromSuperview()
126 | backgroundView.removeFromSuperview()
127 | }
128 |
129 | fileprivate var topContainerOffset: CGFloat {
130 |
131 | var expectedOffset: CGFloat {
132 |
133 | guard let sheetHeight = respondingVC?.sheetHeight else {
134 | return 0.0
135 | }
136 |
137 | if #available(iOS 11.0, *) {
138 | return containerHeight - sheetHeight - bottomSafeAreaInset
139 | } else {
140 | return containerHeight - sheetHeight
141 | }
142 | }
143 |
144 | return max(expectedOffset, UIApplication.shared.statusBarFrame.height)
145 | }
146 |
147 | override public var shouldPresentInFullscreen: Bool {
148 | return false
149 | }
150 |
151 | var bottomSafeAreaInset: CGFloat {
152 | if #available(iOS 11.0, *) {
153 | // todo: figure out a way to receive safe area updates in a Presentation VC
154 | return UIApplication.shared.keyWindow?.safeAreaInsets.bottom ?? 0.0
155 | } else {
156 | return 0.0
157 | }
158 | }
159 |
160 | weak var managedScrollView: UIScrollView? {
161 | return respondingVC?.managedScrollView
162 | }
163 |
164 | // MARK: Content Changes
165 |
166 | func addTopContent(view: UIView) {
167 |
168 | containerView?.insertSubview(view, aboveSubview: backgroundView)
169 |
170 | topViewConstraints = view.bindToSuperView(edgeInsets:
171 | UIEdgeInsets(withBottom: containerHeight - topContainerOffset)
172 | )
173 | }
174 | }
175 |
176 | extension PresentationViewController: UINavigationControllerDelegate {
177 |
178 | public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
179 | updateSheetHeight()
180 | }
181 | }
182 |
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/Protocols.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public enum HalfSheetTopVCTransitionStyle {
12 | case slide
13 | case fade
14 |
15 | internal var isSlide: Bool {
16 | return self == .slide
17 | }
18 | internal var isFade: Bool {
19 | return self == .fade
20 | }
21 | }
22 |
23 | public enum DismissMethod {
24 | case tap
25 | case swipe
26 | }
27 |
28 | internal extension Array where Element == DismissMethod {
29 |
30 | var allowSwipe: Bool {
31 | return contains(.swipe)
32 | }
33 |
34 | var allowTap: Bool {
35 | return contains(.tap)
36 | }
37 | }
38 |
39 | public protocol HalfSheetPresentableProtocol: class {
40 | var managedScrollView: UIScrollView? { get }
41 | var dismissMethod: [DismissMethod] { get }
42 | var sheetHeight: CGFloat? { get }
43 | }
44 |
45 | public protocol HalfSheetTopVCProviderProtocol: class {
46 | var topVC: UIViewController { get }
47 | var topVCTransitionStyle: HalfSheetTopVCTransitionStyle { get }
48 | }
49 |
50 | /// HalfSheetCompletionProtocol has to be used in viewcontroller which presents the halfsheet. not inside the halfsheet.
51 | public protocol HalfSheetCompletionProtocol: class {
52 | func didDismiss()
53 | }
54 |
55 | public protocol HalfSheetAppearanceProtocol: class {
56 | var presentAnimationDuration: TimeInterval { get }
57 | var dismissAnimationDuration: TimeInterval { get }
58 | }
59 |
60 | public extension HalfSheetPresentableProtocol where Self: UIViewController {
61 | func didUpdateSheetHeight() {
62 | (navigationController?.transitioningDelegate as? HalfSheetPresentationManager ?? transitioningDelegate as? HalfSheetPresentationManager)?.didChangeSheetHeight()
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/TransitionConfiguration.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | struct TransitionConfiguration {
12 |
13 | static var scalePercentage: CGFloat = 0.92
14 |
15 | struct Presentation {
16 | public static var duration: TimeInterval = 0.35
17 | }
18 |
19 | struct Dismissal {
20 | static var duration: TimeInterval = 0.25
21 | static var durationAfterGesture: TimeInterval = 1.0
22 | static var dismissBreakpoint: CGFloat = 100
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/Utilities.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. All rights reserved.
7 | //
8 | import UIKit
9 |
10 | extension UIView {
11 |
12 | @discardableResult func bindToSuperView(edgeInsets: UIEdgeInsets) -> [NSLayoutConstraint] {
13 |
14 | guard let superview = self.superview else {
15 | return []
16 | }
17 |
18 | translatesAutoresizingMaskIntoConstraints = false
19 |
20 | let horizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-left-[subview]-right-|",
21 | options: [],
22 | metrics: ["left": edgeInsets.left, "right": edgeInsets.right],
23 | views: ["subview": self])
24 |
25 | let verticalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "V:|-top-[subview]-bottom-|",
26 | options: [],
27 | metrics: ["top": edgeInsets.top, "bottom": edgeInsets.bottom],
28 | views: ["subview": self])
29 |
30 | superview.addConstraints(horizontalConstraints + verticalConstraints)
31 |
32 | return horizontalConstraints + verticalConstraints
33 | }
34 |
35 | func add(gestureRecognizer: UIGestureRecognizer?) {
36 | guard let gestureRecognizer = gestureRecognizer else { return }
37 | addGestureRecognizer(gestureRecognizer)
38 | }
39 |
40 | func round(corners: UIRectCorner, radius: CGFloat) {
41 | let maskPath = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
42 | let maskLayer = CAShapeLayer()
43 | maskLayer.frame = self.bounds
44 | maskLayer.path = maskPath.cgPath
45 | self.layer.mask = maskLayer
46 | }
47 |
48 | func snapshot() -> UIImage {
49 | UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.main.scale)
50 | drawHierarchy(in: self.bounds, afterScreenUpdates: false)
51 | let image = UIGraphicsGetImageFromCurrentImageContext()!
52 | UIGraphicsEndImageContext()
53 | return image
54 | }
55 | }
56 |
57 | extension CGAffineTransform {
58 |
59 | var as3D: CATransform3D {
60 | return CATransform3DMakeAffineTransform(self)
61 | }
62 | }
63 |
64 | extension CATransform3D {
65 |
66 | static var identity: CATransform3D {
67 | return CATransform3DIdentity
68 | }
69 | }
70 |
71 | extension UIScrollView {
72 | var isScrolling: Bool {
73 | return isDragging || isDecelerating
74 | }
75 | }
76 |
77 | struct HapticHelper {
78 |
79 | static func warmUp() {
80 | UIImpactFeedbackGenerator().prepare()
81 | }
82 |
83 | static func impact() {
84 | UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
85 | }
86 | }
87 |
88 |
89 | extension UIEdgeInsets {
90 |
91 | init(withTop top: CGFloat = 0.0) {
92 | self.init(top: top, left: 0, bottom: 0, right: 0)
93 | }
94 |
95 | init(withBottom bottom: CGFloat = 0.0) {
96 | self.init(top: 0, left: 0, bottom: bottom, right: 0)
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/Sources/AppBottomActionSheet/Classes/VerticalPanGestureRecognizer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // AppBottomActionSheet
4 | //
5 | // Created by karthikAdaptavant on 03/21/2018.
6 | // Copyright (c) 2018 karthikAdaptavant. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit.UIGestureRecognizerSubclass
11 |
12 | public class VerticalPanGestureRecognizer: UIPanGestureRecognizer {
13 |
14 | override public func touchesMoved(_ touches: Set, with event: UIEvent) {
15 | super.touchesMoved(touches, with:event)
16 |
17 | if let view = self.view, abs(velocity(in: view).x) > abs(velocity(in: view).y) {
18 | state = .failed
19 | return
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Tests/AppBottomActionSheetTests/AppBottomActionSheetTests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 | @testable import AppBottomActionSheet
3 |
4 | final class AppBottomActionSheetTests: XCTestCase {
5 | func testExample() {
6 | // This is an example of a functional test case.
7 | // Use XCTAssert and related functions to verify your tests produce the correct
8 | // results.
9 | // XCTAssertEqual(AppBottomActionSheet().text, "Hello, World!")
10 | }
11 |
12 | static var allTests = [
13 | ("testExample", testExample),
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/Tests/AppBottomActionSheetTests/XCTestManifests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | #if !canImport(ObjectiveC)
4 | public func allTests() -> [XCTestCaseEntry] {
5 | return [
6 | testCase(AppBottomActionSheetTests.allTests),
7 | ]
8 | }
9 | #endif
10 |
--------------------------------------------------------------------------------
/Tests/LinuxMain.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | import AppBottomActionSheetTests
4 |
5 | var tests = [XCTestCaseEntry]()
6 | tests += AppBottomActionSheetTests.allTests()
7 | XCTMain(tests)
8 |
--------------------------------------------------------------------------------
/_Pods.xcodeproj:
--------------------------------------------------------------------------------
1 | Example/Pods/Pods.xcodeproj
--------------------------------------------------------------------------------
/facebookstyle.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/karthiikmk/AppBottomActionSheet/db3a305a030535df3da39e79b01fdda4b2283b0e/facebookstyle.PNG
--------------------------------------------------------------------------------
/fastlane/Appfile:
--------------------------------------------------------------------------------
1 | # app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app
2 | # apple_id("[[APPLE_ID]]") # Your Apple email address
3 |
4 |
5 | # For more information about the Appfile, see:
6 | # https://docs.fastlane.tools/advanced/#appfile
7 |
--------------------------------------------------------------------------------
/fastlane/Fastfile:
--------------------------------------------------------------------------------
1 | # This file contains the fastlane.tools configuration
2 | # You can find the documentation at https://docs.fastlane.tools
3 | #
4 | # For a list of all available actions, check out
5 | #
6 | # https://docs.fastlane.tools/actions
7 | #
8 | # For a list of all available plugins, check out
9 | #
10 | # https://docs.fastlane.tools/plugins/available-plugins
11 | #
12 |
13 | # Uncomment the line if you want fastlane to automatically update itself
14 | # update_fastlane
15 |
16 | fastlane_version "2.61.0"
17 | default_platform(:ios)
18 |
19 | platform :ios do
20 |
21 | desc "Release a new version with a patch bump_type"
22 | lane :patch do
23 | release("patch") # we could use __method__.to_s instead of duplicating the name
24 | end
25 |
26 | desc "Release a new version with a minor bump_type"
27 | lane :minor do
28 | release("minor")
29 | end
30 |
31 | desc "Release a new version with a major bump_type"
32 | lane :major do
33 | release("major")
34 | end
35 |
36 | def release(type)
37 | pod_lib_lint
38 | version = version_bump_podspec(path: "AppBottomActionSheet.podspec",
39 | bump_type: type)
40 | git_add(path: "AppBottomActionSheet.podspec")
41 | git_commit(path: ["AppBottomActionSheet.podspec"],
42 | message: "#{version} release")
43 | add_git_tag(tag: "#{version}")
44 | push_to_git_remote
45 | pod_push
46 | end
47 | end
48 |
--------------------------------------------------------------------------------
/fastlane/README.md:
--------------------------------------------------------------------------------
1 | fastlane documentation
2 | ================
3 | # Installation
4 |
5 | Make sure you have the latest version of the Xcode command line tools installed:
6 |
7 | ```
8 | xcode-select --install
9 | ```
10 |
11 | Install _fastlane_ using
12 | ```
13 | [sudo] gem install fastlane -NV
14 | ```
15 | or alternatively using `brew install fastlane`
16 |
17 | # Available Actions
18 | ## iOS
19 | ### ios patch
20 | ```
21 | fastlane ios patch
22 | ```
23 | Release a new version with a patch bump_type
24 | ### ios minor
25 | ```
26 | fastlane ios minor
27 | ```
28 | Release a new version with a minor bump_type
29 | ### ios major
30 | ```
31 | fastlane ios major
32 | ```
33 | Release a new version with a major bump_type
34 |
35 | ----
36 |
37 | This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run.
38 | More information about fastlane can be found on [fastlane.tools](https://fastlane.tools).
39 | The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
40 |
--------------------------------------------------------------------------------
/fastlane/report.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/whatsappstyle.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/karthiikmk/AppBottomActionSheet/db3a305a030535df3da39e79b01fdda4b2283b0e/whatsappstyle.PNG
--------------------------------------------------------------------------------