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.
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%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 ()"
aufTags und Links objective-c iphone ios uiimageview uiscrollview