2010-03-31 6 views
6

Ho un'applicazione con molte viste. Voglio solo un paio di viste per poter ruotare in orizzontale quando il dispositivo viene ruotato. Ho scoperto che non potevo usare (BOOL)shouldAutorotateToInterfaceOrientation perché ciò avrebbe ruotato ogni vista nella mia app. Ho trovato una soluzione a questo problema qui su Stack Overflow ma ora ho un altro problema da affrontare.Ridimensiona vista su iPhone durante la rotazione

La vista ruota quando si accende il dispositivo ma continua a mostrare la vista come se fosse ancora in modalità verticale (diritto su e giù). La parte superiore e inferiore della vista è tagliata. C'è un modo per far ruotare la vista e anche regolarne le dimensioni per adattarsi al nuovo orientamento? Ho trovato anche this ma non sono riuscito a farlo funzionare.

Ecco il mio codice per quella vista:

@implementation businessBank 
@synthesize webView, activityIndicator; 


- (void)viewDidLoad { 

    [super viewDidLoad]; 
    NSString *urlAddress = @"website_url"; 

    NSURL *url = [NSURL URLWithString:urlAddress]; 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 

    [webView loadRequest:requestObj]; 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(didRotate:) 
               name:UIDeviceOrientationDidChangeNotification 
               object:nil]; 

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

    UIDeviceOrientation orientation = [[notification object] orientation]; 

    if (orientation == UIDeviceOrientationLandscapeLeft) { 
     [self.view setTransform:CGAffineTransformMakeRotation(M_PI/2.0)]; 
    } else if (orientation == UIDeviceOrientationLandscapeRight) { 
     [self.view setTransform:CGAffineTransformMakeRotation(M_PI/-2.0)]; 
    } else if (orientation == UIDeviceOrientationPortraitUpsideDown) { 
     [self.view setTransform:CGAffineTransformMakeRotation(M_PI)]; 
    } else if (orientation == UIDeviceOrientationPortrait) { 
     [self.view setTransform:CGAffineTransformMakeRotation(0.0)]; 
    } 
} 

risposta

3

A meno che non si dispone di un applicazione molto semplice che si estende per abbinare l'orientamento, auto-ridimensionamento non è andare a lavorare bene per voi comunque - si ha realmente bisogno per creare due viste separate per i due orientamenti.

Per informazioni su come il ridimensionamento automatico di vista, è possibile controllare questo tutorial:

http://theappleblog.com/2009/04/08/iphone-dev-sessions-how-to-make-an-orientation-aware-clock/

Per utilizzare il metodo più robusto di commutazione di vista, questo tutorial vi possono aiutare:

http://icodeblog.com/2008/08/03/iphone-programming-tutorial-transitioning-between-views/

+0

L'app mostra all'utente una serie di pulsanti che vanno a separare le visualizzazioni. Ogni pulsante apre una vista che contiene UIWebView. Sembra un'app abbastanza semplice che sarebbe facile far ruotare la pagina web, ma impiega più tempo di quanto mi aspettassi. Fondamentalmente voglio quello che fa Safari su un paio di visualizzazioni. Ho già visto l'esempio di Clock ma utilizza il codice shouldAutorotateToInterfaceOrientation che ruota tutte le viste non solo quelle che voglio. La creazione di viste separate per i suoni verticali e orizzontali come potrebbe funzionare ma non ripristinerebbe il sito Web in cui l'utente è attualmente attivo? –

+0

Dovresti essere in grado di mantenere lo stato in qualche modo, sia con una variabile che memorizza quale pagina web viene visualizzata o creando UIWebView dinamicamente (invece che nel visual designer) e aggiungendolo alle tue visualizzazioni secondo necessità (a rotazione) . –

+0

Le visualizzazioni Web sono collegamenti a una pagina in cui l'utente può accedere e osservare il proprio acconto bancario. Informazioni. Anche se memorizzo il sito Web in cui si trovano, è probabile che si disconnettano di nuovo o che (poiché le informazioni vengono fornite dinamicamente non su pagine Web separate) non verranno visualizzate dove si trovavano prima. Ho davvero solo bisogno di un modo per ruotare la webview in orizzontale esattamente come dovrebbe fare AutotateToInterfaceOriention ... semplicemente non su ogni singola vista. Roba frustrante. –