2 Stimmen

Kann ein UIScrollView so angepasst werden, dass es horizontal, aber nicht vertikal zoomt? (wie)

Ich versuche, eine Timeline-Ansicht zu erstellen, die Ereignisse als UIButtons anzeigt, die gedrückt werden können, um weitere Informationen zu erhalten.

Idealerweise möchte ich die Buttons auf einem UIScrollView layouten und ihnen erlauben, horizontal zu strecken/schrumpfen, aber nicht vertikal.

Was ich erreichen möchte, wäre im Grunde genommen äquivalent dazu, Pinch-Gesten zu verwenden, um die Inhaltsansicht zu vergrößern, und einen Scrollview zu verwenden, um von Seite zu Seite zu bewegen - könnten Sie mich in die richtige Richtung weisen oder vorschlagen, wie Sie so etwas erreichen könnten?

Mein erster Gedanke ist ein UIScrollView, um einen UIView-Unteransicht zu skalieren, und eine weitere Unteransicht zu haben, die sich vertikal nicht ändert, sondern nur horizontal, wenn sich die Grenzen ändern, und das vertikale Scrollen deaktivieren. Vielleicht könnte ich eine dieser UIView-Unteransichten überspringen und nur eine alles tun lassen. Es fühlt sich nur so an, als würde ich versuchen, dies wie eine HTML-Seite oder so etwas mit all diesen Containern zusammenzusetzen.

Weiß nicht, ob ich das alles gut genug erklärt habe, um auf eine Antwort hoffen zu können, aber jede Hilfe ist willkommen.

9voto

Rolf Staflin Punkte 1672

Ich habe die horizontale Skalierung implementiert, indem ich eine Unterklasse von UIView erstellt habe, die einfach setTransform überschreibt und die Y-Skala auf 1 setzt, wann immer die UIScrollView die Skala ändert:

@interface DiagramStripView : UIView { }
@end

@implementation DiagramStripView

- (void)setTransform:(CGAffineTransform)newValue;
{
    newValue.d = 1.0;
    [super setTransform:newValue];
}

@end

Wie der Klassenname vermuten lässt, hält meine Ansicht eine Reihe von Diagrammen, die jeweils eine Bildschirmbreite haben. Wenn der Benutzer loslässt, setzt der Ansichtscontroller die Skalierung der Ansicht auf 1 zurück und zeichnet alles neu in die neue Skala:

- (void) scrollViewDidEndZooming:(UIScrollView *)scrollView 
                        withView:(UIView *)view atScale:(float)scale 
{
    diagramStripView.transform = CGAffineTransformIdentity;
    [self redrawDiagrams:scale];
}

0voto

Jason Punkte 27030

Ich habe das noch nicht ausprobiert, aber du könntest versuchen, alles in einem UIScrollView zu platzieren, und wann immer du eine Änderung des Zoomlevels feststellst, die Transformationen aller untergeordneten Ansichten auf CGAffineTransformMakeScale(1.0, 1.0/zoomLevel) anpassen. Auf diese Weise zoomt der Scrollview alles hoch, aber jede Unteransicht skaliert sich vertikal nach unten, um den Zoom auszugleichen.

-2voto

tc. Punkte 33176

Angenommen, Sie möchten den Text des Buttons tatsächlich nicht vergrößern/verkleinern, der einfachste Weg ist es, alle Buttons neu zu dimensionieren. Ich weiß, es ist mühsam.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X