Domanda

Ho guardato tutte le domande finora e nessun sembrano rispondere a questa domanda in realtà.

Ho creato un UITabBarController e ha aggiunto diversi controller di vista ad esso. La maggior parte dei punti di vista sono visto in verticale, ma si deve essere vista nel paesaggio. Non voglio usare l'accelerometro o rilevare quando l'utente ruota il dispositivo, voglio solo mostrare la visualizzazione in modalità orizzontale quando scelgono quella vista dalla scheda in basso.

Voglio le animazioni regolari a verificarsi, come la scheda abbandono, la vista di rotazione, ecc, quando scelgono tale elemento, e il contrario accada quando scelgono una visione diversa.

Non c'è un built-in proprietà o il metodo per dire al sistema ciò orientamento per visualizzare la vista come?

Override del shouldautorotate ... metodo non fa assolutamente nulla per quanto posso dire.

Il tipo di risposta che non avrebbe apprezzato è "RTFM" perché ho già, e chiunque abbia sviluppato per l'iPhone sa finora che c'è ben poco M utile per F-ing R.

È stato utile?

Soluzione

postare su un forum che potrebbe aiutare. Risposta breve è che devi ruotare manualmente la vista o il controller una volta che la vista è stato redatto, nel viewWillAppear: Metodo

CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90));
landscapeTransform = CGAffineTransformTranslate (landscapeTransform, +80.0, +100.0);

[[appDelegate navController].view setTransform:landscapeTransform];

Altri suggerimenti

Ecco quello che sto facendo per fare questo:

In primo luogo, mettere questa definizione nella parte superiore del file, proprio sotto i vostri #imports:

#define degreesToRadian(x) (M_PI * (x) / 180.0)

poi, nel viewWillAppear: Metodo

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];     
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {  
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}

se si desidera che per essere animato, allora si può avvolgere il tutto in un blocco di animazione, in questo modo:

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];     
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {  
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}
[UIView commitAnimations];

Eseguire l'override del metodo di orientamento nella classe controller e costringerlo a Landscape in questo modo:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    // Overriden to allow any orientation.
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

Semplice ed efficace!

shouldAutorotateToInterfaceOrientation funziona solo se tutti la vista nel tabbarcontroller o tutti i controller di vista del navigationController concordare una rotazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top