2010-03-31 11 views
6

Ich habe eine Anwendung mit vielen Ansichten. Ich möchte, dass nur ein paar Ansichten in die Landschaft gedreht werden können, wenn das Gerät gedreht wird. Ich fand heraus, dass ich (BOOL)shouldAutorotateToInterfaceOrientation nicht verwenden konnte, weil das jede Ansicht in meiner App drehen würde. Ich habe eine Lösung für dieses Problem hier auf Stack Overflow gefunden, aber jetzt habe ich ein anderes Problem zu behandeln.Größe ändern auf dem iPhone beim Drehen

Die Ansicht dreht sich, wenn ich das Gerät drehe, aber es zeigt immer noch die Ansicht an, als wäre sie immer noch im Hochformat (gerade auf und ab). Die Ober- und Unterseite der Ansicht ist abgeschnitten. Gibt es eine Möglichkeit, die Ansicht zu drehen und auch ihre Größe an die neue Ausrichtung anzupassen? Ich fand auch this aber war nicht in der Lage, es zur Arbeit zu bringen.

Hier ist mein Code für diese Ansicht:

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

Antwort

3

Es sei denn, Sie haben eine sehr einfache Anwendung, die die Ausrichtung anzupassen erstreckt, Auto-Größenanpassung sowieso für Sie nicht gut arbeiten - Sie wirklich erstellen müssen zwei getrennte Ansichten für die zwei Orientierungen.

Hilfe zur automatischen Größen Ansichten, können Sie dieses Tutorial überprüfen:

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

Um die robustere Verfahren zum Schalten von Ansichten zu verwenden, sollte dieses Tutorial Ihnen helfen:

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

+0

Die App zeigt dem Benutzer eine Reihe von Schaltflächen, die zu verschiedenen Ansichten führen. Jede Schaltfläche öffnet eine Ansicht, in der sich das UIWebView befindet. Scheint wie eine ziemlich einfache App, die leicht zu drehen wäre, aber es dauert länger als ich erwartet habe. Ich möchte im Grunde, was Safari auf ein paar Ansichten macht. Ich habe das Clock-Beispiel vorher angeschaut, aber das verwendet den shouldAutorotateToInterfaceOrientation-Code, der jede Ansicht dreht, nicht nur die, die ich will. Erstellen von separaten Ansichten für Hoch- und Querformat-Sounds, die funktionieren könnten, aber die Website, auf der sich der Benutzer befindet, nicht zurücksetzen würden? –

+0

Sie sollten den Status in irgendeiner Weise verwalten können, entweder mit einer Variablen, die speichert, welche Webseite gerade angezeigt wird, oder indem Sie das UIWebView dynamisch (statt im visuellen Designer) erstellen und es Ihren Ansichten hinzufügen (bei Rotation) . –

+0

Die Webansichten sind Links zu einer Seite, auf der sich der Benutzer anmelden und seine Bankverbindung einsehen kann. Info. Selbst wenn ich die Website, auf der sie sich befinden, speichere, wird sie höchstwahrscheinlich wieder abgemeldet oder (da die Informationen dynamisch nicht auf separaten Webseiten bereitgestellt werden), wird sie nicht dort angezeigt, wo sie vorher waren. Ich brauche wirklich nur eine Möglichkeit, den Webview in die Landschaft zu drehen, genau wie es inAutorotateToInterfaceOriention der Fall ist ... nur nicht bei jeder einzelnen Ansicht. Frustrierendes Zeug. –

Verwandte Themen