Uilabel rotante con posizione fissa
-
27-10-2019 - |
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.
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
}
....
}