2010-12-31 6 views
2

Ich versuche Autoresizing mit einem PDF-Viewer, den ich für iPad gebaut habe, zu arbeiten.Autoresizing UIViews für einen PDF-Viewer

Meine Ansicht Struktur besteht aus:

Scroll view 
    Document view 
     Page view 
     Page view 
     Page view 

Wie in diesem Diagramm gezeigt: http://i.stack.imgur.com/unV4J.png

Ich habe kein Problem mit den PDF-Seiten angezeigt werden. Sagen wir für die Zwecke dieser Frage, dass jede Seite eine UIImageView ist.

Um die Ansicht zu erstellen, lade ich alle Seiten nacheinander und setze die Rahmen so, dass sie die richtige Größe haben und einen Abstand von 10px haben. Dann stelle ich den Dokumentansichtsrahmen auf die Gesamtgröße aller Seiten ein. Ich füge dann die Dokumentenansicht der Bildlaufansicht hinzu. Das funktioniert gut.

Das Problem ist mit Autoresizing. Ich möchte, dass die Breite der Dokumentansicht (und der darin enthaltenen Seitenansichten) skaliert wird, während die Bildlaufbreite skaliert wird. Die Dokumentansicht und die Seiten müssen offensichtlich ihr Seitenverhältnis beibehalten, so dass die Breite und Höhe flexibel sein müssen. Wenn die Seitenhöhe jedoch flexibel ist, wird die Höhe des Seitenrahmens diejenige der Dokumentansicht.

Ich habe stundenlang herumgespielt und versucht, das richtig auszulegen, aber ich hatte keinen Erfolg. Zuvor habe ich gerade die Frames bei der Rotation aktualisiert, aber es wäre schön, wenn das mit der glatten Größenanpassung funktioniert.

Antwort

0

Ich löste dies programmgesteuert.

Zuerst habe ich versucht, die UAView-Methode layoutSubviews zu verwenden, um die Unteransichten bei der Größenänderung neu zu positionieren. Dies geschah jedoch nur einmal zu Beginn einer Animation (mit MGSplitViewController kann es in anderen Situationen anders sein), stattdessen überschreibe ich die setFrame Methode, um die Subviews dort neu zu positionieren. Das funktioniert großartig und jetzt meine Ansichten reibungslos belebt, wo sie sein sollten.

Wenn mir jemand mit Autoresizing helfen kann, dann würde ich mir eine bessere Antwort überlegen, aber vorläufig bin ich mit dieser Lösung zufrieden.

Verwandte Themen