Skip to content

Commit 8348cd6

Browse files
committed
Update to 1.7.2
Fix bugs with events delegate.
1 parent 9f4c1be commit 8348cd6

8 files changed

Lines changed: 138 additions & 141 deletions

File tree

Example/stork-controller/Frameworks/SPStorkController/SPStorkController.swift

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -35,32 +35,9 @@ public enum SPStorkController {
3535
presentationController.setIndicator(style: scrollView.isTracking ? .line : .arrow)
3636
if translation >= presentationController.translateForDismiss * 0.4 {
3737
if !scrollView.isTracking && !scrollView.isDragging {
38-
39-
let dismiss = {
40-
presentationController.presentedViewController.dismiss(animated: true, completion: {
41-
presentationController.storkDelegate?.didDismissStorkBySwipe?()
42-
})
43-
}
44-
45-
guard let confirmDelegate = presentationController.confirmDelegate else {
46-
dismiss()
47-
return
48-
}
49-
50-
if presentationController.workConfirmation { return }
51-
52-
if confirmDelegate.needConfirm {
53-
presentationController.workConfirmation = true
54-
confirmDelegate.confirm({ (isConfirmed) in
55-
presentationController.workConfirmation = false
56-
if isConfirmed {
57-
dismiss()
58-
}
59-
})
60-
} else {
61-
dismiss()
62-
}
63-
38+
presentationController.dismissWithConfirmation(prepare: nil, completion: {
39+
presentationController.storkDelegate?.didDismissStorkBySwipe?()
40+
})
6441
return
6542
}
6643
}

Example/stork-controller/Frameworks/SPStorkController/TransitioningDelegate/SPStorkPresentationController.swift

Lines changed: 60 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
5050
private var snapshotViewTopConstraint: NSLayoutConstraint?
5151
private var snapshotViewWidthConstraint: NSLayoutConstraint?
5252
private var snapshotViewAspectRatioConstraint: NSLayoutConstraint?
53-
53+
5454
var workConfirmation: Bool = false
5555
private var workGester: Bool = false
5656
private var startDismissing: Bool = false
@@ -107,7 +107,7 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
107107

108108
if self.showIndicator {
109109
self.indicatorView.color = self.indicatorColor
110-
let tap = UITapGestureRecognizer.init(target: self, action: #selector(self.dismissAction))
110+
let tap = UITapGestureRecognizer.init(target: self, action: #selector(self.tapIndicator))
111111
tap.cancelsTouchesInView = false
112112
self.indicatorView.addGestureRecognizer(tap)
113113
presentedView.addSubview(self.indicatorView)
@@ -122,7 +122,7 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
122122
self.gradeView.alpha = 0
123123

124124
if self.showCloseButton {
125-
self.closeButton.addTarget(self, action: #selector(self.dismissAction), for: .touchUpInside)
125+
self.closeButton.addTarget(self, action: #selector(self.tapCloseButton), for: .touchUpInside)
126126
presentedView.addSubview(self.closeButton)
127127
}
128128
self.updateLayoutCloseButton()
@@ -209,7 +209,7 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
209209
self.updateSnapshotAspectRatio()
210210

211211
if self.tapAroundToDismissEnabled {
212-
self.tap = UITapGestureRecognizer.init(target: self, action: #selector(self.dismissAction))
212+
self.tap = UITapGestureRecognizer.init(target: self, action: #selector(self.tapArround))
213213
self.tap?.cancelsTouchesInView = false
214214
self.snapshotViewContainer.addGestureRecognizer(self.tap!)
215215
}
@@ -223,21 +223,13 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
223223
}
224224
}
225225

226-
@objc func dismissAction() {
227-
self.presentingViewController.view.endEditing(true)
228-
self.presentedViewController.view.endEditing(true)
229-
self.presentedViewController.dismiss(animated: true, completion: {
230-
self.storkDelegate?.didDismissStorkByTap?()
231-
})
232-
}
233-
234226
override func dismissalTransitionWillBegin() {
235227
super.dismissalTransitionWillBegin()
236228
guard let containerView = containerView else { return }
237229
self.startDismissing = true
238230

239231
let initialFrame: CGRect = presentingViewController.isPresentedAsStork ? presentingViewController.view.frame : containerView.bounds
240-
232+
241233
let initialTransform = CGAffineTransform.identity
242234
.translatedBy(x: 0, y: -initialFrame.origin.y)
243235
.translatedBy(x: 0, y: self.topSpace)
@@ -314,6 +306,56 @@ class SPStorkPresentationController: UIPresentationController, UIGestureRecogniz
314306

315307
extension SPStorkPresentationController {
316308

309+
@objc func tapIndicator() {
310+
self.dismissWithConfirmation(prepare: nil, completion: {
311+
self.storkDelegate?.didDismissStorkByTap?()
312+
})
313+
}
314+
315+
@objc func tapArround() {
316+
self.dismissWithConfirmation(prepare: nil, completion: {
317+
self.storkDelegate?.didDismissStorkByTap?()
318+
})
319+
}
320+
321+
@objc func tapCloseButton() {
322+
self.dismissWithConfirmation(prepare: nil, completion: {
323+
self.storkDelegate?.didDismissStorkByTap?()
324+
})
325+
}
326+
327+
public func dismissWithConfirmation(prepare: (()->())?, completion: (()->())?) {
328+
329+
let dismiss = {
330+
self.presentingViewController.view.endEditing(true)
331+
self.presentedViewController.view.endEditing(true)
332+
self.presentedViewController.dismiss(animated: true, completion: {
333+
completion?()
334+
})
335+
}
336+
337+
guard let confirmDelegate = self.confirmDelegate else {
338+
dismiss()
339+
return
340+
}
341+
342+
if self.workConfirmation { return }
343+
344+
if confirmDelegate.needConfirm {
345+
prepare?()
346+
self.workConfirmation = true
347+
confirmDelegate.confirm({ (isConfirmed) in
348+
self.workConfirmation = false
349+
self.afterReleaseDismissing = false
350+
if isConfirmed {
351+
dismiss()
352+
}
353+
})
354+
} else {
355+
dismiss()
356+
}
357+
}
358+
317359
@objc func handlePan(gestureRecognizer: UIPanGestureRecognizer) {
318360
guard gestureRecognizer.isEqual(self.pan), self.swipeToDismissEnabled else { return }
319361

@@ -337,7 +379,7 @@ extension SPStorkPresentationController {
337379
self.workGester = false
338380
let translation = gestureRecognizer.translation(in: presentedView).y
339381

340-
let returnToDefault = {
382+
let toDefault = {
341383
self.indicatorView.style = .arrow
342384
UIView.animate(
343385
withDuration: 0.6,
@@ -352,36 +394,12 @@ extension SPStorkPresentationController {
352394
})
353395
}
354396

355-
let dismissBySwipe = {
356-
self.presentedViewController.dismiss(animated: true, completion: {
397+
if translation >= self.translateForDismiss {
398+
self.dismissWithConfirmation(prepare: toDefault, completion: {
357399
self.storkDelegate?.didDismissStorkBySwipe?()
358400
})
359-
}
360-
361-
if translation >= self.translateForDismiss {
362-
363-
guard let confirmDelegate = self.confirmDelegate else {
364-
dismissBySwipe()
365-
return
366-
}
367-
368-
if self.workConfirmation { return }
369-
370-
if confirmDelegate.needConfirm {
371-
returnToDefault()
372-
self.workConfirmation = true
373-
confirmDelegate.confirm({ (isConfirmed) in
374-
self.workConfirmation = false
375-
self.afterReleaseDismissing = false
376-
if isConfirmed {
377-
dismissBySwipe()
378-
}
379-
})
380-
} else {
381-
dismissBySwipe()
382-
}
383401
} else {
384-
returnToDefault()
402+
toDefault()
385403
}
386404
default:
387405
break
@@ -432,7 +450,7 @@ extension SPStorkPresentationController {
432450

433451
let elasticThreshold: CGFloat = 120
434452
let translationFactor: CGFloat = 1 / 2
435-
453+
436454
if translation >= 0 {
437455
let translationForModal: CGFloat = {
438456
if translation >= elasticThreshold {

Example/stork-controller/ModalTableViewController.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,11 @@ class ModalTableViewController: UIViewController {
4949
}
5050

5151
@objc func dismissAction() {
52-
self.dismiss()
52+
if let storkPresentationController = self.presentationController as? SPStorkPresentationController {
53+
storkPresentationController.dismissWithConfirmation(prepare: nil, completion: {
54+
print("Custom completion for confirmation. Confirmation is optional.")
55+
})
56+
}
5357
}
5458
}
5559

@@ -86,7 +90,6 @@ extension ModalTableViewController: SPStorkControllerConfirmDelegate {
8690
}
8791

8892
func confirm(_ completion: @escaping (Bool) -> ()) {
89-
print("confirm")
9093
let alertController = UIAlertController(title: "Need dismiss?", message: "It test confirm option for SPStorkController", preferredStyle: .actionSheet)
9194
alertController.addDestructiveAction(title: "Confirm", complection: {
9295
completion(true)

Example/stork-controller/ModalViewController.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ class ModalViewController: UIViewController {
2020
}
2121

2222
@objc func dismissAction() {
23-
self.dismiss()
23+
if let storkPresentationController = self.presentationController as? SPStorkPresentationController {
24+
storkPresentationController.dismissWithConfirmation(prepare: nil, completion: {
25+
print("Custom completion for confirmation. Confirmation is optional.")
26+
})
27+
}
2428
}
2529

2630
override func viewWillAppear(_ animated: Bool) {
@@ -35,7 +39,7 @@ class ModalViewController: UIViewController {
3539
extension ModalViewController: SPStorkControllerConfirmDelegate {
3640

3741
var needConfirm: Bool {
38-
return false
42+
return true
3943
}
4044

4145
func confirm(_ completion: @escaping (Bool) -> ()) {

SPStorkController.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Pod::Spec.new do |s|
22

33
s.name = "SPStorkController"
4-
s.version = "1.7.1"
4+
s.version = "1.7.2"
55
s.summary = "Very similar to the controllers displayed in Apple Music, Podcasts and Mail Apple's applications."
66
s.homepage = "https://github.com/IvanVorobei/SPStorkController"
77
s.source = { :git => "https://github.com/IvanVorobei/SPStorkController.git", :tag => s.version }

Source/SPStorkController/SPStorkController.swift

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -35,32 +35,9 @@ public enum SPStorkController {
3535
presentationController.setIndicator(style: scrollView.isTracking ? .line : .arrow)
3636
if translation >= presentationController.translateForDismiss * 0.4 {
3737
if !scrollView.isTracking && !scrollView.isDragging {
38-
39-
let dismiss = {
40-
presentationController.presentedViewController.dismiss(animated: true, completion: {
41-
presentationController.storkDelegate?.didDismissStorkBySwipe?()
42-
})
43-
}
44-
45-
guard let confirmDelegate = presentationController.confirmDelegate else {
46-
dismiss()
47-
return
48-
}
49-
50-
if presentationController.workConfirmation { return }
51-
52-
if confirmDelegate.needConfirm {
53-
presentationController.workConfirmation = true
54-
confirmDelegate.confirm({ (isConfirmed) in
55-
presentationController.workConfirmation = false
56-
if isConfirmed {
57-
dismiss()
58-
}
59-
})
60-
} else {
61-
dismiss()
62-
}
63-
38+
presentationController.dismissWithConfirmation(prepare: nil, completion: {
39+
presentationController.storkDelegate?.didDismissStorkBySwipe?()
40+
})
6441
return
6542
}
6643
}

0 commit comments

Comments
 (0)