Domanda

Modifica per chiedere se Autolayout aiuta in questa situazione?

Come posso far sì che il mio Uilabel mantenga una posizione fissa sullo schermo ma ancora a ruotare? SeuutoroToToToInterfaceorientation sta restituendo sì e l'etichetta sta ruotando bene, ma non importa come ho impostato le spunti di una molle in Xcode La posizione dell'etichetta cambia.

La prima immagine mostra come ho creato il layout nello storyboard, con quattro singoli Uilabel. La seconda immagine mostra come appare il paesaggio, non quello che voglio. La terza immagine mostra come vorrei guardare il paesaggio, con l'animazione di rotazione di ciascun numero centrato sul numero stesso.

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.

È stato utile?

Soluzione

VRK è sulla buona strada con la sua risposta, ma shouldAutorotateToInterfaceOrientation: non è il metodo giusto in cui disporre le etichette. Quando ricevi shouldAutorotateToInterfaceOrientation:, nulla è stato ancora aggiornato per il nuovo orientamento.

Dovresti disporre le tue opinioni in willAnimateRotationToInterfaceOrientation:duration:. Come la documentazione stati:

Quando viene chiamato questo metodo, il interfaceOrientation La proprietà è già impostata sul nuovo orientamento e i limiti della vista sono stati modificati. Pertanto, è possibile eseguire qualsiasi layout aggiuntivo richiesto dalle tue opinioni in questo metodo.

Potresti anche animare Le tue opinioni sulle loro nuove posizioni in questo metodo.

Altri suggerimenti

Potresti eseguire una rotazione sulle etichette (trasformatina). Fallo sul metodo di interfaceorienza di didrotatefrom in UiviewController.

uiLabel.Transform = cGaffineTransFormMakerotation (M_PI / -4); come questo. Esegui questo su tutti e quattro l'orientamento. E una cosa prende l'orientamento della barra status da AppDelegate diverso dall'orientamento del dispositivo. Ti aiuterà a rimanere sincronizzato con l'orientamento alla vista.

È necessario impostare manualmente i valori di posizione del frame dell'etichetta nel metodo SeuutoroToToInterfaceorientation

Crea due Uilabel, uno in orizzontale e altri verticalmente. Nascondi e mostra l'etichetta richiesta quando si cambia l'orientamento. Per fare questo, devi mettere ViewDidload:

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

e implementare

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

       UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

       if (orientation == UIDeviceOrientationLandscapeLeft)
       {

          // show Horizontal Label
       }
       ....
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top