Frage

Ich habe eine UIScrollView, die ein Bild und eine segmentierte Steuerelement enthält, dass der Benutzer innerhalb des Scroll das Bild zu wechseln. Wenn ich nur das Bild tauschen innerhalb des UIImageView, wird es das neue Bild im gezoomten in Zustand anzuzeigen. Wie setze ich die UIScrollView zurück zu seinem un-gezoomten in Staat?

War es hilfreich?

Lösung

Ich habe eine ausführliche Diskussion darüber, wie (und warum) UIScrollView Zoomen Arbeiten unter github.com/andreyvit/ScrollingMadness / .

(Der Link enthält auch eine Beschreibung, wie UIScrollView programmatisch zoomen, wie Photo Library-Stil Paging + Zoom + Scrollen, ein Beispielprojekt und ZoomScrollView Klasse zu emulieren, die einen Teil der Zoom Magie kapselt.)

Zitat:

UIScrollView keinen Begriff einer „aktuellen Zoomstufe“, weil jeder es Subview enthält, kann seine eigene aktuelle Zoomstufe hat. Beachten Sie, dass in UIScrollView kein Feld die aktuelle Zoomstufe zu halten ist. Allerdings wissen wir, dass jemand, dass die Zoomstufe speichert, denn wenn man eine Subview Pinch-Zoom, dann setzen Sie seine zu CGAffineTransformIdentity verwandeln, und dann wieder kneifen, werden Sie feststellen, dass die vorherige Zoomstufe der subview restauriert wurde.

Ja, wenn man sich die Demontage betrachten, ist es UIView, die ihre eigene Zoomstufe speichert (innen UIGestureInfo Objekt durch das _gestureInfo Feld hingewiesen). Es hat auch eine Reihe von schönen undokumentierten Methoden wie zoomScale und setZoomScale:animated:. (Wohlgemerkt, es hat auch eine Reihe von Drehbezogenen Methoden, vielleicht bekommen wir Rotation Geste bald einen Tag unterstützen.)

Wenn wir jedoch eine neue UIView nur zum Zoomen und fügen Sie unsere reale zoombare Ansicht als sein Kind schaffen, werden wir immer mit Zoomstufe 1.0 starten. Meine Implementierung von programmatischen Zoomen basiert auf diesem Trick.

Andere Tipps

Delegatmethode:

Wenn Sie nicht Ihre Sicht auf die Vollendung des Pinch Zoom-Ereignis neu zu zeichnen, dann wird der Zoomfaktor durch die Transformation Eigenschaft der Ansicht wird Sie von der viewForZoomingInScrollView zurückkehren gesetzt. Um diesen Zoom zurücksetzen, stellen Sie den Wert der Eigenschaft trans zu CGAffineTransformIdentity Ansicht.

Beachten Sie aber, dass Ihr nächster Pinch-Zoom-Betrieb beginnt, wo der vorherige Pinch-Zoom aus links (das heißt, Ihre neue Skala ignoriert wird). Um dies zu umgehen, müssen Sie möglicherweise einige implementieren, was ich beschreiben hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top