从故事板中实例化VC与编程之间的区别

时间:2016-01-22 23:57:41

标签: ios swift

比较是在:

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

与此相对:

let viewController = AViewController()

不幸的是,this question无法回答我的问题。

我创建了这个视图控制器:

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()
    }
}

这是为了拍摄一张图像,并在显示时允许用户缩放/平移图像。

当我使用第一种方法实例化此VC时(通过从带有标识符的storyboard实例化),它表现良好。

然而,当以第二种方式实例化它时;只要scrollView检测到移动,就会触发let viewController = ImageVC()viewWillLayoutSubviews,不允许放大和缩小。

建议表示赞赏。

0 个答案:

没有答案