MyConfirmViewController.swift
4.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import UIKit
import Photos
public class MyConfirmViewController: UIViewController {
let imageView = UIImageView()
var vBoard: Board!
@IBOutlet weak var cancelButton: UIButton!
@IBOutlet weak var confirmButton: UIButton!
public var userData: Any?
public var onComplete: CameraViewCompletion?
var asset: PHAsset!
public init(asset: PHAsset) {
self.asset = asset
super.init(nibName: "MyConfirmViewController", bundle: CameraGlobals.shared.bundle)
}
public override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.black
imageView.contentMode = .scaleAspectFit
view.insertSubview(imageView, at: 0)
configUserData()
guard let asset = asset else { return }
let spinner = showSpinner()
disable()
_ = SingleImageFetcher()
.setAsset(asset)
.setTargetSize(largestPhotoSize())
.onSuccess { image in
self.configureWithImage(image)
self.hideSpinner(spinner)
self.enable()
}
.onFailure { error in
self.hideSpinner(spinner)
}
.fetch()
}
fileprivate func configUserData() {
if let boardObj = userData as? BoardObj, let shootItem = boardObj.shootItem, let ctruong = boardObj.cTruong, let singboard = ctruong.signboard {
if (singboard > 0) {
vBoard = Board()
vBoard.translatesAutoresizingMaskIntoConstraints = false
self.view.insertSubview(vBoard, at: 1)
NSLayoutConstraint.activate([vBoard.topAnchor.constraint(equalTo: view.topAnchor),
vBoard.leftAnchor.constraint(equalTo: view.leftAnchor),
vBoard.rightAnchor.constraint(equalTo: view.rightAnchor),
vBoard.bottomAnchor.constraint(equalTo: view.bottomAnchor)])
vBoard.initData(ctruong: ctruong, shootItem: shootItem);
}
}
}
public override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
imageView.frame = view.frame
}
//region utils ========
private func configureWithImage(_ image: UIImage) {
buttonActions()
imageView.image = image
imageView.sizeToFit()
view.setNeedsLayout()
}
private func buttonActions() {
confirmButton.action = { [weak self] in self?.confirmPhoto() }
cancelButton.action = { [weak self] in self?.cancel() }
}
internal func cancel() {
onComplete?(nil, nil)
}
internal func confirmPhoto() {
disable()
imageView.isHidden = true
let spinner = showSpinner()
var fetcher = SingleImageFetcher()
.onSuccess { image in
self.onComplete?(image, self.asset)
self.hideSpinner(spinner)
self.enable()
}
.onFailure { error in
self.hideSpinner(spinner)
self.showNoImageScreen(error)
}
.setAsset(asset)
fetcher = fetcher.fetch()
}
func showSpinner() -> UIActivityIndicatorView {
let spinner = UIActivityIndicatorView()
spinner.activityIndicatorViewStyle = .white
spinner.center = view.center
spinner.startAnimating()
view.addSubview(spinner)
view.bringSubview(toFront: spinner)
return spinner
}
func hideSpinner(_ spinner: UIActivityIndicatorView) {
spinner.stopAnimating()
spinner.removeFromSuperview()
}
func disable() {
confirmButton.isEnabled = false
}
func enable() {
confirmButton.isEnabled = true
}
func showNoImageScreen(_ error: NSError) {
let permissionsView = PermissionsView(frame: view.bounds)
let desc = localizedString("error.cant-fetch-photo.description")
permissionsView.configureInView(view, title: error.localizedDescription, descriptiom: desc, completion: cancel)
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
public override var prefersStatusBarHidden: Bool {
return true
}
public override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return UIStatusBarAnimation.slide
}
override open var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.landscape
}
//endregion
}
public class BoardObj {
var cTruong: CongTruong?;
var shootItem: ShootItem?;
init(cTruong: CongTruong?, shootItem: ShootItem?) {
self.cTruong = cTruong;
self.shootItem = shootItem;
}
}