2017-05-15 30 views
0

私はUIScrollviewを使用して画像のズーム機能を実装しようとしています。ここで私はイメージを縦横比に保った。 イメージはUIScrollViewの内部にあり、イメージフレームはUIScrollViewと同様に指定されています。 ここに私のコードです。画像が拡大された後、UIScrollViewが画像をスクロールしますか?

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

があなたの画像スケール –

答えて

0

これらの方法を見てみましょう。それが助けになるかもしれない。私はスクロールビューをコントローラのビューサイズに伸ばしています。 customizeScrollView()は最小と最大のスケールオプションを計算します。 centerImageView()はUIImageViewをUIScrollViewの中央に配置します

viewDidloadのcustomizeScrollView関数を呼び出します。ここで

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

を確認し、あなたのエラーが実際に何である –

+0

私のために働いていないのですか?それはスクロールしながら空白ですか? – DHEERAJ

+0

私の要件は、画像をコンテンツまでスクロールすることです。ズームした後に画像空間をスクロールしています。 –

0

サンプルコードです:

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 
    } 

} 
関連する問題