2017-04-25 8 views
1

編集:誰にも役立つように質問コードを更新しました。Swift3ズームピンチでUICollectionViewのフレームサイズを変更する方法?

私はUICollectionViewCellscrollViewを持っていますが、ピンチでシミュレータでズームが機能しません。私は手動でビューをズームすることによってこれを行うことができますが、ズームするためにユーザがピンチしたときにイメージビューフレームをフルサイズに変更する必要があります。今は、画面の幅に設定されたフレーム幅と画面の高さに設定されたフレームの高さで塗りつぶすサイズです。画像が正方形であるため、フレームの幅をフレームの高さに動的に変更する必要があります。あなたがピンチズームが機能するためにscrollView.contentSizeを設定する必要が

import UIKit 

class MyCollectionViewCell: UICollectionViewCell, UIScrollViewDelegate { 

    let screenWidth = UIScreen.main.bounds.width 

    let activityIndicator: UIActivityIndicatorView = { 
     let spinner = UIActivityIndicatorView() 
     spinner.activityIndicatorViewStyle = .white 
     spinner.color = Constants.APP_SPINNER_COLOR 
     spinner.hidesWhenStopped = true 
     return spinner 
    }() 

    var zoomScrollView: UIScrollView = { 
     let scrollView = UIScrollView() 
     scrollView.backgroundColor = .white 
     scrollView.minimumZoomScale = 1.0 
     scrollView.maximumZoomScale = 6.0 
     scrollView.clipsToBounds = true 
     scrollView.isUserInteractionEnabled = true 
     scrollView.translatesAutoresizingMaskIntoConstraints = false 
     return scrollView 
    }() 

    var itemImageView: UIImageView = { 
     let imageView = UIImageView() 
     imageView.contentMode = .scaleAspectFit 
     imageView.translatesAutoresizingMaskIntoConstraints = false 
     imageView.backgroundColor = .white 
     imageView.isUserInteractionEnabled = true 
     return imageView 
    }() 

    func viewForZooming(in zoomScrollView: UIScrollView) -> UIView? { 
     return itemImageView 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     zoomScrollView.delegate = self 

     contentView.backgroundColor = .white 

     contentView.addSubview(zoomScrollView) 

     zoomScrollView.addSubview(itemImageView) 

     itemImageView.addSubview(activityIndicator) 


    zoomImageView.frame = CGRect(x:0, y:0, width: screenWidth, height: screenHeight) 

    zoomScrollView.frame = itemImageView.frame 

     activityIndicator.anchorCenterXToSuperview() 
     activityIndicator.anchorCenterYToSuperview()  
    } 

    required init?(coder aDecoder: NSCoder) { 
      fatalError("init(coder:) has not been implemented") 
     } 
} 
+0

私が2倍にスクロールビューのコンテンツサイズを設定ZoomimageViewとZoomscrollview –

答えて

1

ここでは、スクロール表示の簡単なデモを行います。

注:scrollviewのコード下の画像表示に任意の制約を与えるものではありません

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 
    } 

} 
+0

私はそれをつまむまでスケールのAspectfitのようにフィットするようにこのビューを必要とし、次にそれをscaleAspectにしたい、どうすればいいですか? – markhorrocks

+0

Ohkはそれから私はそれをする方法を知らないのであなたの自己によってそれを作る。 –

+0

質問が更新されましたので、私のコードは動作します。前に欠けていたのは、scrollView.userInteractionをfalseに設定したことです。フレームを入力していただきありがとうございます。 – markhorrocks

関連する問題