2017-09-11 14 views
1

私は迅速です。Can not Zoom UIImageView

私はアプリ開発の書籍から練習をしています。私はUIImageViewを作成しようとしていますが、画像を入れても画像は拡大できません。コードに問題がありますが、何が起こっているのかわかりません。 3stud1ant3により示唆されるように

import UIKit 

class ViewController: UIViewController, UIScrollViewDelegate { 


    @IBOutlet weak var image: UIImageView! 
    @IBOutlet weak var scroll: UIScrollView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     scroll.delegate = ViewController() 
     updateZoomFor(size:view.bounds.size) 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    private func viewForZooming(in scrollView: UIScrollView) -> UIImageView{ 
     return image 
    } 

    func updateZoomFor(size:CGSize){ 
     let widthScale = size.width/image.bounds.width 
     let heightScale = size.height/image.bounds.height 
     let scale = min(widthScale, heightScale) 
     scroll.minimumZoomScale = scale 
    } 

} 
+0

チェックisUserInteractionEnabledプロパティがtrueであるか、代わりに 'のUIImageView – Abhishek

+3

scroll.delegate =のViewController()のために' scroll.delegate = self' – 3stud1ant3

+0

このチュートリアルをフォロー 'てみません:

はまた、あなたはこれを実装する必要があります:https://www.raywenderlich.com/159481/uiscrollview-tutorial-getting-started –

答えて

3

まず、scroll.delegate = selfを設定します。

第二に、あなたはUIScrollViewDelegateメソッドの定義と一致する必要があります:scroll.zoomScale = scale:あなたにもupdateZoomForでズーム倍率を設定していることを確認し

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

を。

override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 
    updateZoomFor(size: view.bounds.size) 
} 

func scrollViewDidZoom(_ scrollView: UIScrollView) { 
    updateConstraintsForSize(view.bounds.size) 
} 

fileprivate func updateConstraintsForSize(_ size: CGSize) { 

    let yOffset = max(0, (size.height - imageView.frame.height)/2) 
    imageViewTopConstraint.constant = yOffset 
    imageViewBottomConstraint.constant = yOffset 

    let xOffset = max(0, (size.width - imageView.frame.width)/2) 
    imageViewLeadingConstraint.constant = xOffset 
    imageViewTrailingConstraint.constant = xOffset 

    view.layoutIfNeeded() 
} 
+0

最後の行にエラーがあります。だから私は最初にupdateMinZoomScaleForSize(view.bounds.size)を定義する必要がありますか?また、私は最後の行なしでスクリプトを実行しました。シミュレータでイメージを拡大すると、イメージの元のサイズに戻ります。それは正常な状況ですか? – sam

+0

代わりに 'updateZoomFor'関数を使う答えを編集しました。もう一度試して、制約を 'IBOutlet'sとして接続してください。 –

+0

私は、シミュレータを実行すると、imageViewLeadingConstraint、TrailingConstraint、BottomConstraint、およびTopConstraintのいくつかの問題があります。私はそれらを最初に定義する必要がありますか? – sam