2017-06-02 28 views
0

我已經創建了一個滾動視圖以編程方式添加了一個圖像作爲它的子視圖,但是當我嘗試放大圖像時,它只能放大到上角,它不會讓我滾動到看到圖像的不同部分。Scrollview只能放大到左上角

這是我用來創建滾動視圖代碼:

let scrollView = UIScrollView() 

var image: NSData! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    scrollView.minimumZoomScale = 1.0 
    scrollView.maximumZoomScale = 3.0 
    scrollView.zoomScale = 1.0 
    scrollView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height) 
    scrollView.delegate = self 
    scrollView.isPagingEnabled = false 
    scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height) 

    view.addSubview(scrollView) 

    scrollView.addSubview(imageView) 

    imageView.image = UIImage(data: image as Data) 
    imageView.contentMode = .scaleAspectFit 
    imageView.isUserInteractionEnabled = true 

    let longPress = UILongPressGestureRecognizer(target: self, action: #selector(share)) 
    longPress.minimumPressDuration = 0.5 
    longPress.numberOfTapsRequired = 0 
    imageView.addGestureRecognizer(longPress) 

    let doubleTap = UITapGestureRecognizer(target: self, action: #selector(handleDoubleTap(recognizer:))) 
    doubleTap.numberOfTapsRequired = 2 
    scrollView.addGestureRecognizer(doubleTap) 

} 

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

func share(sender: UILongPressGestureRecognizer) { 
    if sender.state == .ended { 
     if UIImage(data: image as Data) != nil { 
      let Item = UIImage(data: self.image! as Data) 
      let activity = UIActivityViewController(activityItems: [Item!], applicationActivities: nil) 
      activity.excludedActivityTypes = [UIActivityType.print, UIActivityType.addToReadingList, UIActivityType.openInIBooks] 
      self.present(activity, animated: true, completion: nil) 
     } 
    } 
} 

func handleDoubleTap(recognizer: UITapGestureRecognizer) { 
    if scrollView.zoomScale > scrollView.minimumZoomScale { 
     scrollView.setZoomScale(scrollView.minimumZoomScale, animated: true) 
    } else { 
     scrollView.setZoomScale(scrollView.maximumZoomScale, animated: true) 
    } 
} 

非常感謝你對任何形式的幫助

+0

imageview框在哪裏? – Daniel

+0

作爲您的問題,請檢查我的答案在https://stackoverflow.com/questions/43624834/uiimageview-zoom-and-pinch-in-uiscrollview/43626273#43626273 –

回答

1

的問題是在你的代碼當您設置滾動視圖的zoomscale。您不指定它應放大的位置。自然,它放大並停留在左上角。

您需要在handleDoubleTap(recognizer: UITapGestureRecognizer)中獲取觸摸的位置,計算縮放的矩形,並在滾動視圖上調用scrollRectToVisible

+0

handleDoubleTap只是用於當用戶雙擊它會放大或縮小。但是,當我簡單放大手指時,它也只是放大到左上角。 –

+0

你在使用Autolayout還是約束? –

+0

是的,我使用了滾動視圖中的imageView的約束條件 –