Come mantenere un'immagine da autorotating?
-
02-10-2019 - |
Domanda
Ho un UIImageView come immagine di sfondo per la mia domanda, che, come un elicottero in difficoltà, autorotates. Il problema è quando l'orientamento autorotates mia immagine viene spostata in tutto il posto e non mi piace. Dal momento che è un semplice tessitura immagino l'utente preferirebbe averlo rimanere al suo posto, e non Rotazione automatica. Quello che voglio dire è che vorrei l'immagine di rimanere a schermo intero, e quando l'utente ruota il telefono l'immagine è solo ruotata di 90 gradi in modo che appaia l'immagine è statica con il telefono, non il resto dell'applicazione.
Soluzione
È possibile provare l'attuazione del metodo willAnimateRotationToInterfaceOrientation:duration:
nel vostro controller della vista e ruotando la UIImageView
nella direzione opposta.
Il codice che segue è dalla parte superiore della mia testa, non posso garantire che funzionerà:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
CGFloat angle = M_PI/2; // Figure out the proper angle
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];
imageview.transform = CGAffineTransformMakeRotation(angle);
[UIView commitAnimations];
}
Altri suggerimenti
Suggerisco di ruotare l'immagine in un'immagine-editing software e caricarlo in modo dinamico. Questo è molto, molto più facile da fare, di fare in giro con gli angoli (e anche il codice più facile da leggere).
In questo modo:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
myBackground.image = [UIImage imageNamed:@"bg.jpg"];
} else { // landscape view
myBackground.image = [UIImage imageNamed:@"bg_landscape.jpg"];
}
}