Compare commits

..

95 Commits

Author SHA1 Message Date
Ivan Vorobei cbc46d4db4 Update to 1.6.6
Change layout system for arrow indicator. Now usage auto layout.
2019-06-19 07:41:18 +03:00
Ivan Vorobei 552f722a88 Update README.md 2019-06-18 17:54:16 +03:00
Ivan Vorobei 19caee5ccc Update README.md 2019-06-18 17:53:05 +03:00
Ivan Vorobei 2b5d20f26d Update README.md 2019-06-18 17:52:39 +03:00
Ivan Vorobei a6913a46a2 Add about Sheets 2019-06-18 17:51:41 +03:00
Ivan Vorobei fab0c7a274 Update README.md 2019-06-17 11:32:29 +03:00
Ivan Vorobei d04463f251 Update README.md 2019-06-17 11:13:26 +03:00
Ivan Vorobei d37aace4ec Update README.md 2019-06-17 11:11:48 +03:00
Ivan Vorobei 33d9b98d7d Update README.md 2019-06-17 11:10:46 +03:00
Ivan Vorobei 0363923e1b Update README.md 2019-06-17 11:09:37 +03:00
Ivan Vorobei 877108b08b Update README.md 2019-06-17 11:08:39 +03:00
Ivan Vorobei 7b25a6b878 Update README.md 2019-06-17 11:07:48 +03:00
Ivan Vorobei b69ae3ff7e Update README.md 2019-06-17 11:07:18 +03:00
Ivan Vorobei 4eac2276d4 Update README.md 2019-06-17 11:03:50 +03:00
Ivan Vorobei 38a6a10280 Update README.md 2019-06-17 11:02:12 +03:00
Ivan Vorobei aae897fc68 Update README.md 2019-06-17 11:00:27 +03:00
Ivan Vorobei 438811dbe5 Update README.md 2019-06-17 10:59:47 +03:00
Ivan Vorobei 7ea761b26e Update README.md 2019-06-16 23:20:30 +03:00
Ivan Vorobei 5c5457a09b Update README.md 2019-06-16 00:14:22 +03:00
Ivan Vorobei cdccba8929 Update README.md 2019-06-16 00:11:53 +03:00
Ivan Vorobei 196beb7592 Update README.md 2019-06-15 23:31:41 +03:00
Ivan Vorobei 91fe62e899 Update README.md 2019-06-15 23:30:40 +03:00
Ivan Vorobei bab71b560d Update README.md 2019-06-15 23:27:48 +03:00
Ivan Vorobei bb11bcd528 Add SPStorkSegue & icon for example 2019-06-15 23:25:30 +03:00
Ivan Vorobei d1f25b147f Update README.md 2019-06-15 14:25:50 +03:00
Ivan Vorobei 3eb459eab5 Update README.md 2019-06-15 14:22:50 +03:00
Ivan Vorobei 9060761733 Update README.md 2019-06-15 14:22:35 +03:00
Ivan Vorobei d7c5bd193c Update README.md 2019-06-15 14:20:16 +03:00
Ivan Vorobei 43a03de8d9 Update README.md 2019-06-15 14:19:46 +03:00
Ivan Vorobei 621bdb3e05 Update README.md 2019-06-15 14:19:18 +03:00
Ivan Vorobei d50ba88425 Update README.md 2019-06-15 14:19:00 +03:00
Ivan Vorobei 08b8422c26 Update README.md 2019-06-15 14:14:57 +03:00
Ivan Vorobei 9d13d508c6 Update scheme 2019-06-15 14:10:12 +03:00
Ivan Vorobei 6ae45f0568 Update README.md 2019-06-03 13:00:55 +03:00
Ivan Vorobei e5dbab65e1 Update README.md 2019-06-02 12:47:51 +03:00
Ivan Vorobei 07827b28a9 Update README.md 2019-06-02 12:21:24 +03:00
Ivan Vorobei 1dbd0ad54b Update README.md 2019-06-02 12:20:13 +03:00
Ivan Vorobei 49f2429633 Update README.md 2019-06-02 12:17:29 +03:00
Ivan Vorobei ef0a87e777 Update README.md 2019-06-02 11:59:53 +03:00
Ivan Vorobei b23a0b14e3 Update README.md 2019-06-02 11:57:05 +03:00
Ivan Vorobei a05b878af4 Update README.md 2019-06-02 11:56:40 +03:00
Ivan Vorobei 912c2d3903 Update README.md 2019-06-02 11:54:44 +03:00
Ivan Vorobei 3716912bc5 Update README.md 2019-06-02 11:53:51 +03:00
Ivan Vorobei ec9e174e14 Update README.md 2019-06-02 11:52:54 +03:00
Ivan Vorobei 6b98bf40c2 Update README.md 2019-06-02 11:51:51 +03:00
Ivan Vorobei 1167ca0a0d Update README.md 2019-06-02 11:50:46 +03:00
Ivan Vorobei c8c565d4ec Update README.md 2019-06-02 11:50:02 +03:00
Ivan Vorobei be0be7585b Update README.md 2019-06-02 11:46:52 +03:00
Ivan Vorobei c241629ea6 Update README.md 2019-06-02 11:44:35 +03:00
Ivan Vorobei 46afa63dbd Update README.md 2019-06-01 22:53:10 +03:00
Ivan Vorobei 682ab6127f Update README.md 2019-05-29 18:33:14 +03:00
Ivan Vorobei 4d70e9ca26 Update README.md 2019-05-29 18:31:56 +03:00
Ivan Vorobei 7091a625f3 Update README.md 2019-05-29 18:30:57 +03:00
Ivan Vorobei 5a83c3d1f3 Update README.md 2019-05-29 18:30:01 +03:00
Ivan Vorobei ad0c6eaf62 Update README.md 2019-05-25 15:34:29 +03:00
Ivan Vorobei 1f96f32980 Update README.md 2019-05-25 14:29:58 +03:00
Ivan Vorobei 03b38dfa0e Update README.md 2019-05-25 14:16:31 +03:00
Ivan Vorobei 2c35358336 Update README.md 2019-05-25 14:09:32 +03:00
Ivan Vorobei 18626df942 Update README.md 2019-05-25 14:09:13 +03:00
Ivan Vorobei 1a716980c0 Update README.md 2019-05-25 14:08:38 +03:00
Ivan Vorobei b5cf71046f Update FUNDING.yml 2019-05-24 22:00:23 +03:00
Ivan Vorobei 328d3739d6 Update README.md 2019-05-24 16:18:24 +03:00
Ivan Vorobei 2a858aa309 Update README.md 2019-05-24 16:17:33 +03:00
Ivan Vorobei f2937f6830 Update README.md 2019-05-24 12:57:20 +03:00
Ivan Vorobei c274892031 Update README.md 2019-05-24 12:57:03 +03:00
Ivan Vorobei 745968a053 Update README.md 2019-05-24 12:56:45 +03:00
Ivan Vorobei 4c90c708b7 Update README.md 2019-05-24 12:56:15 +03:00
Ivan Vorobei 871e96c1b9 Update README.md 2019-05-24 12:48:20 +03:00
Ivan Vorobei ad26638886 Update README.md 2019-05-24 12:48:01 +03:00
Ivan Vorobei 0306b46949 Update README.md 2019-05-24 12:47:34 +03:00
Ivan Vorobei 0f038463ed Update README.md 2019-05-24 12:46:56 +03:00
Ivan Vorobei ae01552b84 Update README.md 2019-05-24 12:46:37 +03:00
Ivan Vorobei 272bff5584 Update README.md 2019-05-24 12:45:50 +03:00
Ivan Vorobei 2adb5b4c88 Update README.md 2019-05-24 12:43:07 +03:00
Ivan Vorobei f930141a04 Update README.md 2019-05-24 12:42:50 +03:00
Ivan Vorobei 615fb4fcbc Update README.md 2019-05-24 12:42:15 +03:00
Ivan Vorobei 10dafb3853 Update README.md 2019-05-24 12:03:47 +03:00
Ivan Vorobei 7505c48033 Update README.md 2019-05-24 00:08:30 +03:00
Ivan Vorobei 35770b7362 Update README.md 2019-05-24 00:08:14 +03:00
Ivan Vorobei d478decba7 Update FUNDING.yml 2019-05-23 23:54:08 +03:00
Ivan Vorobei 51bb03327c Create FUNDING.yml 2019-05-23 23:27:59 +03:00
Ivan Vorobei f23eacf2ad Update README.md 2019-05-17 17:51:34 +03:00
Ivan Vorobei 04c9b77c75 Update README.md 2019-05-17 17:46:38 +03:00
Ivan Vorobei e7e83b5ad2 Update README.md 2019-05-17 17:46:01 +03:00
Ivan Vorobei 5911771ec9 Update README.md 2019-05-11 21:29:50 +03:00
Ivan Vorobei 6c1070848f Update README.md 2019-05-09 11:07:06 +03:00
Ivan Vorobei c18e8b8faf Update to 1.6.5
Fix bug with size `presentedView` when present other controller.
2019-05-08 18:14:35 +03:00
Ivan Vorobei 1d03424ab4 Update README.md 2019-05-08 11:20:34 +03:00
Ivan Vorobei 66556da572 Update README.md 2019-05-08 11:19:55 +03:00
Ivan Vorobei 6ebcfa59e9 Add Preview 2019-05-08 11:18:24 +03:00
Ivan Vorobei f6a2c31e2f Delete Preview.gif 2019-05-08 11:18:01 +03:00
Ivan Vorobei be3eb3f3a7 Update Preview 2019-05-08 11:16:57 +03:00
Ivan Vorobei a821389fee Update to 1.6.4
Update scale for parent controller. Update public method.
2019-05-07 13:43:50 +03:00
Ivan Vorobei e057aadaf1 Update public method 2019-05-07 13:43:05 +03:00
Ivan Vorobei 4c95e0ed3f Fix width
Reduce 1px of width parrent controller
2019-05-06 12:40:46 +03:00
41 changed files with 449 additions and 250 deletions
+8
View File
@@ -0,0 +1,8 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: ivanvorobei
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
custom: # https://xcode-shop.com
+108 -104
View File
@@ -11,6 +11,19 @@
F445CA8921AED92600184254 /* Controller.swift in Sources */ = {isa = PBXBuildFile; fileRef = F445CA8821AED92600184254 /* Controller.swift */; };
F445CA8E21AED92700184254 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F445CA8D21AED92700184254 /* Assets.xcassets */; };
F445CA9121AED92700184254 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F445CA8F21AED92700184254 /* LaunchScreen.storyboard */; };
F458C41C22B9F42600E1C366 /* SPStorkHaptic.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C40A22B9F42600E1C366 /* SPStorkHaptic.swift */; };
F458C41D22B9F42600E1C366 /* SPStorkSeque.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C40B22B9F42600E1C366 /* SPStorkSeque.swift */; };
F458C41E22B9F42600E1C366 /* SPStorkCodeDraw.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C40D22B9F42600E1C366 /* SPStorkCodeDraw.swift */; };
F458C41F22B9F42600E1C366 /* SPStorkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C40E22B9F42600E1C366 /* SPStorkController.swift */; };
F458C42022B9F42600E1C366 /* SPStorkTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C41022B9F42600E1C366 /* SPStorkTransitioningDelegate.swift */; };
F458C42122B9F42600E1C366 /* SPStorkPresentingAnimationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C41122B9F42600E1C366 /* SPStorkPresentingAnimationController.swift */; };
F458C42222B9F42600E1C366 /* SPStorkPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C41222B9F42600E1C366 /* SPStorkPresentationController.swift */; };
F458C42322B9F42600E1C366 /* SPStorkDismissingAnimationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C41322B9F42600E1C366 /* SPStorkDismissingAnimationController.swift */; };
F458C42422B9F42600E1C366 /* SPStorkViewControllerExtenshion.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C41522B9F42600E1C366 /* SPStorkViewControllerExtenshion.swift */; };
F458C42522B9F42600E1C366 /* SPStorkCloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C41722B9F42600E1C366 /* SPStorkCloseButton.swift */; };
F458C42622B9F42600E1C366 /* SPStorkIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C41822B9F42600E1C366 /* SPStorkIndicatorView.swift */; };
F458C42722B9F42600E1C366 /* SPStorkCloseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C41922B9F42600E1C366 /* SPStorkCloseView.swift */; };
F458C42822B9F42600E1C366 /* SPStorkControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458C41B22B9F42600E1C366 /* SPStorkControllerDelegate.swift */; };
F459D75B21C3AB9A00798524 /* ModalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F459D75A21C3AB9A00798524 /* ModalViewController.swift */; };
F459D75D21C3ABBD00798524 /* ModalTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F459D75C21C3ABBD00798524 /* ModalTableViewController.swift */; };
F4DB849622609C05005082AA /* SPVibration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83F522609C03005082AA /* SPVibration.swift */; };
@@ -133,18 +146,6 @@
F4DB850B22609C05005082AA /* SPRandom.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB849122609C04005082AA /* SPRandom.swift */; };
F4DB850C22609C05005082AA /* SPDelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB849322609C04005082AA /* SPDelay.swift */; };
F4DB850D22609C05005082AA /* SPShare.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB849522609C04005082AA /* SPShare.swift */; };
F4F33BD822802AA100199EBE /* SPStorkHaptic.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BC722802AA100199EBE /* SPStorkHaptic.swift */; };
F4F33BD922802AA100199EBE /* SPStorkCodeDraw.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BC922802AA100199EBE /* SPStorkCodeDraw.swift */; };
F4F33BDA22802AA100199EBE /* SPStorkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BCA22802AA100199EBE /* SPStorkController.swift */; };
F4F33BDB22802AA100199EBE /* SPStorkTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BCC22802AA100199EBE /* SPStorkTransitioningDelegate.swift */; };
F4F33BDC22802AA100199EBE /* SPStorkPresentingAnimationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BCD22802AA100199EBE /* SPStorkPresentingAnimationController.swift */; };
F4F33BDD22802AA100199EBE /* SPStorkPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BCE22802AA100199EBE /* SPStorkPresentationController.swift */; };
F4F33BDE22802AA100199EBE /* SPStorkDismissingAnimationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BCF22802AA100199EBE /* SPStorkDismissingAnimationController.swift */; };
F4F33BDF22802AA100199EBE /* SPStorkViewControllerExtenshion.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BD122802AA100199EBE /* SPStorkViewControllerExtenshion.swift */; };
F4F33BE022802AA100199EBE /* SPStorkCloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BD322802AA100199EBE /* SPStorkCloseButton.swift */; };
F4F33BE122802AA100199EBE /* SPStorkIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BD422802AA100199EBE /* SPStorkIndicatorView.swift */; };
F4F33BE222802AA100199EBE /* SPStorkCloseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BD522802AA100199EBE /* SPStorkCloseView.swift */; };
F4F33BE322802AA100199EBE /* SPStorkControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BD722802AA100199EBE /* SPStorkControllerDelegate.swift */; };
F4F33BE722802AB000199EBE /* SPFakeBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BE522802AB000199EBE /* SPFakeBarView.swift */; };
F4F33BE822802AB000199EBE /* SPFakeBarNavigationStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F33BE622802AB000199EBE /* SPFakeBarNavigationStyle.swift */; };
/* End PBXBuildFile section */
@@ -156,6 +157,19 @@
F445CA8D21AED92700184254 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
F445CA9021AED92700184254 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
F445CA9221AED92700184254 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
F458C40A22B9F42600E1C366 /* SPStorkHaptic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkHaptic.swift; sourceTree = "<group>"; };
F458C40B22B9F42600E1C366 /* SPStorkSeque.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkSeque.swift; sourceTree = "<group>"; };
F458C40D22B9F42600E1C366 /* SPStorkCodeDraw.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCodeDraw.swift; sourceTree = "<group>"; };
F458C40E22B9F42600E1C366 /* SPStorkController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkController.swift; sourceTree = "<group>"; };
F458C41022B9F42600E1C366 /* SPStorkTransitioningDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkTransitioningDelegate.swift; sourceTree = "<group>"; };
F458C41122B9F42600E1C366 /* SPStorkPresentingAnimationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkPresentingAnimationController.swift; sourceTree = "<group>"; };
F458C41222B9F42600E1C366 /* SPStorkPresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkPresentationController.swift; sourceTree = "<group>"; };
F458C41322B9F42600E1C366 /* SPStorkDismissingAnimationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkDismissingAnimationController.swift; sourceTree = "<group>"; };
F458C41522B9F42600E1C366 /* SPStorkViewControllerExtenshion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkViewControllerExtenshion.swift; sourceTree = "<group>"; };
F458C41722B9F42600E1C366 /* SPStorkCloseButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCloseButton.swift; sourceTree = "<group>"; };
F458C41822B9F42600E1C366 /* SPStorkIndicatorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkIndicatorView.swift; sourceTree = "<group>"; };
F458C41922B9F42600E1C366 /* SPStorkCloseView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCloseView.swift; sourceTree = "<group>"; };
F458C41B22B9F42600E1C366 /* SPStorkControllerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkControllerDelegate.swift; sourceTree = "<group>"; };
F459D75A21C3AB9A00798524 /* ModalViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalViewController.swift; sourceTree = "<group>"; };
F459D75C21C3ABBD00798524 /* ModalTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalTableViewController.swift; sourceTree = "<group>"; };
F4DB83F522609C03005082AA /* SPVibration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPVibration.swift; sourceTree = "<group>"; };
@@ -278,18 +292,6 @@
F4DB849122609C04005082AA /* SPRandom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPRandom.swift; sourceTree = "<group>"; };
F4DB849322609C04005082AA /* SPDelay.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPDelay.swift; sourceTree = "<group>"; };
F4DB849522609C04005082AA /* SPShare.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPShare.swift; sourceTree = "<group>"; };
F4F33BC722802AA100199EBE /* SPStorkHaptic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkHaptic.swift; sourceTree = "<group>"; };
F4F33BC922802AA100199EBE /* SPStorkCodeDraw.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCodeDraw.swift; sourceTree = "<group>"; };
F4F33BCA22802AA100199EBE /* SPStorkController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkController.swift; sourceTree = "<group>"; };
F4F33BCC22802AA100199EBE /* SPStorkTransitioningDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkTransitioningDelegate.swift; sourceTree = "<group>"; };
F4F33BCD22802AA100199EBE /* SPStorkPresentingAnimationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkPresentingAnimationController.swift; sourceTree = "<group>"; };
F4F33BCE22802AA100199EBE /* SPStorkPresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkPresentationController.swift; sourceTree = "<group>"; };
F4F33BCF22802AA100199EBE /* SPStorkDismissingAnimationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkDismissingAnimationController.swift; sourceTree = "<group>"; };
F4F33BD122802AA100199EBE /* SPStorkViewControllerExtenshion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkViewControllerExtenshion.swift; sourceTree = "<group>"; };
F4F33BD322802AA100199EBE /* SPStorkCloseButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCloseButton.swift; sourceTree = "<group>"; };
F4F33BD422802AA100199EBE /* SPStorkIndicatorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkIndicatorView.swift; sourceTree = "<group>"; };
F4F33BD522802AA100199EBE /* SPStorkCloseView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCloseView.swift; sourceTree = "<group>"; };
F4F33BD722802AA100199EBE /* SPStorkControllerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkControllerDelegate.swift; sourceTree = "<group>"; };
F4F33BE522802AB000199EBE /* SPFakeBarView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPFakeBarView.swift; sourceTree = "<group>"; };
F4F33BE622802AB000199EBE /* SPFakeBarNavigationStyle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPFakeBarNavigationStyle.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -340,13 +342,81 @@
F445CA9821AED98500184254 /* Frameworks */ = {
isa = PBXGroup;
children = (
F458C40822B9F42600E1C366 /* SPStorkController */,
F4F33BE422802AB000199EBE /* SPFakeBar */,
F4F33BC522802AA100199EBE /* SPStorkController */,
F4DB83F322609C03005082AA /* SparrowKit */,
);
path = Frameworks;
sourceTree = "<group>";
};
F458C40822B9F42600E1C366 /* SPStorkController */ = {
isa = PBXGroup;
children = (
F458C40922B9F42600E1C366 /* Models */,
F458C40B22B9F42600E1C366 /* SPStorkSeque.swift */,
F458C40C22B9F42600E1C366 /* CodeDraw */,
F458C40E22B9F42600E1C366 /* SPStorkController.swift */,
F458C40F22B9F42600E1C366 /* TransitioningDelegate */,
F458C41422B9F42600E1C366 /* Extenshion */,
F458C41622B9F42600E1C366 /* Views */,
F458C41A22B9F42600E1C366 /* Protocols */,
);
path = SPStorkController;
sourceTree = "<group>";
};
F458C40922B9F42600E1C366 /* Models */ = {
isa = PBXGroup;
children = (
F458C40A22B9F42600E1C366 /* SPStorkHaptic.swift */,
);
path = Models;
sourceTree = "<group>";
};
F458C40C22B9F42600E1C366 /* CodeDraw */ = {
isa = PBXGroup;
children = (
F458C40D22B9F42600E1C366 /* SPStorkCodeDraw.swift */,
);
path = CodeDraw;
sourceTree = "<group>";
};
F458C40F22B9F42600E1C366 /* TransitioningDelegate */ = {
isa = PBXGroup;
children = (
F458C41022B9F42600E1C366 /* SPStorkTransitioningDelegate.swift */,
F458C41122B9F42600E1C366 /* SPStorkPresentingAnimationController.swift */,
F458C41222B9F42600E1C366 /* SPStorkPresentationController.swift */,
F458C41322B9F42600E1C366 /* SPStorkDismissingAnimationController.swift */,
);
path = TransitioningDelegate;
sourceTree = "<group>";
};
F458C41422B9F42600E1C366 /* Extenshion */ = {
isa = PBXGroup;
children = (
F458C41522B9F42600E1C366 /* SPStorkViewControllerExtenshion.swift */,
);
path = Extenshion;
sourceTree = "<group>";
};
F458C41622B9F42600E1C366 /* Views */ = {
isa = PBXGroup;
children = (
F458C41722B9F42600E1C366 /* SPStorkCloseButton.swift */,
F458C41822B9F42600E1C366 /* SPStorkIndicatorView.swift */,
F458C41922B9F42600E1C366 /* SPStorkCloseView.swift */,
);
path = Views;
sourceTree = "<group>";
};
F458C41A22B9F42600E1C366 /* Protocols */ = {
isa = PBXGroup;
children = (
F458C41B22B9F42600E1C366 /* SPStorkControllerDelegate.swift */,
);
path = Protocols;
sourceTree = "<group>";
};
F4DB83F322609C03005082AA /* SparrowKit */ = {
isa = PBXGroup;
children = (
@@ -810,73 +880,6 @@
path = Share;
sourceTree = "<group>";
};
F4F33BC522802AA100199EBE /* SPStorkController */ = {
isa = PBXGroup;
children = (
F4F33BC622802AA100199EBE /* Models */,
F4F33BC822802AA100199EBE /* CodeDraw */,
F4F33BCA22802AA100199EBE /* SPStorkController.swift */,
F4F33BCB22802AA100199EBE /* TransitioningDelegate */,
F4F33BD022802AA100199EBE /* Extenshion */,
F4F33BD222802AA100199EBE /* Views */,
F4F33BD622802AA100199EBE /* Protocols */,
);
path = SPStorkController;
sourceTree = "<group>";
};
F4F33BC622802AA100199EBE /* Models */ = {
isa = PBXGroup;
children = (
F4F33BC722802AA100199EBE /* SPStorkHaptic.swift */,
);
path = Models;
sourceTree = "<group>";
};
F4F33BC822802AA100199EBE /* CodeDraw */ = {
isa = PBXGroup;
children = (
F4F33BC922802AA100199EBE /* SPStorkCodeDraw.swift */,
);
path = CodeDraw;
sourceTree = "<group>";
};
F4F33BCB22802AA100199EBE /* TransitioningDelegate */ = {
isa = PBXGroup;
children = (
F4F33BCC22802AA100199EBE /* SPStorkTransitioningDelegate.swift */,
F4F33BCD22802AA100199EBE /* SPStorkPresentingAnimationController.swift */,
F4F33BCE22802AA100199EBE /* SPStorkPresentationController.swift */,
F4F33BCF22802AA100199EBE /* SPStorkDismissingAnimationController.swift */,
);
path = TransitioningDelegate;
sourceTree = "<group>";
};
F4F33BD022802AA100199EBE /* Extenshion */ = {
isa = PBXGroup;
children = (
F4F33BD122802AA100199EBE /* SPStorkViewControllerExtenshion.swift */,
);
path = Extenshion;
sourceTree = "<group>";
};
F4F33BD222802AA100199EBE /* Views */ = {
isa = PBXGroup;
children = (
F4F33BD322802AA100199EBE /* SPStorkCloseButton.swift */,
F4F33BD422802AA100199EBE /* SPStorkIndicatorView.swift */,
F4F33BD522802AA100199EBE /* SPStorkCloseView.swift */,
);
path = Views;
sourceTree = "<group>";
};
F4F33BD622802AA100199EBE /* Protocols */ = {
isa = PBXGroup;
children = (
F4F33BD722802AA100199EBE /* SPStorkControllerDelegate.swift */,
);
path = Protocols;
sourceTree = "<group>";
};
F4F33BE422802AB000199EBE /* SPFakeBar */ = {
isa = PBXGroup;
children = (
@@ -960,7 +963,6 @@
F4DB84D722609C05005082AA /* SPUIImageExtension.swift in Sources */,
F4DB84FF22609C05005082AA /* SPViber.swift in Sources */,
F4DB84D122609C05005082AA /* SPTypes.swift in Sources */,
F4F33BE122802AA100199EBE /* SPStorkIndicatorView.swift in Sources */,
F4DB84FA22609C05005082AA /* SPAnimationAlpha.swift in Sources */,
F4DB84C822609C05005082AA /* SPController.swift in Sources */,
F4DB849B22609C05005082AA /* SPFormTextFiledTableViewCell.swift in Sources */,
@@ -972,43 +974,47 @@
F4DB849622609C05005082AA /* SPVibration.swift in Sources */,
F4DB850522609C05005082AA /* SPCodeAudioIconPack.swift in Sources */,
F4DB849922609C05005082AA /* SPFormMailTableViewCell.swift in Sources */,
F458C42122B9F42600E1C366 /* SPStorkPresentingAnimationController.swift in Sources */,
F4DB850822609C05005082AA /* SPCodeDraw.swift in Sources */,
F4DB84D622609C05005082AA /* SPUIFontExtenshion.swift in Sources */,
F4DB84A722609C05005082AA /* SPAppleMusicSectionButtonsView.swift in Sources */,
F4DB84FC22609C05005082AA /* SPDownloader.swift in Sources */,
F4F33BE822802AB000199EBE /* SPFakeBarNavigationStyle.swift in Sources */,
F4DB84CF22609C05005082AA /* SPImagesCollectionView.swift in Sources */,
F458C41F22B9F42600E1C366 /* SPStorkController.swift in Sources */,
F4DB84A622609C05005082AA /* SPSocialButton.swift in Sources */,
F4DB84E022609C05005082AA /* SPUICollectionViewExtenshion.swift in Sources */,
F458C41E22B9F42600E1C366 /* SPStorkCodeDraw.swift in Sources */,
F4DB84E222609C05005082AA /* SPUITabBarControllerExtenshion.swift in Sources */,
F4DB84A122609C05005082AA /* SPProposeTableViewCell.swift in Sources */,
F458C42522B9F42600E1C366 /* SPStorkCloseButton.swift in Sources */,
F4DB849D22609C05005082AA /* SPFormTextInputTableViewCell.swift in Sources */,
F4DB84A222609C05005082AA /* SPBaseContentTableViewCell.swift in Sources */,
F4DB84FD22609C05005082AA /* SPBufer.swift in Sources */,
F4DB850622609C05005082AA /* SPCodeSocialIconPack.swift in Sources */,
F4DB84D222609C05005082AA /* SPLocale.swift in Sources */,
F4DB84B922609C05005082AA /* SPSeparatorView.swift in Sources */,
F458C42022B9F42600E1C366 /* SPStorkTransitioningDelegate.swift in Sources */,
F4DB84A822609C05005082AA /* SPDotsButton.swift in Sources */,
F4DB84FB22609C05005082AA /* SPAnimation.swift in Sources */,
F458C42222B9F42600E1C366 /* SPStorkPresentationController.swift in Sources */,
F4DB84F722609C05005082AA /* SPShadowDeep.swift in Sources */,
F4DB84BF22609C05005082AA /* SPCenterLabelsView.swift in Sources */,
F4DB84C522609C05005082AA /* SPNativeTableController.swift in Sources */,
F445CA8921AED92600184254 /* Controller.swift in Sources */,
F4DB84AA22609C05005082AA /* SPNativeLargeButton.swift in Sources */,
F4DB84E522609C05005082AA /* SPUILabelExtenshion.swift in Sources */,
F458C41D22B9F42600E1C366 /* SPStorkSeque.swift in Sources */,
F4DB84CC22609C05005082AA /* SPCollectionViewLayout.swift in Sources */,
F4DB850022609C05005082AA /* SPTelegram.swift in Sources */,
F4DB84A922609C05005082AA /* SPSystemIconButton.swift in Sources */,
F4DB84DA22609C05005082AA /* SPArrayExtension.swift in Sources */,
F4DB84BC22609C05005082AA /* SPEmptyLabelsView.swift in Sources */,
F4F33BDE22802AA100199EBE /* SPStorkDismissingAnimationController.swift in Sources */,
F4DB84B122609C05005082AA /* SPScrollView.swift in Sources */,
F4DB84CB22609C05005082AA /* SPImageCollectionViewCell.swift in Sources */,
F4DB84F322609C05005082AA /* SPLocalNotification.swift in Sources */,
F4DB84BD22609C05005082AA /* SPSectionLabelsView.swift in Sources */,
F4F33BD922802AA100199EBE /* SPStorkCodeDraw.swift in Sources */,
F4DB84C222609C05005082AA /* SPSystemIconView.swift in Sources */,
F4F33BE322802AA100199EBE /* SPStorkControllerDelegate.swift in Sources */,
F4DB84C922609C05005082AA /* SPCollectionViewCell.swift in Sources */,
F4DB84E322609C05005082AA /* SPUINavigationControllerExtenshion.swift in Sources */,
F4DB84B822609C05005082AA /* SPGradientView.swift in Sources */,
@@ -1021,6 +1027,7 @@
F4DB84E122609C05005082AA /* SPTextFieldExtenshion.swift in Sources */,
F4DB84B622609C05005082AA /* SPDownloadingUIImageView.swift in Sources */,
F4DB849E22609C05005082AA /* SPFormTextTableViewCell.swift in Sources */,
F458C42622B9F42600E1C366 /* SPStorkIndicatorView.swift in Sources */,
F4DB84C622609C05005082AA /* SPTableController.swift in Sources */,
F4DB84C122609C05005082AA /* SPSocialIconView.swift in Sources */,
F4DB84C022609C05005082AA /* SPAudioIconView.swift in Sources */,
@@ -1034,31 +1041,30 @@
F4DB84D822609C05005082AA /* SPUITableView.swift in Sources */,
F4DB84EA22609C05005082AA /* SPUIButtonExtenshion.swift in Sources */,
F459D75D21C3ABBD00798524 /* ModalTableViewController.swift in Sources */,
F4F33BE022802AA100199EBE /* SPStorkCloseButton.swift in Sources */,
F4DB850922609C05005082AA /* SPGolubevGolubevIconPack.swift in Sources */,
F4DB84BA22609C05005082AA /* SPVideoPlayer.swift in Sources */,
F4DB84A322609C05005082AA /* SPTableViewCell.swift in Sources */,
F4DB849F22609C05005082AA /* SPMengTransformTableViewCell.swift in Sources */,
F4DB849C22609C05005082AA /* SPFormFeaturedTitleTableViewCell.swift in Sources */,
F4DB84ED22609C05005082AA /* SPAppBadge.swift in Sources */,
F458C42322B9F42600E1C366 /* SPStorkDismissingAnimationController.swift in Sources */,
F4DB84F422609C05005082AA /* SPMail.swift in Sources */,
F4DB84EF22609C05005082AA /* SPNativeColors.swift in Sources */,
F4DB850B22609C05005082AA /* SPRandom.swift in Sources */,
F4DB84B422609C05005082AA /* SPTextView.swift in Sources */,
F4DB84F022609C05005082AA /* SPConstraints.swift in Sources */,
F4F33BDC22802AA100199EBE /* SPStorkPresentingAnimationController.swift in Sources */,
F4DB84B022609C05005082AA /* SPImageView.swift in Sources */,
F4DB84D922609C05005082AA /* SPUIViewExtenshion.swift in Sources */,
F4F33BDA22802AA100199EBE /* SPStorkController.swift in Sources */,
F4DB850122609C05005082AA /* SPInstagram.swift in Sources */,
F4DB84E922609C05005082AA /* SPUIColorExtension.swift in Sources */,
F4DB84D022609C05005082AA /* SPPageCollectionView.swift in Sources */,
F4DB84D522609C05005082AA /* SPUITextFieldExtenshion.swift in Sources */,
F4DB849822609C05005082AA /* SPFormButtonTableViewCell.swift in Sources */,
F4F33BD822802AA100199EBE /* SPStorkHaptic.swift in Sources */,
F458C41C22B9F42600E1C366 /* SPStorkHaptic.swift in Sources */,
F4DB84CD22609C05005082AA /* SPMengTransformCollectionView.swift in Sources */,
F445CA8721AED92600184254 /* AppDelegate.swift in Sources */,
F4DB84A422609C05005082AA /* SPTableView.swift in Sources */,
F458C42422B9F42600E1C366 /* SPStorkViewControllerExtenshion.swift in Sources */,
F4DB850D22609C05005082AA /* SPShare.swift in Sources */,
F459D75B21C3AB9A00798524 /* ModalViewController.swift in Sources */,
F4DB84C722609C05005082AA /* SPStatusBarManagerController.swift in Sources */,
@@ -1070,25 +1076,23 @@
F4DB84BE22609C05005082AA /* SPLabel.swift in Sources */,
F4DB84E822609C05005082AA /* SPUIImageViewExtenshion.swift in Sources */,
F4DB84D422609C05005082AA /* SPUITableViewCellExtenshion.swift in Sources */,
F458C42722B9F42600E1C366 /* SPStorkCloseView.swift in Sources */,
F4DB84AB22609C05005082AA /* SPDownloadingButton.swift in Sources */,
F4F33BDB22802AA100199EBE /* SPStorkTransitioningDelegate.swift in Sources */,
F4F33BE722802AB000199EBE /* SPFakeBarView.swift in Sources */,
F4DB84B522609C05005082AA /* SPGradeBlurView.swift in Sources */,
F4DB84DD22609C05005082AA /* SPStringExtenshion.swift in Sources */,
F4DB84A522609C05005082AA /* SPPlayCircleButton.swift in Sources */,
F4DB84FE22609C05005082AA /* SPTwitter.swift in Sources */,
F4F33BDD22802AA100199EBE /* SPStorkPresentationController.swift in Sources */,
F4DB84DB22609C05005082AA /* SPUserDefaultsExtenshion.swift in Sources */,
F4DB849A22609C05005082AA /* SPFormLabelTableViewCell.swift in Sources */,
F4DB84AD22609C05005082AA /* SPCircleCloseButton.swift in Sources */,
F4DB84AE22609C05005082AA /* SPAppStoreActionButton.swift in Sources */,
F4F33BDF22802AA100199EBE /* SPStorkViewControllerExtenshion.swift in Sources */,
F458C42822B9F42600E1C366 /* SPStorkControllerDelegate.swift in Sources */,
F4DB84BB22609C05005082AA /* SPBlurView.swift in Sources */,
F4DB850A22609C05005082AA /* SPDevice.swift in Sources */,
F4DB84B322609C05005082AA /* SPTextField.swift in Sources */,
F4DB84F122609C05005082AA /* SPLocalAuthentication.swift in Sources */,
F4DB84DE22609C05005082AA /* SPStrideableExtension.swift in Sources */,
F4F33BE222802AA100199EBE /* SPStorkCloseView.swift in Sources */,
F4DB84F922609C05005082AA /* SPAnimationSpring.swift in Sources */,
F4DB84E722609C05005082AA /* SPCGSizeExtenshion.swift in Sources */,
F4DB84F522609C05005082AA /* SPLayout.swift in Sources */,
@@ -1,93 +1,111 @@
{
"images" : [
{
"idiom" : "iphone",
"size" : "20x20",
"idiom" : "iphone",
"filename" : "icon_20pt@2x.png",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "20x20",
"idiom" : "iphone",
"filename" : "icon_20pt@3x.png",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"idiom" : "iphone",
"filename" : "icon_29pt@2x.png",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"idiom" : "iphone",
"filename" : "icon_29pt@3x.png",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"idiom" : "iphone",
"filename" : "icon_40pt@2x.png",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"idiom" : "iphone",
"filename" : "icon_40pt@3x.png",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"idiom" : "iphone",
"filename" : "icon_60pt@2x.png",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"idiom" : "iphone",
"filename" : "icon_60pt@3x.png",
"scale" : "3x"
},
{
"idiom" : "ipad",
"size" : "20x20",
"idiom" : "ipad",
"filename" : "icon_20pt.png",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "20x20",
"idiom" : "ipad",
"filename" : "icon_20pt@2x-1.png",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"idiom" : "ipad",
"filename" : "icon_29pt.png",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"idiom" : "ipad",
"filename" : "icon_29pt@2x-1.png",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"idiom" : "ipad",
"filename" : "icon_40pt.png",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"idiom" : "ipad",
"filename" : "icon_40pt@2x-1.png",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "76x76",
"idiom" : "ipad",
"filename" : "icon_76pt.png",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "76x76",
"idiom" : "ipad",
"filename" : "icon_76pt@2x.png",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "icon_83.5@2x.png",
"scale" : "2x"
},
{
"idiom" : "ios-marketing",
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon.png",
"scale" : "1x"
}
],
Binary file not shown.

After

Width:  |  Height:  |  Size: 483 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -38,12 +38,11 @@ extension UIViewController {
self.present(controller, animated: true, completion: nil)
}
public func presentAsStork(_ controller: UIViewController, height: CGFloat?, showIndicator: Bool, hideIndicatorWhenScroll: Bool, showCloseButton: Bool, complection: (() -> Void)?) {
public func presentAsStork(_ controller: UIViewController, height: CGFloat?, showIndicator: Bool, showCloseButton: Bool, complection: (() -> Void)? = nil) {
let transitionDelegate = SPStorkTransitioningDelegate()
transitionDelegate.customHeight = height
transitionDelegate.showCloseButton = showCloseButton
transitionDelegate.showIndicator = showIndicator
transitionDelegate.hideIndicatorWhenScroll = hideIndicatorWhenScroll
controller.transitioningDelegate = transitionDelegate
controller.modalPresentationStyle = .custom
controller.modalPresentationCapturesStatusBarAppearance = true
@@ -21,7 +21,7 @@
import UIKit
public struct SPStorkController {
public enum SPStorkController {
static public func scrollViewDidScroll(_ scrollView: UIScrollView) {
if let controller = self.controller(for: scrollView) {
@@ -81,6 +81,4 @@ public struct SPStorkController {
}
return nextResponder as? UIViewController
}
private init() {}
}
@@ -0,0 +1,34 @@
// The MIT License (MIT)
// Copyright © 2017 Ivan Vorobei (hello@ivanvorobei.by)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
import UIKit
public class SPStorkSegue: UIStoryboardSegue {
public var transitioningDelegate: SPStorkTransitioningDelegate?
override public func perform() {
transitioningDelegate = transitioningDelegate ?? SPStorkTransitioningDelegate()
destination.transitioningDelegate = transitioningDelegate
destination.modalPresentationStyle = .custom
super.perform()
}
}
@@ -64,12 +64,20 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
private var scaleForPresentingView: CGFloat {
guard let containerView = containerView else { return 0 }
let factor = 1 - ((self.cornerRadius + 2) * 2 / containerView.frame.width)
let factor = 1 - ((self.cornerRadius + 3) * 2 / containerView.frame.width)
return factor
}
private var feedbackGenerator: UIImpactFeedbackGenerator = UIImpactFeedbackGenerator(style: .light)
override var presentedView: UIView? {
let view = self.presentedViewController.view
if view?.frame.origin == CGPoint.zero {
view?.frame = self.frameOfPresentedViewInContainerView
}
return view
}
override var frameOfPresentedViewInContainerView: CGRect {
guard let containerView = containerView else { return .zero }
let baseY: CGFloat = self.topSpace + 13
@@ -101,6 +109,11 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
tap.cancelsTouchesInView = false
self.indicatorView.addGestureRecognizer(tap)
presentedView.addSubview(self.indicatorView)
self.indicatorView.translatesAutoresizingMaskIntoConstraints = false
self.indicatorView.widthAnchor.constraint(equalToConstant: 36).isActive = true
self.indicatorView.heightAnchor.constraint(equalToConstant: 13).isActive = true
self.indicatorView.centerXAnchor.constraint(equalTo: presentedView.centerXAnchor).isActive = true
self.indicatorView.topAnchor.constraint(equalTo: presentedView.topAnchor, constant: 12).isActive = true
}
self.updateLayoutIndicator()
self.indicatorView.style = .arrow
@@ -429,10 +442,7 @@ extension SPStorkPresentationController {
guard let containerView = containerView else { return }
self.updateSnapshotAspectRatio()
if presentedViewController.view.isDescendant(of: containerView) {
UIView.animate(withDuration: 0.1) { [weak self] in
guard let `self` = self else { return }
self.presentedViewController.view.frame = self.frameOfPresentedViewInContainerView
}
self.presentedViewController.view.frame = self.frameOfPresentedViewInContainerView
}
}
@@ -448,11 +458,10 @@ extension SPStorkPresentationController {
}
private func updateLayoutIndicator() {
guard let presentedView = self.presentedView else { return }
self.indicatorView.style = .line
self.indicatorView.sizeToFit()
self.indicatorView.frame.origin.y = 12
self.indicatorView.center.x = presentedView.frame.width / 2
//self.indicatorView.frame.origin.y = 12
//self.indicatorView.center.x = presentedView.frame.width / 2
}
private func updateLayoutCloseButton() {
+3 -1
View File
@@ -5,7 +5,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>StorkController</string>
<string>SPStork</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
@@ -41,5 +41,7 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
</dict>
</plist>
@@ -4,7 +4,10 @@ class ModalTableViewController: UIViewController {
let navBar = SPFakeBarView(style: .stork)
let tableView = UITableView()
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
var lightStatusBar: Bool = false
override var preferredStatusBarStyle: UIStatusBarStyle {
return self.lightStatusBar ? .lightContent : .default
}
private var data = ["Assembly", "C", "C++", "Java", "JavaScript", "Php", "Python", "Swift", "Kotlin", "Assembly", "C", "C++", "Java", "JavaScript", "Php", "Python", "Objective-C", "Swift", "Kotlin", "Assembly", "C", "C++", "Java", "JavaScript", "Php", "Python", "Objective-C"]
@@ -28,6 +31,14 @@ class ModalTableViewController: UIViewController {
self.updateLayout(with: self.view.frame.size)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.lightStatusBar = true
UIView.animate(withDuration: 0.3) { () -> Void in
self.setNeedsStatusBarAppearanceUpdate()
}
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
self.updateLayout(with: self.view.frame.size)
@@ -3,7 +3,10 @@ import UIKit
class ModalViewController: UIViewController {
let navBar = SPFakeBarView(style: .stork)
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
var lightStatusBar: Bool = false
override var preferredStatusBarStyle: UIStatusBarStyle {
return self.lightStatusBar ? .lightContent : .default
}
override func viewDidLoad() {
super.viewDidLoad()
@@ -19,5 +22,13 @@ class ModalViewController: UIViewController {
@objc func dismissAction() {
self.dismiss()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.lightStatusBar = true
UIView.animate(withDuration: 0.3) { () -> Void in
self.setNeedsStatusBarAppearanceUpdate()
}
}
}
+85 -32
View File
@@ -1,12 +1,19 @@
# SPStorkController
Very similar to the modal **controller displayed in Apple Music, Podcasts and Mail** apps. Customizable height of view. Check scroll's bounce for more interactive. Simple adding close button and centering arrow indicator. You can download example [Debts - Spending tracker](https://itunes.apple.com/app/id1446635818) or [Code - Learn Swift & Design](https://itunes.apple.com/app/id1453325619) apps from AppStore. If you like the project, do not forget to **put star ★**
<a href="https://itunes.apple.com/app/id1446635818" target="_blank"><img align="left" src="https://github.com/ivanvorobei/SPStorkController/blob/master/Resources/Preview.gif" width="400"/></a>
### Preview
### About
Controller **as in Apple Music, Podcasts and Mail** apps. Simple adding close button and centering arrow indicator. Customizable height. Using custom `TransitionDelegate`. Alert you can find in [SPAlert](https://github.com/IvanVorobei/SPAlert) project.
<img src="https://github.com/IvanVorobei/SPStorkController/blob/master/Resources/Preview.gif" width="440">
You can download example [Debts - Spending tracker](https://itunes.apple.com/app/id1446635818) app from AppStore. For **buy source code** of app in preview, go to:
If you want to **buy source code** of this apps, please, go to [xcode-shop.com](https://xcode-shop.com).
[![xcode-shop.com](https://github.com/ivanvorobei/SPPermission/blob/master/Resources/Buttons/Xcode%20Shop%20Button%20-%203.svg)](https://xcode-shop.com)
If you like the project, do not forget to `put star ★` or follow me in twitter:
[![https://twitter.com/varabeis](https://github.com/ivanvorobei/SPPermission/blob/master/Resources/Buttons/Twitter-2.svg)](https://twitter.com/varabeis)
See project's backers in [Sponsors](https://github.com/ivanvorobei/SPStorkController#sponsors) section.
## Navigate
@@ -26,18 +33,20 @@ If you want to **buy source code** of this apps, please, go to [xcode-shop.com](
- [Working with UIScrollView](#working-with-uiscrollview)
- [UITableView & UICollectionView](#working-with-uitableview--uicollectionview)
- [Delegate](#delegate)
- [Video Tutorial](#video-tutorial)
- [Other Projects (+gif)](#my-projects)
- [Storyboard](#storyboard)
- [Sheets in iOS 13](#sheets-in-ios-13)
- [Sponsors](#sponsors)
- [Other Projects +gif](#my-projects)
- [SPAlert](#spalert)
- [SPLarkController](#splarkcontroller)
- [SPPermission](#sppermission)
- [Xcode Shop](#xcode-shop)
- [Awesome iOS UI](https://github.com/ivanvorobei/awesome-ios-ui)
- [License](#license)
- [Contact or Order Develop](#contact)
## Requirements
Swift 4.2 & **5.0**. Ready for use on iOS 10+
Swift `4.2` & `5.0`. Ready for use on iOS 10+
## Installation
@@ -54,7 +63,7 @@ pod 'SPStorkController'
[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate `SPStorkController` into your Xcode project using Carthage, specify it in your `Cartfile`:
```ogdl
github "IvanVorobei/SPStorkController"
github "ivanvorobei/SPStorkController"
```
### Manually
@@ -227,9 +236,9 @@ class ModalController: UIViewController {
You only need to add a navigation bar to the main view, it will automatically layout. Use style `.stork` in init of `SPFakeBarView`. Here is visual preview with Navigation Bar and without it:
<img src="https://github.com/IvanVorobei/SPStorkController/blob/master/Resources/Navigation%20Bar.jpg"/>
<img src="https://github.com/ivanvorobei/SPStorkController/blob/master/Resources/Navigation%20Bar.jpg"/>
To use it, you need to install [SPFakeBar](https://github.com/IvanVorobei/SPFakeBar) pod:
To use it, you need to install [SPFakeBar](https://github.com/ivanvorobei/SPFakeBar) pod:
```ruby
pod 'SPFakeBar'
@@ -277,9 +286,31 @@ protocol SPStorkControllerDelegate: class {
}
```
### Storyboard
If need using `SPStorkController` with storyboard, set class `SPStorkSegue` for transition setting in storyboard file. I will give the class code so that you understand what it does:
```swift
import UIKit
class SPStorkSegue: UIStoryboardSegue {
public var transitioningDelegate: SPStorkTransitioningDelegate?
override func perform() {
transitioningDelegate = transitioningDelegate ?? SPStorkTransitioningDelegate()
destination.transitioningDelegate = transitioningDelegate
destination.modalPresentationStyle = .custom
super.perform()
}
}
```
Open your storyboard, choose transition and open right menu. Open `Attributes Inspector` and in Class section insert `SPStorkSegue`.
### Modal presentation of other controller
If you want to present modal controller on SPStorkController, please set:
If you want to present modal controller on `SPStorkController`, please set:
```swift
controller.modalPresentationStyle = .custom
@@ -287,46 +318,68 @@ controller.modalPresentationStyle = .custom
Its needed for correct presentation and dismissal of all modal controllers.
## Video Tutorial
### Stop scroll
You can see how to use `SPStorkController` and how to customize it [in this video](https://youtu.be/wOTNGswT2-0). For English speakers Ive added subtitles, dont forget to turn them on:
`SPStorkController` use snapshots. If the parent controller scrollings and you try to show `SPStorkController`, you will see how it froze, and in a second its final position is updated. I recommend to stop scrolling force:
[![Tutorial on YouTube](https://github.com/IvanVorobei/SPStorkController/blob/master/Resources/YouTube.jpg)](https://youtu.be/wOTNGswT2-0)
```swift
scrollView.setContentOffset(self.contentOffset, animated: false)
```
## Sheets in iOS 13
Apple present in `WWDC 2019` new modal presentation style - `Sheets`. It ready use Support interactive dismiss and work with navigations bars. Available since iOS 13. I will add more information when I study this in more detail. You can see presentation [here](https://developer.apple.com/videos/play/wwdc2019/224/).
<a href="https://developer.apple.com/videos/play/wwdc2019/224/" target="_blank"><img align="center" src="https://github.com/ivanvorobei/SPStorkController/blob/master/Resources/Sheets.png"/></a>
## Sponsors
Support me with a monthly donation and help me continue activities. After payment I add you to list of sponsor **in my all projects** with link to your profile. [Become a sponsors](https://www.patreon.com/ivanvorobei)
<a href="https://github.com/zubara21/" target="_blank"><img src="https://github.api.ivanvorobei.by/sponsors/zubara21.jpg" width="100"></a>
<a href="https://github.com/sparrowganz/" target="_blank"><img src="https://github.api.ivanvorobei.by/sponsors/sparrowganz.jpg" width="100"></a>
<a href="https://github.com/shatk0vskiy/" target="_blank"><img src="https://github.api.ivanvorobei.by/sponsors/shatk0vskiy.jpg" width="100"></a>
<a href="https://www.patreon.com/ivanvorobei" target="_blank"><img src="https://github.api.ivanvorobei.by/sponsors/add.jpg" width="100"></a>
## My projects
<img align="left" src="https://github.com/ivanvorobei/SPAlert/blob/master/Resources/Preview-Done.gif" width="220"/>
### SPAlert
Native popup [SPAlert](https://github.com/IvanVorobei/SPAlert) is **similar to Apple Music or Feedback in AppStore** app. Support animations. I tried to repeat Apple alert as much as possible.
[SPAlert](https://github.com/ivanvorobei/SPAlert) is **popup from Apple Music & Feedback in AppStore**. Contains `Done` & `Heart` presets. `Done` present with draw path animation. I clone Apple's alerts as much as possible.
You can find this alerts in AppStore after feedback, after added song to library in Apple Music. I am also add alert without icon, as simple message.
<p float="left">
<img src="https://github.com/IvanVorobei/SPAlert/blob/master/Resources/Preview-Done.gif" width="250">
<img src="https://github.com/IvanVorobei/SPAlert/blob/master/Resources/Preview-Heart.gif" width="250">
<img src="https://github.com/IvanVorobei/SPAlert/blob/master/Resources/Preview-Message.gif" width="250">
</p>
You can download example [Debts - Spending tracker](https://itunes.apple.com/app/id1446635818) app from AppStore. If you want to **buy source code** of app in preview, please, go to [xcode-shop.com](https://xcode-shop.com).
You can download example app [Debts - Spending tracker](https://itunes.apple.com/app/id1446635818) from AppStore. If you want to **buy source code** of example apps, please, go to [xcode-shop.com](https://xcode-shop.com).
---
<img align="left" src="https://github.com/ivanvorobei/SPLarkController/blob/master/Resources/Preview.gif" width="220"/>
### SPLarkController
[SPLarkController](https://github.com/IvanVorobei/SPLarkController) make **settings screen** for your application. You can add **buttons and switches**. The amount cells is not limited. You can start using project with just two lines of code and easy customisation.
[SPLarkController](https://github.com/ivanvorobei/SPLarkController) transition between controllers. Translate to top. Make **settings screen** for application. You can add **buttons and switches**. The amount cells is not limited. You can start using project with just two lines of code and easy customisation. For implement settings as in preiew, see section [Settings Controller](https://github.com/ivanvorobei/SPLarkController#settings-controller).
<img src="https://github.com/IvanVorobei/SPLarkController/blob/master/Resources/Preview.gif" width="440">
You can download example app [Code - Learn Swift & Design](https://itunes.apple.com/app/id1453325619) from AppStore. If you want to **buy source code** of app this app, please, go to [xcode-shop.com](https://xcode-shop.com).
You can download [Code - Learn Swift & Design](https://itunes.apple.com/app/id1453325619) app, which uses `SPLarkController`. Also you can **buy source code** of this app on [xcode-shop.com](https://xcode-shop.com).
---
<img align="left" src="https://github.com/ivanvorobei/SPPermission/blob/master/Resources/Preview.gif" width="220"/>
### SPPermission
[SPPermission](https://github.com/IvanVorobei/SPPermission) allow request permissions **with native dialog** UI and interactive animations. Also you can request permissions without dialog. Check state any permission. You can start using this project with just two lines of code and easy customisation.
[SPPermission](https://github.com/ivanvorobei/SPPermission) allow request permissions **with native dialog** UI and interactive animations. Also you can request permissions without dialog. Check state any permission. You can start using this project with just two lines of code and easy customisation.
<img src="https://github.com/IvanVorobei/SPPermission/blob/master/Resources/Preview.gif" width="500">
### Xcode Shop
If you want **buy apps with source code**, you can visit my [xcode-shop.com](https://xcode-shop.com). Here I am sale apps, modules, 3D elements and other. In applications you can find many cool UI that will be useful for your projects. Also by buying, **you support me** and my free GitHub development.
You can buy example Dialog & Dinamic animations in [xcode-shop.com](https://xcode-shop.com/ui-elements), see [preview](https://xcode-shop.com/assets/preview/dinamic-alert.mov).
## License
`SPStorkController` is released under the MIT license. Check `LICENSE.md` for details.
## Contact
If you need any application or UI to be developed, message me at hello@ivanvorobei.by or via [telegram](https://t.me/ivanvorobei). I develop iOS apps and designs. I use `swift` for development. To request more functionality, you should create a new issue. You can see my [apps in AppStore](https://itunes.apple.com/developer/id1446635817).
If you need any application or UI to be developed, contact me via [telegram](https://t.me/ivanvorobei). I develop iOS apps and designs. I use `swift`. You can see my apps [in AppStore](https://itunes.apple.com/developer/id1446635817).
If you want to know more about Xcode, UIKit & Design, follow me on twitter:
[![https://twitter.com/varabeis](https://github.com/ivanvorobei/SPPermission/blob/master/Resources/Buttons/Twitter-2.svg)](https://twitter.com/varabeis)
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

+1 -1
View File
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|
s.name = "SPStorkController"
s.version = "1.6.2"
s.version = "1.6.6"
s.summary = "Very similar to the controllers displayed in Apple Music, Podcasts and Mail Apple's applications."
s.homepage = "https://github.com/IvanVorobei/SPStorkController"
s.source = { :git => "https://github.com/IvanVorobei/SPStorkController.git", :tag => s.version }
+78 -66
View File
@@ -8,36 +8,38 @@
/* Begin PBXBuildFile section */
F4DB85222260A4FD005082AA /* SPStorkController.h in Headers */ = {isa = PBXBuildFile; fileRef = F4DB85202260A4FD005082AA /* SPStorkController.h */; settings = {ATTRIBUTES = (Public, ); }; };
F4DB853B2260A582005082AA /* SPStorkHaptic.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB852A2260A582005082AA /* SPStorkHaptic.swift */; };
F4DB853C2260A582005082AA /* SPStorkCodeDraw.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB852C2260A582005082AA /* SPStorkCodeDraw.swift */; };
F4DB853D2260A582005082AA /* SPStorkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB852D2260A582005082AA /* SPStorkController.swift */; };
F4DB853E2260A582005082AA /* SPStorkTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB852F2260A582005082AA /* SPStorkTransitioningDelegate.swift */; };
F4DB853F2260A582005082AA /* SPStorkPresentingAnimationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB85302260A582005082AA /* SPStorkPresentingAnimationController.swift */; };
F4DB85402260A582005082AA /* SPStorkPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB85312260A582005082AA /* SPStorkPresentationController.swift */; };
F4DB85412260A582005082AA /* SPStorkDismissingAnimationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB85322260A582005082AA /* SPStorkDismissingAnimationController.swift */; };
F4DB85422260A582005082AA /* SPStorkViewControllerExtenshion.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB85342260A582005082AA /* SPStorkViewControllerExtenshion.swift */; };
F4DB85432260A582005082AA /* SPStorkCloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB85362260A582005082AA /* SPStorkCloseButton.swift */; };
F4DB85442260A582005082AA /* SPStorkIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB85372260A582005082AA /* SPStorkIndicatorView.swift */; };
F4DB85452260A582005082AA /* SPStorkCloseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB85382260A582005082AA /* SPStorkCloseView.swift */; };
F4DB85462260A582005082AA /* SPStorkControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB853A2260A582005082AA /* SPStorkControllerDelegate.swift */; };
F4EF61BC22B58B8600E76099 /* SPStorkHaptic.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61AA22B58B8500E76099 /* SPStorkHaptic.swift */; };
F4EF61BD22B58B8600E76099 /* SPStorkSeque.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61AB22B58B8500E76099 /* SPStorkSeque.swift */; };
F4EF61BE22B58B8600E76099 /* SPStorkCodeDraw.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61AD22B58B8500E76099 /* SPStorkCodeDraw.swift */; };
F4EF61BF22B58B8600E76099 /* SPStorkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61AE22B58B8500E76099 /* SPStorkController.swift */; };
F4EF61C022B58B8600E76099 /* SPStorkTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61B022B58B8500E76099 /* SPStorkTransitioningDelegate.swift */; };
F4EF61C122B58B8600E76099 /* SPStorkPresentingAnimationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61B122B58B8500E76099 /* SPStorkPresentingAnimationController.swift */; };
F4EF61C222B58B8600E76099 /* SPStorkPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61B222B58B8500E76099 /* SPStorkPresentationController.swift */; };
F4EF61C322B58B8600E76099 /* SPStorkDismissingAnimationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61B322B58B8500E76099 /* SPStorkDismissingAnimationController.swift */; };
F4EF61C422B58B8600E76099 /* SPStorkViewControllerExtenshion.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61B522B58B8500E76099 /* SPStorkViewControllerExtenshion.swift */; };
F4EF61C522B58B8600E76099 /* SPStorkCloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61B722B58B8500E76099 /* SPStorkCloseButton.swift */; };
F4EF61C622B58B8600E76099 /* SPStorkIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61B822B58B8500E76099 /* SPStorkIndicatorView.swift */; };
F4EF61C722B58B8600E76099 /* SPStorkCloseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61B922B58B8500E76099 /* SPStorkCloseView.swift */; };
F4EF61C822B58B8600E76099 /* SPStorkControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EF61BB22B58B8500E76099 /* SPStorkControllerDelegate.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
F4DB851D2260A4FD005082AA /* SPStorkController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SPStorkController.framework; sourceTree = BUILT_PRODUCTS_DIR; };
F4DB85202260A4FD005082AA /* SPStorkController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPStorkController.h; sourceTree = "<group>"; };
F4DB85212260A4FD005082AA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
F4DB852A2260A582005082AA /* SPStorkHaptic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkHaptic.swift; sourceTree = "<group>"; };
F4DB852C2260A582005082AA /* SPStorkCodeDraw.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCodeDraw.swift; sourceTree = "<group>"; };
F4DB852D2260A582005082AA /* SPStorkController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkController.swift; sourceTree = "<group>"; };
F4DB852F2260A582005082AA /* SPStorkTransitioningDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkTransitioningDelegate.swift; sourceTree = "<group>"; };
F4DB85302260A582005082AA /* SPStorkPresentingAnimationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkPresentingAnimationController.swift; sourceTree = "<group>"; };
F4DB85312260A582005082AA /* SPStorkPresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkPresentationController.swift; sourceTree = "<group>"; };
F4DB85322260A582005082AA /* SPStorkDismissingAnimationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkDismissingAnimationController.swift; sourceTree = "<group>"; };
F4DB85342260A582005082AA /* SPStorkViewControllerExtenshion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkViewControllerExtenshion.swift; sourceTree = "<group>"; };
F4DB85362260A582005082AA /* SPStorkCloseButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCloseButton.swift; sourceTree = "<group>"; };
F4DB85372260A582005082AA /* SPStorkIndicatorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkIndicatorView.swift; sourceTree = "<group>"; };
F4DB85382260A582005082AA /* SPStorkCloseView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCloseView.swift; sourceTree = "<group>"; };
F4DB853A2260A582005082AA /* SPStorkControllerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkControllerDelegate.swift; sourceTree = "<group>"; };
F4EF61AA22B58B8500E76099 /* SPStorkHaptic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkHaptic.swift; sourceTree = "<group>"; };
F4EF61AB22B58B8500E76099 /* SPStorkSeque.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkSeque.swift; sourceTree = "<group>"; };
F4EF61AD22B58B8500E76099 /* SPStorkCodeDraw.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCodeDraw.swift; sourceTree = "<group>"; };
F4EF61AE22B58B8500E76099 /* SPStorkController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkController.swift; sourceTree = "<group>"; };
F4EF61B022B58B8500E76099 /* SPStorkTransitioningDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkTransitioningDelegate.swift; sourceTree = "<group>"; };
F4EF61B122B58B8500E76099 /* SPStorkPresentingAnimationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkPresentingAnimationController.swift; sourceTree = "<group>"; };
F4EF61B222B58B8500E76099 /* SPStorkPresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkPresentationController.swift; sourceTree = "<group>"; };
F4EF61B322B58B8500E76099 /* SPStorkDismissingAnimationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkDismissingAnimationController.swift; sourceTree = "<group>"; };
F4EF61B522B58B8500E76099 /* SPStorkViewControllerExtenshion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkViewControllerExtenshion.swift; sourceTree = "<group>"; };
F4EF61B722B58B8500E76099 /* SPStorkCloseButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCloseButton.swift; sourceTree = "<group>"; };
F4EF61B822B58B8500E76099 /* SPStorkIndicatorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkIndicatorView.swift; sourceTree = "<group>"; };
F4EF61B922B58B8500E76099 /* SPStorkCloseView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCloseView.swift; sourceTree = "<group>"; };
F4EF61BB22B58B8500E76099 /* SPStorkControllerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkControllerDelegate.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -51,6 +53,15 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
F4437E4F22B50918006E6498 /* Supporting Files */ = {
isa = PBXGroup;
children = (
F4DB85202260A4FD005082AA /* SPStorkController.h */,
F4DB85212260A4FD005082AA /* Info.plist */,
);
path = "Supporting Files";
sourceTree = "<group>";
};
F4DB85132260A4FD005082AA = {
isa = PBXGroup;
children = (
@@ -70,76 +81,76 @@
F4DB851F2260A4FD005082AA /* Source */ = {
isa = PBXGroup;
children = (
F4DB85282260A582005082AA /* SPStorkController */,
F4DB85202260A4FD005082AA /* SPStorkController.h */,
F4DB85212260A4FD005082AA /* Info.plist */,
F4EF61A822B58B8500E76099 /* SPStorkController */,
F4437E4F22B50918006E6498 /* Supporting Files */,
);
path = Source;
sourceTree = "<group>";
};
F4DB85282260A582005082AA /* SPStorkController */ = {
F4EF61A822B58B8500E76099 /* SPStorkController */ = {
isa = PBXGroup;
children = (
F4DB85292260A582005082AA /* Models */,
F4DB852B2260A582005082AA /* CodeDraw */,
F4DB852D2260A582005082AA /* SPStorkController.swift */,
F4DB852E2260A582005082AA /* TransitioningDelegate */,
F4DB85332260A582005082AA /* Extenshion */,
F4DB85352260A582005082AA /* Views */,
F4DB85392260A582005082AA /* Protocols */,
F4EF61A922B58B8500E76099 /* Models */,
F4EF61AB22B58B8500E76099 /* SPStorkSeque.swift */,
F4EF61AC22B58B8500E76099 /* CodeDraw */,
F4EF61AE22B58B8500E76099 /* SPStorkController.swift */,
F4EF61AF22B58B8500E76099 /* TransitioningDelegate */,
F4EF61B422B58B8500E76099 /* Extenshion */,
F4EF61B622B58B8500E76099 /* Views */,
F4EF61BA22B58B8500E76099 /* Protocols */,
);
path = SPStorkController;
sourceTree = "<group>";
};
F4DB85292260A582005082AA /* Models */ = {
F4EF61A922B58B8500E76099 /* Models */ = {
isa = PBXGroup;
children = (
F4DB852A2260A582005082AA /* SPStorkHaptic.swift */,
F4EF61AA22B58B8500E76099 /* SPStorkHaptic.swift */,
);
path = Models;
sourceTree = "<group>";
};
F4DB852B2260A582005082AA /* CodeDraw */ = {
F4EF61AC22B58B8500E76099 /* CodeDraw */ = {
isa = PBXGroup;
children = (
F4DB852C2260A582005082AA /* SPStorkCodeDraw.swift */,
F4EF61AD22B58B8500E76099 /* SPStorkCodeDraw.swift */,
);
path = CodeDraw;
sourceTree = "<group>";
};
F4DB852E2260A582005082AA /* TransitioningDelegate */ = {
F4EF61AF22B58B8500E76099 /* TransitioningDelegate */ = {
isa = PBXGroup;
children = (
F4DB852F2260A582005082AA /* SPStorkTransitioningDelegate.swift */,
F4DB85302260A582005082AA /* SPStorkPresentingAnimationController.swift */,
F4DB85312260A582005082AA /* SPStorkPresentationController.swift */,
F4DB85322260A582005082AA /* SPStorkDismissingAnimationController.swift */,
F4EF61B022B58B8500E76099 /* SPStorkTransitioningDelegate.swift */,
F4EF61B122B58B8500E76099 /* SPStorkPresentingAnimationController.swift */,
F4EF61B222B58B8500E76099 /* SPStorkPresentationController.swift */,
F4EF61B322B58B8500E76099 /* SPStorkDismissingAnimationController.swift */,
);
path = TransitioningDelegate;
sourceTree = "<group>";
};
F4DB85332260A582005082AA /* Extenshion */ = {
F4EF61B422B58B8500E76099 /* Extenshion */ = {
isa = PBXGroup;
children = (
F4DB85342260A582005082AA /* SPStorkViewControllerExtenshion.swift */,
F4EF61B522B58B8500E76099 /* SPStorkViewControllerExtenshion.swift */,
);
path = Extenshion;
sourceTree = "<group>";
};
F4DB85352260A582005082AA /* Views */ = {
F4EF61B622B58B8500E76099 /* Views */ = {
isa = PBXGroup;
children = (
F4DB85362260A582005082AA /* SPStorkCloseButton.swift */,
F4DB85372260A582005082AA /* SPStorkIndicatorView.swift */,
F4DB85382260A582005082AA /* SPStorkCloseView.swift */,
F4EF61B722B58B8500E76099 /* SPStorkCloseButton.swift */,
F4EF61B822B58B8500E76099 /* SPStorkIndicatorView.swift */,
F4EF61B922B58B8500E76099 /* SPStorkCloseView.swift */,
);
path = Views;
sourceTree = "<group>";
};
F4DB85392260A582005082AA /* Protocols */ = {
F4EF61BA22B58B8500E76099 /* Protocols */ = {
isa = PBXGroup;
children = (
F4DB853A2260A582005082AA /* SPStorkControllerDelegate.swift */,
F4EF61BB22B58B8500E76099 /* SPStorkControllerDelegate.swift */,
);
path = Protocols;
sourceTree = "<group>";
@@ -222,18 +233,19 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
F4DB853D2260A582005082AA /* SPStorkController.swift in Sources */,
F4DB85412260A582005082AA /* SPStorkDismissingAnimationController.swift in Sources */,
F4DB85422260A582005082AA /* SPStorkViewControllerExtenshion.swift in Sources */,
F4DB85462260A582005082AA /* SPStorkControllerDelegate.swift in Sources */,
F4DB85452260A582005082AA /* SPStorkCloseView.swift in Sources */,
F4DB85432260A582005082AA /* SPStorkCloseButton.swift in Sources */,
F4DB853B2260A582005082AA /* SPStorkHaptic.swift in Sources */,
F4DB85402260A582005082AA /* SPStorkPresentationController.swift in Sources */,
F4DB853F2260A582005082AA /* SPStorkPresentingAnimationController.swift in Sources */,
F4DB853C2260A582005082AA /* SPStorkCodeDraw.swift in Sources */,
F4DB853E2260A582005082AA /* SPStorkTransitioningDelegate.swift in Sources */,
F4DB85442260A582005082AA /* SPStorkIndicatorView.swift in Sources */,
F4EF61BF22B58B8600E76099 /* SPStorkController.swift in Sources */,
F4EF61C322B58B8600E76099 /* SPStorkDismissingAnimationController.swift in Sources */,
F4EF61C222B58B8600E76099 /* SPStorkPresentationController.swift in Sources */,
F4EF61C422B58B8600E76099 /* SPStorkViewControllerExtenshion.swift in Sources */,
F4EF61BD22B58B8600E76099 /* SPStorkSeque.swift in Sources */,
F4EF61C522B58B8600E76099 /* SPStorkCloseButton.swift in Sources */,
F4EF61C822B58B8600E76099 /* SPStorkControllerDelegate.swift in Sources */,
F4EF61C122B58B8600E76099 /* SPStorkPresentingAnimationController.swift in Sources */,
F4EF61C622B58B8600E76099 /* SPStorkIndicatorView.swift in Sources */,
F4EF61C722B58B8600E76099 /* SPStorkCloseView.swift in Sources */,
F4EF61BE22B58B8600E76099 /* SPStorkCodeDraw.swift in Sources */,
F4EF61BC22B58B8600E76099 /* SPStorkHaptic.swift in Sources */,
F4EF61C022B58B8600E76099 /* SPStorkTransitioningDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -371,7 +383,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
INFOPLIST_FILE = "$(SRCROOT)/Source/Supporting Files/Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -396,7 +408,7 @@
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
INFOPLIST_FILE = "$(SRCROOT)/Source/Supporting Files/Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -38,12 +38,11 @@ extension UIViewController {
self.present(controller, animated: true, completion: nil)
}
public func presentAsStork(_ controller: UIViewController, height: CGFloat?, showIndicator: Bool, hideIndicatorWhenScroll: Bool, showCloseButton: Bool, complection: (() -> Void)?) {
public func presentAsStork(_ controller: UIViewController, height: CGFloat?, showIndicator: Bool, showCloseButton: Bool, complection: (() -> Void)? = nil) {
let transitionDelegate = SPStorkTransitioningDelegate()
transitionDelegate.customHeight = height
transitionDelegate.showCloseButton = showCloseButton
transitionDelegate.showIndicator = showIndicator
transitionDelegate.hideIndicatorWhenScroll = hideIndicatorWhenScroll
controller.transitioningDelegate = transitionDelegate
controller.modalPresentationStyle = .custom
controller.modalPresentationCapturesStatusBarAppearance = true
@@ -21,7 +21,7 @@
import UIKit
public struct SPStorkController {
public enum SPStorkController {
static public func scrollViewDidScroll(_ scrollView: UIScrollView) {
if let controller = self.controller(for: scrollView) {
@@ -81,6 +81,4 @@ public struct SPStorkController {
}
return nextResponder as? UIViewController
}
private init() {}
}
@@ -0,0 +1,34 @@
// The MIT License (MIT)
// Copyright © 2017 Ivan Vorobei (hello@ivanvorobei.by)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
import UIKit
public class SPStorkSegue: UIStoryboardSegue {
public var transitioningDelegate: SPStorkTransitioningDelegate?
override public func perform() {
transitioningDelegate = transitioningDelegate ?? SPStorkTransitioningDelegate()
destination.transitioningDelegate = transitioningDelegate
destination.modalPresentationStyle = .custom
super.perform()
}
}
@@ -64,12 +64,20 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
private var scaleForPresentingView: CGFloat {
guard let containerView = containerView else { return 0 }
let factor = 1 - ((self.cornerRadius + 2) * 2 / containerView.frame.width)
let factor = 1 - ((self.cornerRadius + 3) * 2 / containerView.frame.width)
return factor
}
private var feedbackGenerator: UIImpactFeedbackGenerator = UIImpactFeedbackGenerator(style: .light)
override var presentedView: UIView? {
let view = self.presentedViewController.view
if view?.frame.origin == CGPoint.zero {
view?.frame = self.frameOfPresentedViewInContainerView
}
return view
}
override var frameOfPresentedViewInContainerView: CGRect {
guard let containerView = containerView else { return .zero }
let baseY: CGFloat = self.topSpace + 13
@@ -101,6 +109,11 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
tap.cancelsTouchesInView = false
self.indicatorView.addGestureRecognizer(tap)
presentedView.addSubview(self.indicatorView)
self.indicatorView.translatesAutoresizingMaskIntoConstraints = false
self.indicatorView.widthAnchor.constraint(equalToConstant: 36).isActive = true
self.indicatorView.heightAnchor.constraint(equalToConstant: 13).isActive = true
self.indicatorView.centerXAnchor.constraint(equalTo: presentedView.centerXAnchor).isActive = true
self.indicatorView.topAnchor.constraint(equalTo: presentedView.topAnchor, constant: 12).isActive = true
}
self.updateLayoutIndicator()
self.indicatorView.style = .arrow
@@ -429,10 +442,7 @@ extension SPStorkPresentationController {
guard let containerView = containerView else { return }
self.updateSnapshotAspectRatio()
if presentedViewController.view.isDescendant(of: containerView) {
UIView.animate(withDuration: 0.1) { [weak self] in
guard let `self` = self else { return }
self.presentedViewController.view.frame = self.frameOfPresentedViewInContainerView
}
self.presentedViewController.view.frame = self.frameOfPresentedViewInContainerView
}
}
@@ -448,11 +458,10 @@ extension SPStorkPresentationController {
}
private func updateLayoutIndicator() {
guard let presentedView = self.presentedView else { return }
self.indicatorView.style = .line
self.indicatorView.sizeToFit()
self.indicatorView.frame.origin.y = 12
self.indicatorView.center.x = presentedView.frame.width / 2
//self.indicatorView.frame.origin.y = 12
//self.indicatorView.center.x = presentedView.frame.width / 2
}
private func updateLayoutCloseButton() {