Compare commits

..

69 Commits

Author SHA1 Message Date
Ivan Vorobei 71708b43c3 Update to 1.6.2
New width for parent controller.
2019-05-06 11:56:06 +03:00
Ivan Vorobei 66d7775d01 Update Example 2019-05-06 11:55:19 +03:00
Ivan Vorobei 298e0fdfc0 Update README.md 2019-05-05 18:04:59 +03:00
Ivan Vorobei 65070bce00 Update Example
And convert example project for swift 5 support.
2019-05-02 17:52:05 +03:00
Ivan Vorobei 2210afc7a7 Update README.md 2019-05-01 14:30:49 +03:00
Ivan Vorobei 94a8b06dde Update README.md 2019-04-30 20:58:58 +03:00
Ivan Vorobei 621e19cf78 Update README.md 2019-04-30 20:53:31 +03:00
Ivan Vorobei 6ae5e4f73d Update README.md 2019-04-30 16:31:35 +03:00
Ivan Vorobei 57d927bc49 Update README.md 2019-04-29 12:22:26 +03:00
Ivan Vorobei 1817c81bcc Update README.md 2019-04-29 12:20:49 +03:00
Ivan Vorobei 02e77c6074 Update README.md 2019-04-29 12:15:53 +03:00
Ivan Vorobei c922a8f522 Update README.md 2019-04-29 12:15:36 +03:00
Ivan Vorobei 86e7b3458d Update README.md 2019-04-29 12:15:00 +03:00
Ivan Vorobei a7ffa44434 Update README.md 2019-04-29 12:14:39 +03:00
Ivan Vorobei 96cc6b021a Update README.md 2019-04-29 12:14:16 +03:00
Ivan Vorobei 398da17b4a Update README.md 2019-04-28 23:05:55 +03:00
Ivan Vorobei 5e76f9f4d0 Update README.md 2019-04-28 18:52:54 +03:00
Ivan Vorobei a20a025a5b Update README.md 2019-04-28 18:47:39 +03:00
Ivan Vorobei 93e5b6f9de Update README.md 2019-04-28 18:46:27 +03:00
Ivan Vorobei 9d280b9b51 Update Readme 2019-04-28 16:28:53 +03:00
Ivan Vorobei 3d486c8f4b Update README.md 2019-04-26 18:39:12 +03:00
Ivan Vorobei d8fc226c9a Update README.md 2019-04-26 18:25:25 +03:00
Ivan Vorobei 7fd5eb41a6 Update Readme 2019-04-26 17:55:24 +03:00
Ivan Vorobei 263996e39d Update README.md 2019-04-26 17:53:52 +03:00
Ivan Vorobei b36cc7720d Update README.md 2019-04-26 17:53:38 +03:00
Ivan Vorobei f01ff0e904 Update Readme 2019-04-26 17:53:12 +03:00
Ivan Vorobei 92f29009c4 Update README.md 2019-04-26 17:45:06 +03:00
Ivan Vorobei b9813933b9 Update README.md 2019-04-26 17:36:54 +03:00
Ivan Vorobei ef0169a429 Update README.md 2019-04-26 17:35:52 +03:00
Ivan Vorobei 75766e6b7f Update README.md 2019-04-26 16:32:17 +03:00
Ivan Vorobei 9e8ed72013 Update README.md 2019-04-26 16:31:16 +03:00
Ivan Vorobei 29d6f3af93 Update README.md 2019-04-26 16:30:27 +03:00
Ivan Vorobei afa7e48e4c Update README.md 2019-04-26 16:20:25 +03:00
Ivan Vorobei b4c022e889 Update README.md 2019-04-26 16:13:36 +03:00
Ivan Vorobei 3c6e7e2c9c Update README.md 2019-04-26 15:55:05 +03:00
Ivan Vorobei 16e4685963 Update README.md 2019-04-26 15:53:29 +03:00
Ivan Vorobei e8e0e22259 Update README.md 2019-04-26 15:51:27 +03:00
Ivan Vorobei 19551282e6 Update Readme 2019-04-26 15:47:35 +03:00
Ivan Vorobei bc66345c6a Update Readme 2019-04-26 15:43:30 +03:00
Ivan Vorobei 73152ed8df Update README.md 2019-04-26 15:33:07 +03:00
Ivan Vorobei 431e9f58d5 Update README.md 2019-04-26 15:30:26 +03:00
Ivan Vorobei c3d75dac5e Update README.md 2019-04-26 15:30:01 +03:00
Ivan Vorobei cf9e7501d2 Update README.md 2019-04-26 15:27:47 +03:00
Ivan Vorobei 182ee5f0f0 Update README.md 2019-04-26 15:26:31 +03:00
Ivan Vorobei b2b37e717c Update README.md 2019-04-26 15:25:21 +03:00
Ivan Vorobei c0ea9d29a1 Update README.md 2019-04-26 15:21:57 +03:00
Ivan Vorobei cb55b4861a Update README.md 2019-04-26 15:20:57 +03:00
Ivan Vorobei 6a0aa725f7 Update README.md 2019-04-26 15:19:27 +03:00
Ivan Vorobei aebe62a9f2 Update README.md 2019-04-26 15:18:28 +03:00
Ivan Vorobei a0c0bf6885 Update README.md 2019-04-26 15:12:32 +03:00
Ivan Vorobei c0be873778 Update README.md 2019-04-26 15:11:04 +03:00
Ivan Vorobei 7fa550f79c Update README.md 2019-04-26 14:40:39 +03:00
Ivan Vorobei 6a22bb178b Update README.md 2019-04-25 16:57:19 +03:00
Ivan Vorobei 8993c2011d Update README.md 2019-04-24 12:03:09 +03:00
Ivan Vorobei 70199b65ee Update README.md 2019-04-23 12:40:06 +03:00
Ivan Vorobei 99ed2e84e1 Update README.md 2019-04-23 12:38:20 +03:00
Ivan Vorobei 6d8bf7c70a Update README.md 2019-04-23 12:26:31 +03:00
Ivan Vorobei a21dd49806 Update README.md 2019-04-23 12:05:22 +03:00
Ivan Vorobei 2cb195fcab Update README.md 2019-04-23 12:04:12 +03:00
Ivan Vorobei 4c78642040 Update README.md 2019-04-23 12:03:21 +03:00
Ivan Vorobei 73d297de19 Update README.md 2019-04-22 09:20:34 +03:00
Ivan Vorobei 1d167c9506 Update README.md 2019-04-22 09:19:19 +03:00
Ivan Vorobei 0b07e8e2cb Update README.md 2019-04-17 16:19:43 +03:00
Ivan Vorobei 8500571554 Update README.md 2019-04-17 16:11:08 +03:00
Ivan Vorobei 13134f2748 Update README.md 2019-04-17 16:05:39 +03:00
Ivan Vorobei 6e1a5c85b3 Update README.md 2019-04-17 16:04:01 +03:00
Ivan Vorobei eab9045cb5 Update README.md 2019-04-17 16:03:25 +03:00
Ivan Vorobei f567582b4d Update README.md 2019-04-17 16:00:48 +03:00
Ivan Vorobei 30365fde24 Fix protect level
Fix bug with `topScrollIndicatorInset` property, set `public` protect level. Add support in `podspec` swift `4.2` & `5.0`.
2019-04-17 00:49:40 +03:00
11 changed files with 260 additions and 212 deletions
+117 -116
View File
@@ -13,18 +13,6 @@
F445CA9121AED92700184254 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F445CA8F21AED92700184254 /* LaunchScreen.storyboard */; };
F459D75B21C3AB9A00798524 /* ModalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F459D75A21C3AB9A00798524 /* ModalViewController.swift */; };
F459D75D21C3ABBD00798524 /* ModalTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F459D75C21C3ABBD00798524 /* ModalTableViewController.swift */; };
F4DB83E522609A1E005082AA /* SPStorkCodeDraw.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83D622609A1E005082AA /* SPStorkCodeDraw.swift */; };
F4DB83E622609A1E005082AA /* SPStorkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83D722609A1E005082AA /* SPStorkController.swift */; };
F4DB83E722609A1E005082AA /* SPStorkTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83D922609A1E005082AA /* SPStorkTransitioningDelegate.swift */; };
F4DB83E822609A1E005082AA /* SPStorkPresentingAnimationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83DA22609A1E005082AA /* SPStorkPresentingAnimationController.swift */; };
F4DB83E922609A1E005082AA /* SPStorkPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83DB22609A1E005082AA /* SPStorkPresentationController.swift */; };
F4DB83EA22609A1E005082AA /* SPStorkDismissingAnimationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83DC22609A1E005082AA /* SPStorkDismissingAnimationController.swift */; };
F4DB83EB22609A1E005082AA /* SPStorkViewControllerExtenshion.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83DE22609A1E005082AA /* SPStorkViewControllerExtenshion.swift */; };
F4DB83EC22609A1E005082AA /* SPStorkCloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83E022609A1E005082AA /* SPStorkCloseButton.swift */; };
F4DB83ED22609A1E005082AA /* SPStorkIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83E122609A1E005082AA /* SPStorkIndicatorView.swift */; };
F4DB83EE22609A1E005082AA /* SPStorkCloseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83E222609A1E005082AA /* SPStorkCloseView.swift */; };
F4DB83EF22609A1E005082AA /* SPStorkControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83E422609A1E005082AA /* SPStorkControllerDelegate.swift */; };
F4DB83F222609A94005082AA /* SPStorkHaptic.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83F122609A94005082AA /* SPStorkHaptic.swift */; };
F4DB849622609C05005082AA /* SPVibration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83F522609C03005082AA /* SPVibration.swift */; };
F4DB849722609C05005082AA /* SPPromoTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83F922609C03005082AA /* SPPromoTableViewCell.swift */; };
F4DB849822609C05005082AA /* SPFormButtonTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB83FB22609C03005082AA /* SPFormButtonTableViewCell.swift */; };
@@ -145,8 +133,20 @@
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 */; };
F4DB851122609C3A005082AA /* SPFakeBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB850F22609C3A005082AA /* SPFakeBarView.swift */; };
F4DB851222609C3A005082AA /* SPFakeBarNavigationStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DB851022609C3A005082AA /* SPFakeBarNavigationStyle.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 */
/* Begin PBXFileReference section */
@@ -158,18 +158,6 @@
F445CA9221AED92700184254 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; 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>"; };
F4DB83D622609A1E005082AA /* SPStorkCodeDraw.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCodeDraw.swift; sourceTree = "<group>"; };
F4DB83D722609A1E005082AA /* SPStorkController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkController.swift; sourceTree = "<group>"; };
F4DB83D922609A1E005082AA /* SPStorkTransitioningDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkTransitioningDelegate.swift; sourceTree = "<group>"; };
F4DB83DA22609A1E005082AA /* SPStorkPresentingAnimationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkPresentingAnimationController.swift; sourceTree = "<group>"; };
F4DB83DB22609A1E005082AA /* SPStorkPresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkPresentationController.swift; sourceTree = "<group>"; };
F4DB83DC22609A1E005082AA /* SPStorkDismissingAnimationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkDismissingAnimationController.swift; sourceTree = "<group>"; };
F4DB83DE22609A1E005082AA /* SPStorkViewControllerExtenshion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkViewControllerExtenshion.swift; sourceTree = "<group>"; };
F4DB83E022609A1E005082AA /* SPStorkCloseButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCloseButton.swift; sourceTree = "<group>"; };
F4DB83E122609A1E005082AA /* SPStorkIndicatorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkIndicatorView.swift; sourceTree = "<group>"; };
F4DB83E222609A1E005082AA /* SPStorkCloseView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkCloseView.swift; sourceTree = "<group>"; };
F4DB83E422609A1E005082AA /* SPStorkControllerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPStorkControllerDelegate.swift; sourceTree = "<group>"; };
F4DB83F122609A94005082AA /* SPStorkHaptic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SPStorkHaptic.swift; sourceTree = "<group>"; };
F4DB83F522609C03005082AA /* SPVibration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPVibration.swift; sourceTree = "<group>"; };
F4DB83F922609C03005082AA /* SPPromoTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPPromoTableViewCell.swift; sourceTree = "<group>"; };
F4DB83FB22609C03005082AA /* SPFormButtonTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPFormButtonTableViewCell.swift; sourceTree = "<group>"; };
@@ -290,8 +278,20 @@
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>"; };
F4DB850F22609C3A005082AA /* SPFakeBarView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPFakeBarView.swift; sourceTree = "<group>"; };
F4DB851022609C3A005082AA /* SPFakeBarNavigationStyle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SPFakeBarNavigationStyle.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 */
/* Begin PBXFrameworksBuildPhase section */
@@ -340,80 +340,13 @@
F445CA9821AED98500184254 /* Frameworks */ = {
isa = PBXGroup;
children = (
F4DB850E22609C3A005082AA /* SPFakeBar */,
F4F33BE422802AB000199EBE /* SPFakeBar */,
F4F33BC522802AA100199EBE /* SPStorkController */,
F4DB83F322609C03005082AA /* SparrowKit */,
F4DB83D422609A1E005082AA /* SPStorkController */,
);
path = Frameworks;
sourceTree = "<group>";
};
F4DB83D422609A1E005082AA /* SPStorkController */ = {
isa = PBXGroup;
children = (
F4DB83F022609A87005082AA /* Models */,
F4DB83D722609A1E005082AA /* SPStorkController.swift */,
F4DB83D522609A1E005082AA /* CodeDraw */,
F4DB83D822609A1E005082AA /* TransitioningDelegate */,
F4DB83DD22609A1E005082AA /* Extenshion */,
F4DB83DF22609A1E005082AA /* Views */,
F4DB83E322609A1E005082AA /* Protocols */,
);
path = SPStorkController;
sourceTree = "<group>";
};
F4DB83D522609A1E005082AA /* CodeDraw */ = {
isa = PBXGroup;
children = (
F4DB83D622609A1E005082AA /* SPStorkCodeDraw.swift */,
);
path = CodeDraw;
sourceTree = "<group>";
};
F4DB83D822609A1E005082AA /* TransitioningDelegate */ = {
isa = PBXGroup;
children = (
F4DB83D922609A1E005082AA /* SPStorkTransitioningDelegate.swift */,
F4DB83DA22609A1E005082AA /* SPStorkPresentingAnimationController.swift */,
F4DB83DB22609A1E005082AA /* SPStorkPresentationController.swift */,
F4DB83DC22609A1E005082AA /* SPStorkDismissingAnimationController.swift */,
);
path = TransitioningDelegate;
sourceTree = "<group>";
};
F4DB83DD22609A1E005082AA /* Extenshion */ = {
isa = PBXGroup;
children = (
F4DB83DE22609A1E005082AA /* SPStorkViewControllerExtenshion.swift */,
);
path = Extenshion;
sourceTree = "<group>";
};
F4DB83DF22609A1E005082AA /* Views */ = {
isa = PBXGroup;
children = (
F4DB83E022609A1E005082AA /* SPStorkCloseButton.swift */,
F4DB83E122609A1E005082AA /* SPStorkIndicatorView.swift */,
F4DB83E222609A1E005082AA /* SPStorkCloseView.swift */,
);
path = Views;
sourceTree = "<group>";
};
F4DB83E322609A1E005082AA /* Protocols */ = {
isa = PBXGroup;
children = (
F4DB83E422609A1E005082AA /* SPStorkControllerDelegate.swift */,
);
path = Protocols;
sourceTree = "<group>";
};
F4DB83F022609A87005082AA /* Models */ = {
isa = PBXGroup;
children = (
F4DB83F122609A94005082AA /* SPStorkHaptic.swift */,
);
path = Models;
sourceTree = "<group>";
};
F4DB83F322609C03005082AA /* SparrowKit */ = {
isa = PBXGroup;
children = (
@@ -877,11 +810,78 @@
path = Share;
sourceTree = "<group>";
};
F4DB850E22609C3A005082AA /* SPFakeBar */ = {
F4F33BC522802AA100199EBE /* SPStorkController */ = {
isa = PBXGroup;
children = (
F4DB850F22609C3A005082AA /* SPFakeBarView.swift */,
F4DB851022609C3A005082AA /* SPFakeBarNavigationStyle.swift */,
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 = (
F4F33BE522802AB000199EBE /* SPFakeBarView.swift */,
F4F33BE622802AB000199EBE /* SPFakeBarNavigationStyle.swift */,
);
path = SPFakeBar;
sourceTree = "<group>";
@@ -918,6 +918,7 @@
TargetAttributes = {
F445CA8221AED92600184254 = {
CreatedOnToolsVersion = 10.1;
LastSwiftMigration = 1020;
};
};
};
@@ -959,6 +960,7 @@
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 */,
@@ -974,12 +976,11 @@
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 */,
F4DB851222609C3A005082AA /* SPFakeBarNavigationStyle.swift in Sources */,
F4DB84A622609C05005082AA /* SPSocialButton.swift in Sources */,
F4DB84E022609C05005082AA /* SPUICollectionViewExtenshion.swift in Sources */,
F4DB84E222609C05005082AA /* SPUITabBarControllerExtenshion.swift in Sources */,
F4DB83E622609A1E005082AA /* SPStorkController.swift in Sources */,
F4DB84A122609C05005082AA /* SPProposeTableViewCell.swift in Sources */,
F4DB849D22609C05005082AA /* SPFormTextInputTableViewCell.swift in Sources */,
F4DB84A222609C05005082AA /* SPBaseContentTableViewCell.swift in Sources */,
@@ -1000,15 +1001,17 @@
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 */,
F4DB83EB22609A1E005082AA /* SPStorkViewControllerExtenshion.swift in Sources */,
F4DB84E422609C05005082AA /* SPCGRectExtension.swift in Sources */,
F4DB84B722609C05005082AA /* SPView.swift in Sources */,
F4DB84AF22609C05005082AA /* SPAppleMusicButton.swift in Sources */,
@@ -1019,14 +1022,11 @@
F4DB84B622609C05005082AA /* SPDownloadingUIImageView.swift in Sources */,
F4DB849E22609C05005082AA /* SPFormTextTableViewCell.swift in Sources */,
F4DB84C622609C05005082AA /* SPTableController.swift in Sources */,
F4DB83ED22609A1E005082AA /* SPStorkIndicatorView.swift in Sources */,
F4DB84C122609C05005082AA /* SPSocialIconView.swift in Sources */,
F4DB84C022609C05005082AA /* SPAudioIconView.swift in Sources */,
F4DB850C22609C05005082AA /* SPDelay.swift in Sources */,
F4DB84F822609C05005082AA /* SPAnimationUpward.swift in Sources */,
F4DB850322609C05005082AA /* SPAudio.swift in Sources */,
F4DB83EA22609A1E005082AA /* SPStorkDismissingAnimationController.swift in Sources */,
F4DB83F222609A94005082AA /* SPStorkHaptic.swift in Sources */,
F4DB84C422609C05005082AA /* SPProposeController.swift in Sources */,
F4DB84EC22609C05005082AA /* SPApp.swift in Sources */,
F4DB850722609C05005082AA /* SPCodeSystemIconPack.swift in Sources */,
@@ -1034,28 +1034,28 @@
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 */,
F4DB83EE22609A1E005082AA /* SPStorkCloseView.swift in Sources */,
F4DB84A322609C05005082AA /* SPTableViewCell.swift in Sources */,
F4DB83E922609A1E005082AA /* SPStorkPresentationController.swift in Sources */,
F4DB849F22609C05005082AA /* SPMengTransformTableViewCell.swift in Sources */,
F4DB849C22609C05005082AA /* SPFormFeaturedTitleTableViewCell.swift in Sources */,
F4DB84ED22609C05005082AA /* SPAppBadge.swift in Sources */,
F4DB84F422609C05005082AA /* SPMail.swift in Sources */,
F4DB83E822609A1E005082AA /* SPStorkPresentingAnimationController.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 */,
F4DB83EC22609A1E005082AA /* SPStorkCloseButton.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 */,
F4DB84CD22609C05005082AA /* SPMengTransformCollectionView.swift in Sources */,
F445CA8721AED92600184254 /* AppDelegate.swift in Sources */,
F4DB84A422609C05005082AA /* SPTableView.swift in Sources */,
@@ -1071,29 +1071,30 @@
F4DB84E822609C05005082AA /* SPUIImageViewExtenshion.swift in Sources */,
F4DB84D422609C05005082AA /* SPUITableViewCellExtenshion.swift in Sources */,
F4DB84AB22609C05005082AA /* SPDownloadingButton.swift in Sources */,
F4DB851122609C3A005082AA /* SPFakeBarView.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 */,
F4DB84BB22609C05005082AA /* SPBlurView.swift in Sources */,
F4DB83E722609A1E005082AA /* SPStorkTransitioningDelegate.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 */,
F4DB83E522609A1E005082AA /* SPStorkCodeDraw.swift in Sources */,
F4DB84D322609C05005082AA /* SPUIAlertControllerExtenshion.swift in Sources */,
F4DB84CA22609C05005082AA /* SPMengTransformCollectionViewCell.swift in Sources */,
F4DB849722609C05005082AA /* SPPromoTableViewCell.swift in Sources */,
F4DB83EF22609A1E005082AA /* SPStorkControllerDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1241,7 +1242,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = "by.ivanvorobei.stork-controller";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.2;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
};
name = Debug;
@@ -1260,7 +1261,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = "by.ivanvorobei.stork-controller";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.2;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
};
name = Release;
@@ -29,7 +29,6 @@ class Controller: UIViewController {
let modal = ModalViewController()
let transitionDelegate = SPStorkTransitioningDelegate()
modal.transitioningDelegate = transitionDelegate
transitionDelegate.hapticMoments
modal.modalPresentationStyle = .custom
self.present(modal, animated: true, completion: nil)
}
@@ -58,7 +58,7 @@ public struct SPStorkController {
}
}
static var topScrollIndicatorInset: CGFloat {
static public var topScrollIndicatorInset: CGFloat {
return 6
}
@@ -52,7 +52,7 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
private var workGester: Bool = false
private var startDismissing: Bool = false
var afterReleaseDismissing: Bool = false
private var afterReleaseDismissing: Bool = false
private var topSpace: CGFloat {
let statusBarHeight: CGFloat = UIApplication.shared.statusBarFrame.height
@@ -64,7 +64,7 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
private var scaleForPresentingView: CGFloat {
guard let containerView = containerView else { return 0 }
let factor = 1 - (self.topSpace * 2 / containerView.frame.height)
let factor = 1 - ((self.cornerRadius + 2) * 2 / containerView.frame.width)
return factor
}
@@ -371,7 +371,7 @@ extension SPStorkPresentationController {
guard self.hideIndicatorWhenScroll else { return }
let newAlpha: CGFloat = visible ? 1 : 0
if forse {
self.indicatorView.removeAllAnimations()
self.indicatorView.layer.removeAllAnimations()
self.indicatorView.alpha = newAlpha
return
}
+134 -59
View File
@@ -1,46 +1,67 @@
<img src="https://github.com/IvanVorobei/SPStorkController/blob/master/Resources/Banner.svg"/>
# SPStorkController
Modal controller like in Mail or Apple Music application. Similar animation and transition. I tried to recreate all the animations, corner radius and frames. Controller supports gestures and Navigation Bar and works with ScrollView. You can watch [how to use pod tutorial](https://youtu.be/wOTNGswT2-0) on YouTube.
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 ★**
Preview GIF is loading `3mb`. Please, wait.
### Preview
<img src="https://github.com/IvanVorobei/SPStorkController/blob/master/Resources/Preview.gif" width="500">
<img src="https://github.com/IvanVorobei/SPStorkController/blob/master/Resources/Preview.gif" width="440">
You can download example [from AppStore](https://itunes.apple.com/app/id1446635818) or see [video preview](https://xcode-shop.com/assets/preview/debts.mov). If you want to buy source code of the full app (plus app for Apple Watch), please go to [xcode-shop.com](https://xcode-shop.com). Price: $200 only GitHub users!
If you want to **buy source code** of this apps, please, go to [xcode-shop.com](https://xcode-shop.com).
<img src="https://github.com/IvanVorobei/SPStorkController/blob/master/Resources/Shop.svg"/>
## Navigate
I have a store where I sell applications and modules for Xcode projects. You can find source codes of applications or custom animations / UI. I regularly update the code. Visit my website to see all items for sale: [xcode-shop.com](https://xcode-shop.com). On the website you can find previews and for some items links to AppStore.
<img src="https://github.com/IvanVorobei/SPStorkController/blob/master/Resources/Shop.svg"/>
- [Requirements](#requirements)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Usage](#usage)
- [Light StatusBar](#light-statusbar)
- [Custom Height](#custom-height)
- [Close Button](#close-button)
- [Indicator](#indicator)
- [Dismissing](#dismissing)
- [Corner Radius](#corner-radius)
- [Haptic](#haptic)
- [Snapshots](#snapshots)
- [Add Navigation Bar](#add-navigation-bar)
- [Working with UIScrollView](#working-with-uiscrollview)
- [UITableView & UICollectionView](#working-with-uitableview--uicollectionview)
- [Delegate](#delegate)
- [Video Tutorial](#video-tutorial)
- [Other Projects (+gif)](#my-projects)
- [SPAlert](#spalert)
- [SPLarkController](#splarkcontroller)
- [SPPermission](#sppermission)
- [Xcode Shop](#xcode-shop)
- [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
#### CocoaPods:
### CocoaPods:
You can use [CocoaPods](http://cocoapods.org/) to install `SPStorkController` by adding it to your `Podfile`:
[CocoaPods](https://cocoapods.org) is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate `SPStorkController` into your Xcode project using CocoaPods, specify it in your `Podfile`:
```ruby
pod 'SPStorkController'
```
#### Carthage
### Carthage
You can use [Carthage](https://github.com/Carthage/Carthage) to install `SPStorkController` by adding it to your `Cartfile`:
[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"
```
For now `Carthage` support may not work correctly. If you have any problems, create a new [issue](https://github.com/IvanVorobei/SPStorkController/issues).
### Manually
#### Manually
Put `Source/SPStorkController` folder in your Xcode project. Make sure to enable `Copy items if needed` and `Create groups`.
If you prefer not to use any of the aforementioned dependency managers, you can integrate `SPStorkController` into your project manually. Put `Source/SPStorkController` folder in your Xcode project. Make sure to enable `Copy items if needed` and `Create groups`.
## Usage
## Quick Start
Create controller and call func `presentAsStork`:
@@ -78,17 +99,11 @@ controller.transitioningDelegate = SPStorkTransitioningDelegate()
You will get an error about weak property.
### Video Tutorial
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:
[![Tutorial on YouTube](https://github.com/IvanVorobei/SPStorkController/blob/master/Resources/YouTube.jpg)](https://youtu.be/wOTNGswT2-0)
On my [YouTube channel](http://youtube.com/ivanvorobei) you can find videos about Xcode and Design. I would appreciate it if you like and subscribe. If you do not want to watch the video, I wrote a small wiki below.
## Usage
### Light StatusBar
To set `light` status bar for presented controller, use `preferredStatusBarStyle` property. Also set `modalPresentationCapturesStatusBarAppearance`. See example:
To set light status bar for presented controller, use `preferredStatusBarStyle` property. Also set `modalPresentationCapturesStatusBarAppearance`. See example:
```swift
import UIKit
@@ -101,70 +116,91 @@ class ModalViewController: UIViewController {
}
```
### Parameters
### Custom Height
Property `customHeight` sets custom height for controller. Default is `nil`:
- Parameter `customHeight` sets custom height for modal controller. Default is `nil`:
```swift
transitionDelegate.customHeight = 350
```
- Parameter `swipeToDismissEnabled` enables dismissal by swipe gesture. Default is `true`:
### Close Button
Property `showCloseButton` added circle button with dismiss action. Default is `false`:
```swift
transitionDelegate.showCloseButton = false
```
### Indicator
On the top of controller you can add arrow indicator with animatable states. It simple configure.
Property `showIndicator` shows or hides top arrow indicator. Default is `true`:
```swift
transitionDelegate.showIndicator = true
```
Property Parameter `indicatorColor` for customize color of arrow. Default is `gray`:
```swift
transitionDelegate.indicatorColor = UIColor.white
```
Property `hideIndicatorWhenScroll` shows or hides indicator when scrolling. Default is `false`:
```swift
transitionDelegate.hideIndicatorWhenScroll = true
```
### Dismissing
You can also configure events that will dimiss the controller.
Property `swipeToDismissEnabled` enables dismissal by swipe gesture. Default is `true`:
```swift
transitionDelegate.swipeToDismissEnabled = true
```
- Parameter `translateForDismiss` sets how much need to swipe down to close the controller. Work only if `swipeToDismissEnabled` is true. Default is `240`:
Property `translateForDismiss` sets how much need to swipe down to close the controller. Work only if `swipeToDismissEnabled` is true. Default is `240`:
```swift
transitionDelegate.translateForDismiss = 100
```
- Parameter `tapAroundToDismissEnabled` enables dismissal by tapping parent controller. Default is `true`:
Property `tapAroundToDismissEnabled` enables dismissal by tapping parent controller. Default is `true`:
```swift
transitionDelegate.tapAroundToDismissEnabled = true
```
- Parameter `showCloseButton` added circle button with dismiss action. Default is `false`:
```swift
transitionDelegate.showCloseButton = false
```
- Parameter `showIndicator` shows or hides top arrow indicator. Default is `true`:
```swift
transitionDelegate.showIndicator = true
```
### Corner Radius
- Parameter `indicatorColor` for customize color of arrow. Default is `gray`:
```swift
transitionDelegate.indicatorColor = UIColor.white
```
Property `cornerRadius` for customize corner radius of controller's view. Default is `10`:
- Parameter `hideIndicatorWhenScroll` shows or hides indicator when scrolling. Default is `false`:
```swift
transitionDelegate.hideIndicatorWhenScroll = true
```
- Parameter `cornerRadius` for customize corner radius of controller's view. Default is `10`:
```swift
transitionDelegate.cornerRadius = 10
```
- Parameter `hapticMoments` allow add taptic feedback for some moments. Default is `.willDismissIfRelease`:
### Haptic
Property `hapticMoments` allow add taptic feedback for some moments. Default is `.willDismissIfRelease`:
```swift
transitionDelegate.hapticMoments = [.willPresent, .willDismiss]
```
### Snapshots
The project uses a snapshot of the screen in order to avoid compatibility and customization issues. Before controller presentation, a snapshot of the parent view is made, and size and position are changed for the snapshot. Sometimes you will need to update the screenshot of the parent view, for that use static func:
The project uses a snapshot of the screen in order to avoid compatibility and customisation issues. Before controller presentation, a snapshot of the parent view is made, and size and position are changed for the snapshot. Sometimes you will need to update the screenshot of the parent view, for that use static func:
```swift
SPStorkController.updatePresentingController(modal: controller)
```
and pass the controller, which is modal and uses `SPStorkTransitioningDelegate`
and pass the controller, which is modal and uses `SPStorkTransitioningDelegate`.
### Add Navigation Bar
You may want to add a navigation bar to your modal controller. Since it became impossible to change or customize the native controller in swift 4 (I couldnt even find a way to change the height of the bar), I had to recreate navigation bar from the ground up. Visually it looks real, but it doesnt execute the necessary functions:
```swift
@@ -193,7 +229,7 @@ You only need to add a navigation bar to the main view, it will automatically la
<img src="https://github.com/IvanVorobei/SPStorkController/blob/master/Resources/Navigation%20Bar.jpg"/>
To use `SPFakeBarView` 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'
@@ -201,7 +237,7 @@ pod 'SPFakeBar'
### Working with UIScrollView
If you use `UIScrollView` (or UITableView & UICollectionView) on your controller, I recommend making it more interactive. When scrolling reaches the top position, the controller will interactively drag down, simulating a closing animation. Also available close controller by drag down on `UIScrollView`. To do this, set the delegate and in the function `scrollViewDidScroll` call:
If you use `UIScrollView` (or UITableView & UICollectionView) on controller, I recommend making it more interactive. When scrolling reaches the top position, the controller will interactively drag down, simulating a closing animation. Also available close controller by drag down on `UIScrollView`. To do this, set the delegate and in the function `scrollViewDidScroll` call:
```swift
func scrollViewDidScroll(_ scrollView: UIScrollView) {
@@ -230,7 +266,18 @@ You can check events by implement `SPStorkControllerDelegate` and set delegate f
transitionDelegate.storkDelegate = self
```
### Modal presentation of different controller
Delagate has this functions:
```swift
protocol SPStorkControllerDelegate: class {
optional func didDismissStorkBySwipe()
optional func didDismissStorkByTap()
}
```
### Modal presentation of other controller
If you want to present modal controller on SPStorkController, please set:
@@ -240,18 +287,46 @@ controller.modalPresentationStyle = .custom
Its needed for correct presentation and dismissal of all modal controllers.
## Video Tutorial
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:
[![Tutorial on YouTube](https://github.com/IvanVorobei/SPStorkController/blob/master/Resources/YouTube.jpg)](https://youtu.be/wOTNGswT2-0)
## My projects
Here I would like to offer you my other projects.
### 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.
<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 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).
### 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.
<img src="https://github.com/IvanVorobei/SPLarkController/blob/master/Resources/Preview.gif" width="440">
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).
### SPPermission
Project [SPPermission](https://github.com/IvanVorobei/SPPermission) for managing permissions with customizable visual effects. Beautiful dialog increases the chance of approval (which is important when we request notification). Simple control of this module saves you hours of development. You can start using project with just two lines of code and easy customization!
[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.
## 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. I develop iOS apps and create designs, too. I use `swift` for development. To request more functionality, you should create a new issue.
Here are my apps in AppStore: [first account](https://itunes.apple.com/us/developer/polina-zubarik/id1434528595) & [second account](https://itunes.apple.com/us/developer/mikalai-varabei/id1435792103).
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).
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 28 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.1 KiB

+3 -3
View File
@@ -1,8 +1,8 @@
Pod::Spec.new do |s|
s.name = "SPStorkController"
s.version = "1.6.1"
s.summary = "Modal controller as mail or Apple music application"
s.version = "1.6.2"
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 }
s.license = { :type => "MIT", :file => "LICENSE" }
@@ -11,7 +11,7 @@ Pod::Spec.new do |s|
s.platform = :ios
s.ios.framework = 'UIKit'
s.swift_version = '4.2', '5.0'
s.swift_version = ['4.2', '5.0']
s.ios.deployment_target = "10.0"
s.source_files = "Source/SPStorkController/**/*.swift"
@@ -58,7 +58,7 @@ public struct SPStorkController {
}
}
static var topScrollIndicatorInset: CGFloat {
static public var topScrollIndicatorInset: CGFloat {
return 6
}
@@ -64,7 +64,7 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
private var scaleForPresentingView: CGFloat {
guard let containerView = containerView else { return 0 }
let factor = 1 - (self.topSpace * 2 / containerView.frame.height)
let factor = 1 - ((self.cornerRadius + 2) * 2 / containerView.frame.width)
return factor
}