2010-03-31 6 views
6

J'ai une application avec de nombreuses vues. Je souhaite que seules quelques vues puissent pivoter vers le mode paysage lorsque l'appareil est pivoté. J'ai découvert que je ne pouvais pas utiliser (BOOL)shouldAutorotateToInterfaceOrientation car cela ferait pivoter toutes les vues de mon application. J'ai trouvé une solution à ce problème ici sur Stack Overflow mais maintenant j'ai un autre problème à régler.Redimensionner la vue sur l'iPhone lors de la rotation

La vue pivote lorsque j'allume l'appareil, mais elle affiche toujours la vue comme si elle était toujours en mode portrait (verticalement). Le haut et le bas de la vue sont coupés. Est-il possible de faire pivoter la vue et d'ajuster sa taille pour l'adapter à la nouvelle orientation? J'ai également trouvé this mais je n'ai pas réussi à le faire fonctionner.

Voici mon code pour ce point de vue:

@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)]; 
    } 
} 

Répondre

3

Sauf si vous avez une application très simple qui s'étend pour correspondre à l'orientation, le redimensionnement automatique ne va pas bien pour vous de toute façon - vous avez vraiment besoin de créer deux vues séparées pour les deux orientations.

Pour obtenir une aide sur les vues d'un redimensionnement automatique, vous pouvez consulter ce tutoriel:

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

Pour utiliser la méthode plus robuste de commutation vues, ce tutoriel devrait vous aider:

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

+0

L'application montre à l'utilisateur un tas de boutons qui vont séparer les vues. Chaque bouton ouvre une vue qui contient UIWebView. On dirait une application assez simple qui serait facile à faire tourner la page Web, mais cela prend plus de temps que prévu. Je veux essentiellement ce que Safari fait sur un couple de vues. J'ai regardé l'exemple de l'horloge avant, mais cela utilise le code de shouldAutorotateToInterfaceOrientation qui fait tourner chaque vue pas seulement celles que je veux. Création de vues séparées pour les portraits et les paysages comme si cela pouvait fonctionner mais ne réinitialiserait-il pas le site Web actuellement utilisé par l'utilisateur? –

+0

Vous devriez pouvoir conserver l'état d'une manière ou d'une autre, soit avec une variable stockant quelle page web est vue ou en créant dynamiquement UIWebView (au lieu du concepteur visuel) et en l'ajoutant à vos vues si nécessaire (lors de la rotation) . –

+0

Les webviews sont des liens vers une page où l'utilisateur peut se connecter et regarder leur compte bancaire. Info. Même si je stocke le site Web sur lequel ils se trouvent, il sera probablement déconnecté de nouveau (ou parce que l'information est fournie dynamiquement pas sur des pages Web distinctes), il n'apparaîtra pas où ils étaient auparavant. J'ai juste juste besoin d'un moyen de faire tourner le webview vers le paysage exactement comme le ferait shouldAutorotateToInterfaceOriention ... mais pas sur chaque vue. Des trucs frustrants. –

Questions connexes