Frage

Bearbeitung, um zu fragen, ob Autolayout in dieser Situation hilft?

Wie kann ich mein Uilabel eine feste Position auf dem Bildschirm beibehalten und sich dennoch drehen lassen? SURTAUTOROTATETOInToInterfaceorientation kehrt Ja zurück und das Etikett dreht sich gut, aber egal wie ich die Streben und die Federn in Xcode die Position der Etikettenänderungen einstellte.

Das erste Bild zeigt, wie ich das Layout in Storyboard mit vier einzelnen Uilabeln erstellt habe. Das zweite Bild zeigt, wie Landschaft aussieht - nicht das, was ich will. Das dritte Bild zeigt, wie ich die Landschaft aussehen möchte, wobei die Rotationsanimation jeder Nummer auf die Zahl selbst zentriert ist.

This is how I've created the layout in storyboard, with four individual UILabels. This is how landscape appears -- not what I want. Here is what I would like landscape to look, with the rotation animation of each number centered on the number itself.

War es hilfreich?

Lösung

VRK ist mit seiner Antwort auf dem richtigen Weg, aber shouldAutorotateToInterfaceOrientation: ist nicht die richtige Methode, um Ihre Etiketten auszulegen. Wenn Sie empfangen shouldAutorotateToInterfaceOrientation:, Für die neue Orientierung wurde noch nichts aktualisiert.

Sie sollten Ihre Ansichten auslegen willAnimateRotationToInterfaceOrientation:duration:. Wie die Dokumentation Zustände:

Zum Zeitpunkt dieser Methode heißt die Methode, die interfaceOrientation Die Eigenschaft ist bereits auf die neue Orientierung eingestellt, und die Grenzen der Ansicht wurden geändert. Daher können Sie zusätzliches Layout ausführen, das von Ihren Ansichten in dieser Methode erforderlich ist.

Du könntest gleichmäßig animieren Ihre Ansichten zu ihren neuen Positionen in dieser Methode.

Andere Tipps

Sie können eine Rotation auf den Etiketten (Transformatin) durchführen. Tun Sie dies auf didrotateFrom interfaceorientationsmethode in uiViewController.

uilabel.transform = cgaffinEtransformMakerotation (m_pi / -4); so was. Führen Sie dies bei allen vier Orientierung durch. Und eine Sache nehmen die StatusBar -Orientierung von AppDelegate als Gerätorientierung. Es wird Ihnen helfen, mit der Sichtausrichtung synchron zu bleiben.

Sie müssen die Rahmenpositionswerte des Etiketts manuell in der Methode des seriutorotatetoInterfaceorientation manuell einstellen

Erstellen Sie zwei Uilabels, eine horizontal und andere vertikal. Verstecken und zeigen Sie das erforderliche Etikett, wenn Sie die Ausrichtung ändern. Zu diesem Zweck müssen Sie sich ansehen:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

und implementieren

- (void) didRotate:(NSNotification *)notification{

       UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

       if (orientation == UIDeviceOrientationLandscapeLeft)
       {

          // show Horizontal Label
       }
       ....
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top