2017-05-15 3 views
0

J'essaye d'implémenter une fonctionnalité de zoom d'image en utilisant UIScrollview. où j'ai gardé l'image comme aspect. L'image est dans un UIScrollView, et l'image a été donnée comme UIScrollView. Voici mon code.UIScrollView défile hors de l'image après un zoom avant sur l'image?

override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 

     scroller.minimumZoomScale = 1.0 
     scroller.maximumZoomScale = 7.0 
    } 

    // MARK: - User Defined Methods 

    @IBAction func doubleTapGestureAction(_ sender: UITapGestureRecognizer) 
    { 
     if scroller.zoomScale == 1 
     { 
      scroller.zoom(to: zoomForScale(scale: scroller.maximumZoomScale, center: sender.location(in: sender.view)), animated: true) 
     } 
     else 
     { 
      scroller.setZoomScale(1, animated: true) 
     } 
     print(isZoomedIn) 
    } 

    func zoomForScale(scale: CGFloat, center: CGPoint) -> CGRect 
    { 
     var zoomRect = CGRect.zero 
     zoomRect.size.height = image.frame.size.height/scale 
     zoomRect.size.width = image.frame.size.width/scale 
     let newCenter = image.convert(center, from: scroller) 
     zoomRect.origin.x = newCenter.x - (zoomRect.size.width/2.0) 
     zoomRect.origin.y = newCenter.y - (zoomRect.size.height/2.0) 
     return zoomRect 
    } 

    func viewForZooming(in scrollView: UIScrollView) -> UIView? 
    { 
     return image 
    } 
+0

vérifier votre échelle de l'image –

Répondre

0

Jetez un oeil à ces méthodes. Peut être cela aidera. J'ai vue défilement étiré à la taille de la vue du contrôleur. customizeScrollView() va calculer les options d'échelle min et max. centerImageView() mettra UIImageView au centre de votre UIScrollView

Appelez la fonction customizeScrollView dans viewDidload.

fileprivate func customizeScrollView() { 
    guard let image = imageView?.image else { return } 
    var minZoom = fmin(self.view.frame.width/image.size.width, self.view.frame.height/image.size.height) 
    minZoom = fmin(1.0, minZoom) 

    scrollView?.contentSize = image.size 
    scrollView?.minimumZoomScale = minZoom 
    scrollView?.addSubview(self.imageView!) 
    scrollView?.setZoomScale(minZoom, animated: false) 
    centerImageView() 
} 

fileprivate func centerImageView() { 
    guard let imageView = imageView else { return } 
    guard let scrollView = scrollView else { return } 

    let boundsSize = scrollView.bounds.size 
    var frameToCenter = imageView.frame 

    // Center horizontally 
    if frameToCenter.size.width < boundsSize.width { 
     frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width)/2 
    } else { 
     frameToCenter.origin.x = 0 
    } 

    // Center vertically 
    if frameToCenter.size.height < boundsSize.height { 
     frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height)/2 
    } else { 
     frameToCenter.origin.y = 0 
    } 

    imageView.frame = frameToCenter 
} 

public func scrollViewDidZoom(scrollView: UIScrollView) { 

     print(imageView.frame) 
     centerImageView() 
    } 
+0

il ne fonctionne pas pour moi –

+0

quelle est votre erreur en fait? est-ce que c'est l'espace blanc en défilant? – DHEERAJ

+0

Mon exigence est que l'image doit être défilée jusqu'à son contenu. mais il fait défiler l'espace de l'image après un zoom avant. –

0

Voici un exemple de code:

import UIKit 

class ViewController: UIViewController,UIScrollViewDelegate { 

    var imgDemo: UIImageView = { 
     let img = UIImageView() 
     img.contentMode = .scaleAspectFill 
     img.isUserInteractionEnabled = true 
     return img 
    }() 


    var scrollView:UIScrollView = { 
     let scroll = UIScrollView() 
     scroll.maximumZoomScale = 4.0 
     scroll.minimumZoomScale = 0.25 
     scroll.clipsToBounds = true 
     return scroll 
    }() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     imgDemo.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height) 
     imgDemo.image = UIImage(named: "5.jpg") 
     scrollView.delegate = self 
     scrollView.frame = imgDemo.frame 
     scrollView.addSubview(imgDemo) 
     view.addSubview(scrollView) 
    } 

    func viewForZooming(in scrollView: UIScrollView) -> UIView? { 
     return imgDemo 
    } 

}