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)
}
}
}
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
Sie sind willkommen) –