Skip to content

Commit 451661e

Browse files
committed
feat: doing handle preview controller
1 parent b76dfa4 commit 451661e

File tree

5 files changed

+125
-123
lines changed

5 files changed

+125
-123
lines changed

ios/CustomPhotoPicker/CustomPhotoPickerViewController.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ class CustomPhotoPickerViewController: TLPhotosPickerViewController, ViewerContr
6060
let headerView = PreviewHeaderView()
6161
headerView.viewDelegate = self
6262

63-
headerView.backgroundColor = .white
64-
6563
self.viewerController!.headerView = headerView
6664

6765
self.present(self.viewerController!, animated: true, completion: nil)

ios/Extension/UIImage.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import UIKit
99

1010
extension UIImage {
11-
func getTintColor(_ color: UIColor) -> UIImage? {
11+
func setTintColor(_ color: UIColor) -> UIImage? {
1212
if #available(iOS 13.0, *) {
1313
return self.withTintColor(color, renderingMode: .alwaysOriginal)
1414
} else {
@@ -26,4 +26,12 @@ extension UIImage {
2626
return tintedImage!
2727
}
2828
}
29+
30+
func resize(to size: CGSize) -> UIImage? {
31+
UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.main.scale)
32+
self.draw(in: CGRect(origin: .zero, size: size))
33+
let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
34+
UIGraphicsEndImageContext()
35+
return resizedImage
36+
}
2937
}

ios/MultipleImagePicker.swift

Lines changed: 57 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ extension TLPhotosPickerConfigure {
1818
var config = TLPhotosPickerConfigure()
1919

2020
@objc(MultipleImagePicker)
21-
class MultipleImagePicker: NSObject, TLPhotosPickerViewControllerDelegate, UINavigationControllerDelegate, TLPhotosPickerLogDelegate, CropViewControllerDelegate {
21+
class MultipleImagePicker: NSObject, TLPhotosPickerViewControllerDelegate, UINavigationControllerDelegate {
2222
@objc static func requiresMainQueueSetup() -> Bool {
2323
return false
2424
}
@@ -31,37 +31,11 @@ class MultipleImagePicker: NSObject, TLPhotosPickerViewControllerDelegate, UINav
3131
var videoCount = 0
3232
var imageRequestOptions = PHImageRequestOptions()
3333
var videoRequestOptions = PHVideoRequestOptions()
34-
35-
// controller
36-
34+
3735
// resolve/reject assets
3836
var resolve: RCTPromiseResolveBlock!
3937
var reject: RCTPromiseRejectBlock!
4038

41-
func selectedCameraCell(picker: TLPhotosPickerViewController) {
42-
let generator = UIImpactFeedbackGenerator(style: .medium)
43-
generator.impactOccurred()
44-
}
45-
46-
func deselectedPhoto(picker: TLPhotosPickerViewController, at: Int) {
47-
let generator = UIImpactFeedbackGenerator(style: .light)
48-
generator.impactOccurred()
49-
let cell = picker.collectionView(picker.collectionView, cellForItemAt: IndexPath(row: at, section: 0)) as! Cell
50-
if cell.asset?.mediaType == PHAssetMediaType.video {
51-
self.videoCount -= 1
52-
}
53-
}
54-
55-
func selectedPhoto(picker: TLPhotosPickerViewController, at: Int) {
56-
let generator = UIImpactFeedbackGenerator(style: .medium)
57-
generator.impactOccurred()
58-
}
59-
60-
func selectedAlbum(picker: TLPhotosPickerViewController, title: String, at: Int) {
61-
let generator = UIImpactFeedbackGenerator(style: .medium)
62-
generator.impactOccurred()
63-
}
64-
6539
@objc(openPicker:withResolver:withRejecter:)
6640
func openPicker(options: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
6741
self.setConfiguration(options: options, resolve: resolve, reject: reject)
@@ -177,31 +151,6 @@ class MultipleImagePicker: NSObject, TLPhotosPickerViewControllerDelegate, UINav
177151
}
178152
}
179153

180-
func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {
181-
let filePath = getImagePathFromUIImage(uiImage: image, prefix: "crop")
182-
let TLAsset = self.selectedAssets.first
183-
184-
// Dismiss twice for crop controller & picker controller
185-
DispatchQueue.main.async {
186-
self.getTopMostViewController()?.dismiss(animated: true, completion: {
187-
self.getTopMostViewController()?.dismiss(animated: true, completion: {
188-
if filePath != "", TLAsset != nil {
189-
self.fetchAsset(TLAsset: TLAsset!) { object in
190-
191-
object.data!["crop"] = [
192-
"height": image.size.height,
193-
"width": image.size.width,
194-
"path": filePath,
195-
]
196-
197-
self.resolve([object.data])
198-
}
199-
}
200-
})
201-
})
202-
}
203-
}
204-
205154
func presentCropViewController(image: UIImage) {
206155
let cropViewController = CropViewController(croppingStyle: (self.options["isCropCircle"] as! Bool) ? .circular : .default, image: image)
207156
cropViewController.delegate = self
@@ -336,3 +285,58 @@ extension UIViewController {
336285
return topMostViewController
337286
}
338287
}
288+
289+
// TLPhotosPickerLogDelegate
290+
extension MultipleImagePicker: TLPhotosPickerLogDelegate {
291+
func selectedCameraCell(picker: TLPhotosPickerViewController) {
292+
let generator = UIImpactFeedbackGenerator(style: .medium)
293+
generator.impactOccurred()
294+
}
295+
296+
func deselectedPhoto(picker: TLPhotosPickerViewController, at: Int) {
297+
let generator = UIImpactFeedbackGenerator(style: .light)
298+
generator.impactOccurred()
299+
let cell = picker.collectionView(picker.collectionView, cellForItemAt: IndexPath(row: at, section: 0)) as! Cell
300+
if cell.asset?.mediaType == PHAssetMediaType.video {
301+
self.videoCount -= 1
302+
}
303+
}
304+
305+
func selectedPhoto(picker: TLPhotosPickerViewController, at: Int) {
306+
let generator = UIImpactFeedbackGenerator(style: .medium)
307+
generator.impactOccurred()
308+
}
309+
310+
func selectedAlbum(picker: TLPhotosPickerViewController, title: String, at: Int) {
311+
let generator = UIImpactFeedbackGenerator(style: .medium)
312+
generator.impactOccurred()
313+
}
314+
}
315+
316+
// CropViewControllerDelegate
317+
extension MultipleImagePicker: CropViewControllerDelegate {
318+
func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {
319+
let filePath = getImagePathFromUIImage(uiImage: image, prefix: "crop")
320+
let TLAsset = self.selectedAssets.first
321+
322+
// Dismiss twice for crop controller & picker controller
323+
DispatchQueue.main.async {
324+
self.getTopMostViewController()?.dismiss(animated: true, completion: {
325+
self.getTopMostViewController()?.dismiss(animated: true, completion: {
326+
if filePath != "", TLAsset != nil {
327+
self.fetchAsset(TLAsset: TLAsset!) { object in
328+
329+
object.data!["crop"] = [
330+
"height": image.size.height,
331+
"width": image.size.width,
332+
"path": filePath,
333+
]
334+
335+
self.resolve([object.data])
336+
}
337+
}
338+
})
339+
})
340+
}
341+
}
342+
}

ios/Preview/PreviewHeader.swift

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,11 @@ class PreviewHeaderView: UIView {
99
weak var viewDelegate: PreviewHeaderViewDelegate?
1010

1111
lazy var clearButton: UIButton = {
12-
let image = UIImage.close
12+
let image = UIImage.close.setTintColor(.black)?.resize(to: .init(width: 18, height: 18))
1313

1414
let button = UIButton(type: .custom)
15-
button.setImage(image, for: .normal)
16-
17-
// Đặt kích thước cho hình ảnh bên trong button
18-
let imageSize = CGSize(width: 24, height: 24) // Đặt kích thước mới cho hình ảnh
19-
button.imageView?.frame = CGRect(origin: CGPoint.zero, size: imageSize)
2015

21-
button.frame = CGRect(x: 50, y: 100, width: imageSize.width, height: imageSize.height)
16+
button.setImage(image, for: .normal)
2217

2318
button.addTarget(self, action: #selector(PreviewHeaderView.clearAction(button:)), for: .touchUpInside)
2419

@@ -44,9 +39,7 @@ class PreviewHeaderView: UIView {
4439
override init(frame: CGRect) {
4540
super.init(frame: frame)
4641

47-
if #available(iOS 11.0, *) {
48-
self.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor).isActive = true
49-
}
42+
self.backgroundColor = .white
5043

5144
let stackView = UIStackView()
5245
stackView.translatesAutoresizingMaskIntoConstraints = false
@@ -61,7 +54,6 @@ class PreviewHeaderView: UIView {
6154
self.doneButton.translatesAutoresizingMaskIntoConstraints = false
6255
stackView.addArrangedSubview(self.doneButton)
6356

64-
// Đặt constraints cho stack view để căn chỉnh theo phía trái và phải
6557
NSLayoutConstraint.activate([
6658
stackView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 24),
6759
stackView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -24),

0 commit comments

Comments
 (0)