0

The comparison is between this:

let viewController = storyboard!.instantiateViewControllerWithIdentifier("ViewController") as! AViewController

versus this:

let viewController = AViewController()

Unfortunately, this question is not able to answer my question.

I've created this view controller:

final class ImageVC: UIViewController {
    var imageView: UIImageView!
    var scrollView: UIScrollView!
    var originLabel: UILabel!
    
    var image: UIImage?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        guard let image = image else { fatalError() }
        imageView = UIImageView(image: image)
        
        scrollView = UIScrollView(frame: view.bounds)
        scrollView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        scrollView.backgroundColor = UIColor.blackColor()
        scrollView.contentSize = imageView.bounds.size
        
        scrollView.addSubview(imageView)
        view.addSubview(scrollView)
        
        originLabel = UILabel(frame: CGRect(x: 20, y: 30, width: 0, height: 0))
        originLabel.backgroundColor = UIColor.blackColor()
        originLabel.textColor = UIColor.whiteColor()
        view.addSubview(originLabel)
        
        scrollView.delegate = self
        setZoomParametersForSize(scrollView.bounds.size)
    }
    
    override func viewWillLayoutSubviews() {
        print("layout")
        setZoomParametersForSize(scrollView.bounds.size)
    }
    
    func setZoomParametersForSize(scrollViewSize: CGSize) {
        let imageSize = imageView.bounds.size
        
        let widthScale = scrollViewSize.width / imageSize.width
        let heightScale = scrollViewSize.height / imageSize.height
        let minScale = min(widthScale, heightScale)
        
        scrollView.minimumZoomScale = minScale
        scrollView.maximumZoomScale = 3.0
        scrollView.zoomScale = minScale
    }
}

extension ImageVC: UIScrollViewDelegate {
    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return imageView
    }
    
    func scrollViewDidScroll(scrollView: UIScrollView) {
        originLabel.text = "\(scrollView.contentOffset)"
        originLabel.sizeToFit()
    }
}

This is meant to take an image, and when presented, will allow the user to zoom/pan through the image.

When I instantiate this VC using the first method (by instantiating from storyboard with identifier), it behaves fine.

However, when instantiating it the second way; let viewController = ImageVC(), viewWillLayoutSubviews will be triggered whenever scrollView detects movement, disallowing the ability to zoom in and out.

Advice appreciated.

Community
  • 1
  • 1
Kelvin Lau
  • 6,373
  • 6
  • 34
  • 57

0 Answers0