2016-08-12 17 views
2

Dies könnte möglicherweise ein Xcode Bug sein? Ich habe eine UIImage innerhalb einer UIScrollView programmatisch in Code getan. Der Benutzer kann mit der Zoom-Geste in das Bild hineinzoomen oder auf das Bild doppeltippen. Dieser Teil funktioniert alles gut.scrollViewDidEndZooming wird beim Zoomen in einem UIScrollView nicht aufgerufen

Als nächstes versuche ich zu erkennen, wann die Bildlaufansicht nach einer Zoomgeste beendet wurde, oder doppeltippe mit der folgenden Funktion scrollViewDidEndZooming. Allerdings wird scrollViewDidEndZooming nie genannt wird, und druckt nicht die Linie I just finished zooming!

-Code nicht funktioniert:

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

Frage:

Was hier könnte los ist, warum ist nicht scrollViewDidEndZooming(...) wird aufgerufen?

Hinweis: Ich habe das folgende Dokument ohne Glück erwähnt. https://developer.apple.com/reference/uikit/uiscrollviewdelegate/1619407-scrollviewdidendzooming


komplette Code:

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

Antwort

1

Sie machen einen kleinen Fehler. Versuchen Sie diesen Code:

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

Ich weiß nicht, was der richtige Begriff ist, dass das Gefühl erfasst von Code geblendet wird, aber ich habe das gelitten. Vielen Dank, das hat funktioniert! – user4806509

+1

Sie sind willkommen) –

Verwandte Themen