Skip to content

Commit 6412b36

Browse files
committed
update sources
1 parent a717367 commit 6412b36

10 files changed

+675
-8
lines changed

MHFacebookImageViewer.podspec

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
Pod::Spec.new do |s|
22
s.name = 'MHFacebookImageViewer'
3-
s.version = '1.0'
3+
s.version = ENV['LIB_VERSION'] || '3.0'
44
s.summary = 'A new Image Viewer inspired by Facebook.'
55
s.homepage = 'https://github.com/michaelhenry/MHFacebookImageViewer'
6-
s.author = 'Michael Henry Pantaleon', 'michaelhenry119@yahoo.com.ph'
6+
s.author = 'Michael Henry Pantaleon', 'me@iamkel.net'
77
s.source = {
88
:git => 'https://github.com/michaelhenry/MHFacebookImageViewer.git',
99
:tag => s.version.to_s
1010
}
11-
s.platform = :ios, '5.0'
12-
s.source_files = 'MHFBImageViewController/*.{h,m}'
13-
s.resources = 'MHFBImageViewController/Resources/*.png'
14-
s.frameworks = 'UIKit', 'QuartzCore'
11+
s.source_files = 'Sources/*'
1512
s.requires_arc = true
16-
s.dependency 'AFNetworking', '~> 2.4.1'
17-
s.license = {
13+
s.dependency 'SDWebImage'
14+
s.ios.deployment_target = '10.0'
15+
s.swift_versions = ['4.2','5.0']
16+
s.license = {
1817
:type => 'MIT',
1918
:text => <<-LICENSE
2019
Copyright (c) 2013 Michael Henry Pantaleon (http://www.iamkel.net). All rights reserved.
@@ -24,6 +23,7 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of
2423
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
2524
2625
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.
26+
2727
LICENSE
2828
}
2929
end
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
import UIKit
2+
3+
public protocol ImageDataSource:class {
4+
func numberOfImages() -> Int
5+
func imageItem(at index:Int) -> ImageItem
6+
}
7+
8+
class ImageCarouselViewController:UIPageViewController {
9+
10+
weak var imageDatasource:ImageDataSource?
11+
var initialIndex = 0
12+
var sourceView:UIImageView!
13+
var theme:ImageViewerTheme = .light {
14+
didSet {
15+
navItem.leftBarButtonItem?.tintColor = theme.tintColor
16+
backgroundView.backgroundColor = theme.color
17+
}
18+
}
19+
20+
var options:[ImageViewerOption] = []
21+
22+
private(set) lazy var navBar:UINavigationBar = {
23+
let _navBar = UINavigationBar(frame: .zero)
24+
_navBar.isTranslucent = true
25+
_navBar.setBackgroundImage(UIImage(), for: .default)
26+
_navBar.shadowImage = UIImage()
27+
return _navBar
28+
}()
29+
30+
private(set) lazy var backgroundView:UIView = {
31+
let _v = UIView()
32+
_v.backgroundColor = theme.color
33+
_v.alpha = 0.0
34+
return _v
35+
}()
36+
37+
private(set) lazy var navItem = UINavigationItem()
38+
39+
private func addNavBar() {
40+
// Add Navigation Bar
41+
let closeBarButton = UIBarButtonItem(
42+
title: NSLocalizedString("Close", comment: "Close button title"),
43+
style: .plain,
44+
target: self,
45+
action: #selector(dismiss(_:)))
46+
47+
navItem.leftBarButtonItem = closeBarButton
48+
navItem.leftBarButtonItem?.tintColor = theme.tintColor
49+
50+
navBar.items = [navItem]
51+
navBar.insert(to: view)
52+
}
53+
54+
private func addBackgroundView() {
55+
view.addSubview(backgroundView)
56+
backgroundView.bindFrameToSuperview()
57+
view.sendSubviewToBack(backgroundView)
58+
}
59+
60+
private func applyOptions() {
61+
62+
options.forEach {
63+
switch $0 {
64+
case .theme(let theme):
65+
self.theme = theme
66+
case .closeIcon(let icon):
67+
navItem.leftBarButtonItem?.image = icon
68+
}
69+
}
70+
}
71+
72+
override func viewDidLoad() {
73+
super.viewDidLoad()
74+
75+
addBackgroundView()
76+
addNavBar()
77+
applyOptions()
78+
79+
view.backgroundColor = .clear
80+
dataSource = self
81+
82+
let initialVC = ImageViewerController(sourceView: sourceView)
83+
initialVC.index = initialIndex
84+
initialVC.backgroundView = backgroundView
85+
if let imageDatasource = imageDatasource {
86+
initialVC.imageItem = imageDatasource.imageItem(at: initialIndex)
87+
} else {
88+
// Use the image from source
89+
initialVC.imageItem = .image(sourceView.image)
90+
}
91+
initialVC.animateOnDidAppear = true
92+
initialVC.delegate = self
93+
setViewControllers([initialVC], direction: .forward, animated: true, completion: nil)
94+
}
95+
96+
@objc
97+
func dismiss(_ sender:UIBarButtonItem?) {
98+
sourceView.alpha = 1.0
99+
UIView.animate(withDuration: 0.235, animations: {
100+
self.view.alpha = 0.0
101+
}) { _ in
102+
self.dismiss(animated: false, completion: nil)
103+
}
104+
}
105+
106+
override var preferredStatusBarStyle: UIStatusBarStyle {
107+
if theme == .dark {
108+
return .lightContent
109+
}
110+
return .default
111+
}
112+
}
113+
114+
extension ImageCarouselViewController:UIPageViewControllerDataSource {
115+
func pageViewController(
116+
_ pageViewController: UIPageViewController,
117+
viewControllerBefore viewController: UIViewController) -> UIViewController? {
118+
119+
guard let vc = viewController as? ImageViewerController else { return nil }
120+
guard let imageDatasource = imageDatasource else { return nil }
121+
guard vc.index > 0 else { return nil }
122+
123+
let newIndex = vc.index - 1
124+
let sourceView = newIndex == initialIndex ? self.sourceView : nil
125+
return ImageViewerController.create(
126+
index: newIndex,
127+
imageItem: imageDatasource.imageItem(at: newIndex),
128+
sourceView: sourceView,
129+
backgroundView: backgroundView,
130+
delegate: self)
131+
}
132+
133+
func pageViewController(
134+
_ pageViewController: UIPageViewController,
135+
viewControllerAfter viewController: UIViewController) -> UIViewController? {
136+
137+
guard let vc = viewController as? ImageViewerController else { return nil }
138+
guard let imageDatasource = imageDatasource else { return nil }
139+
guard vc.index <= (imageDatasource.numberOfImages() - 2) else { return nil }
140+
141+
let newIndex = vc.index + 1
142+
let sourceView = newIndex == initialIndex ? self.sourceView : nil
143+
return ImageViewerController.create(
144+
index: newIndex,
145+
imageItem: imageDatasource.imageItem(at: newIndex),
146+
sourceView: sourceView,
147+
backgroundView: backgroundView,
148+
delegate: self)
149+
}
150+
}
151+
152+
extension ImageCarouselViewController:ImageViewerControllerDelegate {
153+
func imageViewerDidClose(_ imageViewer: ImageViewerController) {
154+
sourceView.alpha = 1.0
155+
}
156+
}

Sources/ImageItem.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import UIKit
2+
3+
public enum ImageItem {
4+
case image(UIImage?)
5+
case url(URL, placeholder: UIImage?)
6+
}

0 commit comments

Comments
 (0)