Einstellung UIScrollView zoom-Skala auf den Bildschirm passen
Mein Punkt ist, kopieren Sie das Verhalten von vielen apps, die verwendet Fotos, wo beim UIScrollView
mit UIImageView
im inneren präsentiert es passt Bild an die Größe des Bildschirms, auch wenn das Bild kleiner ist.
Ich bin sicher, dass dies nicht getan werden sollte mit UIImageView
Rahmen aber, manipuliert durch UIScrollView
aber wie...?
In meinem code habe ich eine Methode namens updateZoom
berechnet die minimumZoomScale
Wert und weist diesen Wert auf die zoomScale
Eigenschaft. Ich denke mal, dass das der richtige Ort, um Mathematik und berechnen zoomScale
manuell.
Dies ist die Methode:
- (void)updateZoom {
float minZoom = MIN(self.view.bounds.size.width / self.imageView.image.size.width, self.view.bounds.size.height / self.imageView.image.size.height);
if (minZoom > 1) {
minZoom = 1;
}
self.scrollView.minimumZoomScale = minZoom;
self.scrollView.zoomScale = minZoom;
}
Ich hoffe, dass jemand mir geben würde, einen Treffer auf , wie die zoomScale
passen die UIScrollView
Grenzen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die oben genannten Lösungen arbeiten, aber ich kämpfte, um zu verstehen, warum. Ich möchte diese beiden Artikel fand ich sehr hilfreich bei der Einstellung der mininumZoomScale richtig und bekommen dies funktioniert mit iOS8/XCode 6.
Erste, immer der scroll-Ansicht arbeiten auf iOS8 verlangt, dass du deine Zwänge von Anfang an richtig. Andere Poster haben empfohlen, und ich bin damit einverstanden, dass die scroll-Ansicht sollte immer nur eine einzige Ansicht "Inhalt". Feine einbetten, alle anderen Ansichten innerhalb einer Ansicht "Inhalt", aber Sie wollen nicht, um Ihre scroll-view-Einschränkungen auf eine Reihe von kleinen Ansichten.
Verbinden Sie Ihr Top, Leading, Trailing und Beschränkungen für den Unteren Rand des scroll-view aus dem Inhalt (in meinem Fall ist es ein UIImageView) mit Konstanten 0. Dies setzt die Kanten Ihrer Inhalte anzeigen, um die scroll-Ansicht.
Als Nächstes legen Sie die Größe der Inhalts-Ansicht mit der Gleichen Breite und Höhe Einschränkungen für die scroll-Ansicht. Sie können nicht verwenden Sie eine Feste Breite und Feste Höhe " in der content-Ansicht, da das Zoomen nicht funktioniert, noch können Sie die Größe selbst. Ohne diese Einschränkungen, iOS8-sets der Größe (0,0), bevor Sie eine chance haben, was in einigen seltsame Artefakte. Mit diesen Einschränkungen, rufen Sie Ihren updateZoom Methode in der Ausrichtung der Methode, und Sie sind gut. In iOS7 nennen es in didRotateFromInterfaceOrientation. In iOS8 nennen es aus viewWillTransitionToSize. Müssen Sie den code aktualisieren, übergeben in der neuen Größe.
Vielen Dank an Natascha, die Der Roboter für die constraint-Lösung: http://natashatherobot.com/ios-autolayout-scrollview/
Wenn Sie rufen Sie Ihren updateZoom-Methode optimieren Sie Ihr minimum, Sie sollten auch überprüfen, ob Ihre aktuelle zoomScale ist < Ihre minimumZoomScale und es zurücksetzen, wenn es so ist. Sollten Sie nicht zurücksetzen zoomScale anders als dies wird zu einem weiteren fragenden Blick von Ihrem Benutzer bei der Orientierung ändert.
Als für den rest, und warum die Mathematik funktioniert, Joe Conway in objc.io legte Sie alle aus in diesem fantastischen Artikel über die Grenzen vs. frame mit UIScrollViews: http://www.objc.io/issue-3/scroll-view.html
Danke an beide und das poster ist oben.
Die Lösung war ziemlich einfach... Check out this code (modifizierte version der Methode von OP):
Ich denke, es gibt nichts, um zu erklären, wie der code ist geradlinig.
SWIFT 3
Dank @chewy dieser arbeitete für mich (ich brauchte, um hinzuzufügen, "Grenzen" auf das Bild):
Dann rufen Sie setZoomScale() in "override func viewWillLayoutSubviews()"
Einstellen der zoom passt die Größe des Bildes in der scrollView gesetzt, die die minimumZoom für scrollView mit diesem :
self.scrollView.minimumZoomScale = self.scrollView.frame.size.width/self.imageView.frame.size.width;
Obige code passt Ihr Bild in der scrollView Breite.
Und hier ist die Swift 3-version