Skip to content

Commit aa9db4a

Browse files
authored
Features/right nav bar item and some bug fixes (#80)
- Right nav bar item and some bug fixes - added spacing between images
1 parent 41ce134 commit aa9db4a

9 files changed

+85
-16
lines changed

Example/Demo/BasicViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class BasicViewController:UIViewController {
55

66
lazy var imageView:UIImageView = {
77
let iv = UIImageView()
8-
iv.image = Data.images[0].resize(targetSize: .thumbnail)
8+
iv.image = Data.images[0]
99

1010
// Setup Image Viewer
1111
iv.setupImageViewer()

Example/Demo/Data.swift

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,22 @@ struct Data {
77
"cat2",
88
"cat3",
99
"cat4",
10-
"cat5"
10+
"cat5",
11+
"cat1",
12+
"cat2",
13+
"cat3",
14+
"cat4",
15+
"cat5",
16+
"cat1",
17+
"cat2",
18+
"cat3",
19+
"cat4",
20+
"cat5",
21+
"cat1",
22+
"cat2",
23+
"cat3",
24+
"cat4",
25+
"cat5",
1126
]
1227

1328
static let images:[UIImage] = Self.imageNames.compactMap { UIImage(named: $0)! }

Example/Demo/ExampleListViewController.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ class ExampleListViewController:UITableViewController {
3838

3939
var items:[ExampleType] = ExampleType.allCases
4040

41+
override func viewDidLoad() {
42+
super.viewDidLoad()
43+
title = "ImageViewer.swift"
44+
}
45+
4146
override func numberOfSections(in tableView: UITableView) -> Int {
4247
return 1
4348
}

Example/Demo/WithURLsViewController.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,18 @@ extension WithURLsViewController:UICollectionViewDataSource {
9292
// Setup Image Viewer with [URL]
9393
cell.imageView.setupImageViewer(
9494
urls: Data.imageUrls,
95-
initialIndex: indexPath.item)
95+
initialIndex: indexPath.item,
96+
options: [
97+
.theme(.dark),
98+
.rightNavItemTitle("Info", delegate: self)
99+
])
96100

97101
return cell
98102
}
99103
}
104+
105+
extension WithURLsViewController:RightNavItemDelegate {
106+
func imageViewer(_ imageViewer: ImageCarouselViewController, didTapRightNavItem index: Int) {
107+
print("TAPPED", index)
108+
}
109+
}

Sources/ImageCarouselViewController.swift

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ public protocol ImageDataSource:class {
55
func imageItem(at index:Int) -> ImageItem
66
}
77

8-
class ImageCarouselViewController:UIPageViewController {
8+
public class ImageCarouselViewController:UIPageViewController {
99

1010
weak var imageDatasource:ImageDataSource?
1111
var initialIndex = 0
@@ -19,6 +19,8 @@ class ImageCarouselViewController:UIPageViewController {
1919

2020
var options:[ImageViewerOption] = []
2121

22+
weak var rightNavItemDelegate:RightNavItemDelegate?
23+
2224
private(set) lazy var navBar:UINavigationBar = {
2325
let _navBar = UINavigationBar(frame: .zero)
2426
_navBar.isTranslucent = true
@@ -61,15 +63,29 @@ class ImageCarouselViewController:UIPageViewController {
6163

6264
options.forEach {
6365
switch $0 {
64-
case .theme(let theme):
65-
self.theme = theme
66-
case .closeIcon(let icon):
67-
navItem.leftBarButtonItem?.image = icon
66+
case .theme(let theme):
67+
self.theme = theme
68+
case .closeIcon(let icon):
69+
navItem.leftBarButtonItem?.image = icon
70+
case .rightNavItemTitle(let title, let delegate):
71+
navItem.rightBarButtonItem = UIBarButtonItem(
72+
title: title,
73+
style: .plain,
74+
target: self,
75+
action: #selector(diTapRightNavBarItem(_:)))
76+
rightNavItemDelegate = delegate
77+
case .rightNavItemIcon(let icon, let delegate):
78+
navItem.rightBarButtonItem = UIBarButtonItem(
79+
image: icon,
80+
style: .plain,
81+
target: self,
82+
action: #selector(diTapRightNavBarItem(_:)))
83+
rightNavItemDelegate = delegate
6884
}
6985
}
7086
}
7187

72-
override func viewDidLoad() {
88+
override public func viewDidLoad() {
7389
super.viewDidLoad()
7490

7591
addBackgroundView()
@@ -92,24 +108,36 @@ class ImageCarouselViewController:UIPageViewController {
92108
setViewControllers([initialVC], direction: .forward, animated: true, completion: nil)
93109
}
94110

95-
override func viewDidAppear(_ animated: Bool) {
111+
override public func viewDidAppear(_ animated: Bool) {
96112
super.viewDidAppear(animated)
97113
UIView.animate(withDuration: 0.235) {
98114
self.navBar.alpha = 1.0
99115
}
100116
}
101117

102118
@objc
103-
func dismiss(_ sender:UIBarButtonItem?) {
119+
private func dismiss(_ sender:UIBarButtonItem) {
120+
dismissMe(completion: nil)
121+
}
122+
123+
public func dismissMe(completion: (() -> Void)? = nil) {
104124
sourceView.alpha = 1.0
105125
UIView.animate(withDuration: 0.235, animations: {
106126
self.view.alpha = 0.0
107127
}) { _ in
108-
self.dismiss(animated: false, completion: nil)
128+
self.dismiss(animated: false, completion: completion)
109129
}
110130
}
111131

112-
override var preferredStatusBarStyle: UIStatusBarStyle {
132+
@objc
133+
func diTapRightNavBarItem(_ sender:UIBarButtonItem) {
134+
guard let _delegate = rightNavItemDelegate,
135+
let _firstVC = viewControllers?.first as? ImageViewerController
136+
else { return }
137+
_delegate.imageViewer(self, didTapRightNavItem: _firstVC.index)
138+
}
139+
140+
override public var preferredStatusBarStyle: UIStatusBarStyle {
113141
if theme == .dark {
114142
return .lightContent
115143
}
@@ -118,7 +146,7 @@ class ImageCarouselViewController:UIPageViewController {
118146
}
119147

120148
extension ImageCarouselViewController:UIPageViewControllerDataSource {
121-
func pageViewController(
149+
public func pageViewController(
122150
_ pageViewController: UIPageViewController,
123151
viewControllerBefore viewController: UIViewController) -> UIViewController? {
124152

@@ -135,7 +163,7 @@ extension ImageCarouselViewController:UIPageViewControllerDataSource {
135163
delegate: self)
136164
}
137165

138-
func pageViewController(
166+
public func pageViewController(
139167
_ pageViewController: UIPageViewController,
140168
viewControllerAfter viewController: UIViewController) -> UIViewController? {
141169

Sources/ImageViewerController.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ class ImageViewerController:UIViewController, UIGestureRecognizerDelegate {
116116

117117
override func viewWillLayoutSubviews() {
118118
super.viewWillLayoutSubviews()
119+
updateConstraintsForSize(view.bounds.size)
119120
updateMinMaxZoomScaleForSize(view.bounds.size)
120121
}
121122

Sources/ImageViewerOption.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ public enum ImageViewerOption {
44

55
case theme(ImageViewerTheme)
66
case closeIcon(UIImage)
7+
case rightNavItemTitle(String, delegate: RightNavItemDelegate?)
8+
case rightNavItemIcon(UIImage, delegate: RightNavItemDelegate?)
79
}

Sources/RightNavItemDelegate.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
public protocol RightNavItemDelegate:class {
3+
func imageViewer(_ imageViewer: ImageCarouselViewController, didTapRightNavItem index:Int)
4+
}

Sources/UIImageView_Extensions.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,14 @@ extension UIImageView {
109109
@objc
110110
private func showImageViewer(_ sender:TapWithDataRecognizer) {
111111
guard let sourceView = sender.view as? UIImageView else { return }
112+
113+
let options = [UIPageViewController.OptionsKey.interPageSpacing: 20]
114+
112115
let imageCarousel = ImageCarouselViewController(
113116
transitionStyle: .scroll,
114117
navigationOrientation: .horizontal,
115-
options: nil)
118+
options: options)
119+
116120
imageCarousel.sourceView = sourceView
117121
imageCarousel.imageDatasource = sender.imageDatasource
118122
imageCarousel.initialIndex = sender.initialIndex

0 commit comments

Comments
 (0)