2010-12-13 9 views
3

Ich habe einen UIViewController mit einer Reihe von Subviews, die ich in einer anderen Reihenfolge anlegen muss, wenn sich das iPad im Hoch- oder Querformat befindet. Ich möchte in der Lage sein, die Größe zu nehmen, die die Ansicht des UIViewControllers nach der Drehung transformieren wird, so dass ich den neuen Satz von Frames für meine Untersichten berechnen kann. Ich habe jedoch keine Möglichkeit gefunden, diese neue Größe zu erhalten, bevor die Rotation stattfindet, und zu dem Zeitpunkt, an dem die Rotation stattgefunden hat, ist es zu spät, da ich den Übergang der Untersichten in ihre neuen Spots nicht animieren kann.Die Größe der Ansicht eines UIViewControllers nach der Drehung ermitteln

Kennt jemand einen Weg um dies?

Antwort

3

Haben Sie versucht willAnimateRotationToInterfaceOrientation:duration:. In der Dokumentation heißt es:

Wenn diese Methode aufgerufen wird, ist die Eigenschaft interfaceOrientation bereits auf die neue Ausrichtung eingestellt. Auf diese Weise können Sie jedes zusätzliche Layout ausführen, das für Ihre Ansichten in dieser Methode erforderlich ist.

Ich glaube, dass die View-Controller-Ansicht auch seine neuen Dimensionen in dieser Methode haben sollte.

+0

Ich versuche gerade, das gleiche Problem herauszufinden, und ich fand, dass die Ansicht nicht bereits seine neuen Dimensionen hat. Wenn ich die Breite der Ansicht in 'willAnateRotationToInterfaceOrientation: duration' festlege, wird die Ansicht am Ende eine Lücke in der Statusleiste haben. – Aaron

1

Definieren Sie Ihre landscape und portrait Ansichten in der Kopfzeile, so bringen Sie in Builder-Schnittstelle, und versuchen Sie diesen Code:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    if(((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || 
     (interfaceOrientation == UIInterfaceOrientationLandscapeRight))){ 

     self.view = landscape; 

}else if(((interfaceOrientation == UIInterfaceOrientationPortrait) || 
    (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown))){ 

     self.view = portrait; 

    } 
    return YES; 
} 

Das ist viel einfacher als in der Ansicht für jedes Objekt die neuen Rahmen zu berechnen.

Um zu animieren, können Sie in [UIView beginAnimations:@"animation" context:nil]; & [UIView commitAnimations]; zu animieren, um die neue Ansicht zu animieren.

Verwandte Themen