Einstellung der UIScrollView-Zoomskala, um sie an den Bildschirm anzupassen

7

Ich möchte das Verhalten vieler Apps kopieren, die Fotos verwenden. Wenn UIScrollView mit UIImageView inside dargestellt wird, passt das Bild an die Bildschirmgröße, selbst wenn dieses Bild kleiner ist.

Ich bin mir sicher, dass dies nicht mit UIImageView frame gemacht werden sollte, sondern mit UIScrollView , aber wie ...?

In meinem Code habe ich eine Methode namens updateZoom , die den Wert minimumZoomScale berechnet und diesen Wert auch der Eigenschaft zoomScale zuweist. Ich denke, dass dies der richtige Ort ist, um Mathe zu machen und zoomScale manuell zu berechnen.

Dies ist die Methode:

%Vor%

Ich hoffe, dass jemand mir einen Treffer auf geben würde, wie man zoomScale auf die UIScrollView -Grenzen einstellt.

    
cojoj 19.09.2014, 06:07
quelle

5 Antworten

10

Die obigen Lösungen funktionieren, aber ich habe mich bemüht zu verstehen, warum. Ich würde gerne diese zwei Artikel teilen, die ich sehr hilfreich finde, um die mininumZoomScale richtig einzustellen und dies mit iOS8 / XCode 6 zu funktionieren.

Damit die Bildlaufansicht auf iOS8 funktioniert, müssen Sie zunächst Ihre Integritätsbedingungen korrekt festlegen. Andere Poster haben empfohlen, und ich stimme zu, dass Ihre Scroll-Ansicht immer nur eine einzige Inhaltsansicht haben sollte. Fein, um alle anderen Ansichten in die eine Inhaltsansicht einzubetten, aber Sie möchten Ihre Bildlaufbeschränkungen nicht auf eine Menge kleiner Ansichten beschränken.

Verbinden Sie Ihre Top-, Leading-, Trailing- und Bottom-Constraints mit der Scroll-Ansicht aus der Inhaltsansicht (in meinem Fall ist es eine UIImageView) mit der Konstante 0. Dadurch werden die Kanten Ihrer Inhaltsansicht auf die Bildlaufansicht gesetzt.

Legen Sie als Nächstes die Größe der Inhaltsansicht fest, indem Sie die Einschränkungen Gleiche Breite und Gleiche Höhe für die Bildlaufansicht verwenden. Sie können feste Breite und feste Höhe nicht in der Inhaltsansicht verwenden, da das Zoomen nicht funktioniert und Sie die Größe nicht selbst verwalten können. Ohne diese Einschränkungen legt iOS8 die Größe auf (0,0) fest, bevor es zu einigen seltsamen Artefakten kommen kann. Mit diesen Einschränkungen rufen Sie Ihre updateZoom-Methode in der Orientierungsmethode auf und Sie sind gut. In iOS7 rufen Sie es in didRotateFromInterfaceOrientation auf. In iOS8 rufen Sie es von viewWillTransitionToSize. Sie müssen den Code aktualisieren, um die neue Größe zu übergeben.

Vielen Dank an Natasha The Robot für die Constraint-Lösung: Ссылка

Wenn Sie Ihre updateZoom-Methode aufrufen, um Ihr Minimum zu optimieren, sollten Sie auch prüfen, ob Ihre aktuelle zoomScale & lt; Ihr minimumZoomScale und setzen Sie es zurück, wenn es ist. Sie sollten den ZoomScale ansonsten nicht zurücksetzen, da dies bei einer Änderung der Ausrichtung zu einem anderen fragenden Bild Ihres Benutzers wird.

Was den Rest angeht und warum die Mathematik funktioniert, hat Joe Conway bei objc.io in diesem fantastischen Artikel über Grenzen mit UIScrollViews alles dargelegt: Ссылка

Danke an beide und das Poster oben.

%Vor%     
Dan Loughney 23.01.2015 15:26
quelle
5

Die Lösung war ziemlich einfach ... Schau dir diesen Code an (modifizierte Version der Methode von OP):

%Vor%

Ich denke, es gibt nichts zu erklären, da der Code einfach ist.

    
cojoj 19.09.2014 06:56
quelle
2

Um den Zoom einzustellen, der zur Bildgröße in scrollView passt, legen Sie den minimalenZoom für scrollView fest: self.scrollView.minimumZoomScale = self.scrollView.frame.size.width/ self.imageView.frame.size.width;

Der obige Code passt Ihr Bild in die scrollView-Breite.

    
Aks 19.09.2014 06:41
quelle
1

SWIFT 3

Dank @chewy funktionierte das für mich (ich musste dem Bild "Grenzen" hinzufügen):

%Vor%

Rufen Sie dann setZoomScale () in "override func viewWillLayoutSubviews ()"

auf     
A.J. Hernandez 25.10.2016 16:44
quelle
0

Und hier ist die Swift 3 Version

%Vor%     
chewy 19.08.2016 17:00
quelle