marinofaggiana 5 years ago
parent
commit
f68f6db119

+ 1 - 1
iOSClient/Main/NCDetailViewController.swift

@@ -485,7 +485,7 @@ extension NCDetailViewController: MediaBrowserViewControllerDelegate, MediaBrows
         }
     }
     
-    func mediaBrowserTap(_ mediaBrowser: MediaBrowserViewController) {
+    func mediaBrowserTap(_ view: MediaContentView) {
         guard let navigationController = self.navigationController else { return }
         
         if navigationController.isNavigationBarHidden {

+ 3 - 21
iOSClient/Viewer/NCViewerImage/MediaBrowserViewController.swift

@@ -81,7 +81,7 @@ public protocol MediaBrowserViewControllerDelegate: class {
      */
     func mediaBrowser(_ mediaBrowser: MediaBrowserViewController, didChangeFocusTo index: Int, view: MediaContentView)
     
-    func mediaBrowserTap(_ mediaBrowser: MediaBrowserViewController)
+    func mediaBrowserTap(_ view: MediaContentView)
 
     func mediaBrowserDismiss()
 }
@@ -217,15 +217,6 @@ public class MediaBrowserViewController: UIViewController {
 
     public var contentViews: [MediaContentView] = []
 
-    lazy private var tapGestureRecognizer: UITapGestureRecognizer = { [unowned self] in
-        let gesture = UITapGestureRecognizer()
-        gesture.numberOfTapsRequired = 1
-        gesture.numberOfTouchesRequired = 1
-        gesture.delegate = self
-        gesture.addTarget(self, action: #selector(tapGestureEvent(_:)))
-        return gesture
-    }()
-
     private var previousTranslation: CGPoint = .zero
 
     private var timer: Timer?
@@ -332,7 +323,6 @@ extension MediaBrowserViewController {
         populateContentViews()
 
         view.addGestureRecognizer(panGestureRecognizer)
-        view.addGestureRecognizer(tapGestureRecognizer)
     }
 
     override public func viewDidAppear(_ animated: Bool) {
@@ -380,7 +370,8 @@ extension MediaBrowserViewController {
             let mediaView = MediaContentView(
                 index: i + index,
                 position: CGFloat(i),
-                frame: view.bounds
+                frame: view.bounds,
+                delegate: self.delegate
             )
             mediaContainerView.addSubview(mediaView)
             mediaView.translatesAutoresizingMaskIntoConstraints = false
@@ -481,15 +472,6 @@ extension MediaBrowserViewController {
 
         previousTranslation = translation
     }
-
-    @objc private func tapGestureEvent(_ recognizer: UITapGestureRecognizer) {
-
-        guard !dismissController.interactionInProgress else {
-            return
-        }
-
-        self.delegate?.mediaBrowserTap(self)
-    }
 }
 
 // MARK: - Updating View Positions

+ 36 - 1
iOSClient/Viewer/NCViewerImage/MediaContentView.swift

@@ -125,17 +125,27 @@ public class MediaContentView: UIScrollView {
         return container
     }()
 
+    private lazy var singleTapGestureRecognizer: UITapGestureRecognizer = { [unowned self] in
+        let gesture = UITapGestureRecognizer(target: self, action: #selector(didSingleTap(_:)))
+        gesture.numberOfTapsRequired = 1
+        gesture.numberOfTouchesRequired = 1
+        return gesture
+    }()
+    
     private lazy var doubleTapGestureRecognizer: UITapGestureRecognizer = { [unowned self] in
         let gesture = UITapGestureRecognizer(target: self, action: #selector(didDoubleTap(_:)))
         gesture.numberOfTapsRequired = 2
         gesture.numberOfTouchesRequired = 1
         return gesture
     }()
+    
+    private var mediaBrowserViewControllerDelegate: MediaBrowserViewControllerDelegate?
 
-    init(index itemIndex: Int, position: CGFloat, frame: CGRect) {
+    init(index itemIndex: Int, position: CGFloat, frame: CGRect, delegate: MediaBrowserViewControllerDelegate?) {
 
         self.index = itemIndex
         self.position = position
+        self.mediaBrowserViewControllerDelegate = delegate
 
         super.init(frame: frame)
 
@@ -161,8 +171,12 @@ extension MediaContentView {
 
         configureScrollView()
 
+        addGestureRecognizer(singleTapGestureRecognizer)
+        
         addGestureRecognizer(doubleTapGestureRecognizer)
 
+        singleTapGestureRecognizer.require(toFail: doubleTapGestureRecognizer)
+        
         updateTransform()
     }
 
@@ -230,6 +244,27 @@ extension MediaContentView {
         contentSize = imageView.frame.size
     }
 
+    @objc private func didSingleTap(_ recognizer: UITapGestureRecognizer) {
+                
+        if zoomScale != 1 {
+            
+            let locationInImage = recognizer.location(in: imageView)
+            let width = bounds.size.width
+            let height = bounds.size.height
+
+            let zoomRect = CGRect(
+                x: locationInImage.x - width * 0.5,
+                y: locationInImage.y - height * 0.5,
+                width: width,
+                height: height
+            )
+
+            zoom(to: zoomRect, animated: true)
+        }
+        
+        self.mediaBrowserViewControllerDelegate?.mediaBrowserTap(self)
+    }
+    
     @objc private func didDoubleTap(_ recognizer: UITapGestureRecognizer) {
 
         let locationInImage = recognizer.location(in: imageView)