2016-08-12 37 views
2

這可能是一個Xcode錯誤?在代碼中以編程方式完成UIScrollView內部的UIImage。用戶可以使用縮放手勢放大圖像或雙擊圖像。這部分工作正常。scrollViewDidEndZooming在放大UIScrollView時未被調用

接下來,我試圖檢測滾動視圖何時完成縮放後的縮放手勢或雙擊使用以下功能scrollViewDidEndZooming。然而,scrollViewDidEndZooming不會被調用,並且不打印線I just finished zooming!

代碼不工作:

func scrollViewDidEndZooming(scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) { 
    print("I just finished zooming!") 
} 

問:

什麼可能是怎麼回事,爲什麼是不是scrollViewDidEndZooming(...) 被調用?

注:我已經提到了下面的文檔,沒有運氣。 https://developer.apple.com/reference/uikit/uiscrollviewdelegate/1619407-scrollviewdidendzooming


完整代碼:

class ScrollViewController: UIViewController, UIScrollViewDelegate { 
    var scrollView: UIScrollView! 
    var imageView: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     imageView = UIImageView(image: UIImage(named: "image.png")) 

     scrollView = UIScrollView(frame: view.bounds) 
     scrollView.backgroundColor = UIColor.blackColor() 
     scrollView.contentSize = imageView.bounds.size 
     scrollView.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight] 

     scrollView.contentOffset = CGPoint(x: 1000, y: 450) 

     scrollView.addSubview(imageView) 
     view.addSubview(scrollView) 

     scrollView.delegate = self 
     setZoomScale() 
     setupGestureRecognizer() 
    } 

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

    override func viewWillLayoutSubviews() { 
     setZoomScale() 
    } 

    func setZoomScale() { 
     let imageViewSize = imageView.bounds.size 
     let scrollViewSize = scrollView.bounds.size 
     let widthScale = scrollViewSize.width/imageViewSize.width 
     let heightScale = scrollViewSize.height/imageViewSize.height 

     scrollView.minimumZoomScale = min(widthScale, heightScale) 
     scrollView.zoomScale = 1.0 
    } 

    func scrollViewDidZoom(scrollView: UIScrollView) { 
     let imageViewSize = imageView.frame.size 
     let scrollViewSize = scrollView.bounds.size 
     let verticalPadding = imageViewSize.height < scrollViewSize.height ? (scrollViewSize.height - imageViewSize.height)/2 : 0 
     let horizontalPadding = imageViewSize.width < scrollViewSize.width ? (scrollViewSize.width - imageViewSize.width)/2 : 0 

     scrollView.contentInset = UIEdgeInsets(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding) 
    } 

    func scrollViewDidEndZooming(scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) { 
     print("I just finished zooming!") 
    } 

    func setupGestureRecognizer() { 
     let doubleTap = UITapGestureRecognizer(target: self, action: "handleDoubleTap:") 
     doubleTap.numberOfTapsRequired = 2 
     scrollView.addGestureRecognizer(doubleTap) 
    } 

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

回答

1

你讓一個小錯誤。試試這個代碼:

func scrollViewDidEndZooming(scrollView: UIScrollView, withView view: UIView?, atScale scale: CGFloat) { 
    print("I just finished zooming!") 
} 
+0

我不知道正確的術語是什麼,它捕捉到被代碼矇蔽的感覺,但我遭受了這些。非常感謝,這工作! – user4806509

+1

不客氣) –