Frage

Ich habe viel auf diese gesucht, und kann nichts, mir zu helfen finden.

Ich habe eine UIViewController in einem anderen UIViewController enthalten. Wenn die Eltern UIViewController dreht, sagt von Portrait zu LandscapeLeft, will ich es so aussehen, als ob das Kind nicht drehen tat. Das heißt. Ich will das Kind die gleiche Ausrichtung in den Himmel haben, unabhängig von der Orientierung der Eltern. Wenn es eine UIButton hat, die im Hochformat aufrecht ist, mag ich die rechte Seite der Taste „oben“ in UIInterfaceOrientationLandscapeLeft.

Ist das möglich? Derzeit bin ich wirklich grobe Sachen wie dies zu tun:

-(void) rotate:(UIInterfaceOrientation)fromOrientation: toOr:(UIInterfaceOrientation)toOrientation
{
    if(((fromOrientation == UIInterfaceOrientationPortrait) && (toOrientation == UIInterfaceOrientationLandscapeRight))
       || ((fromOrientation == UIInterfaceOrientationPortraitUpsideDown) && (toOrientation == UIInterfaceOrientationLandscapeLeft)))
    {

    }
    if(((fromOrientation == UIInterfaceOrientationLandscapeRight) && (toOrientation == UIInterfaceOrientationPortraitUpsideDown))
       || ((fromOrientation == UIInterfaceOrientationLandscapeLeft) && (toOrientation == UIInterfaceOrientationPortrait)))
    {

    }
    if(((fromOrientation == UIInterfaceOrientationPortrait) && (toOrientation == UIInterfaceOrientationLandscapeLeft))
       || ((fromOrientation == UIInterfaceOrientationPortraitUpsideDown) && (toOrientation == UIInterfaceOrientationLandscapeRight)))
    {

    }
    if(((fromOrientation == UIInterfaceOrientationLandscapeLeft) && (toOrientation == UIInterfaceOrientationPortraitUpsideDown))
       || ((fromOrientation == UIInterfaceOrientationLandscapeRight) && (toOrientation == UIInterfaceOrientationPortrait)))
    {

    }
    if(((fromOrientation == UIInterfaceOrientationPortrait) && (toOrientation == UIInterfaceOrientationPortraitUpsideDown))
       || ((fromOrientation == UIInterfaceOrientationPortraitUpsideDown) && (toOrientation == UIInterfaceOrientationPortrait)))
    {

    }
    if(((fromOrientation == UIInterfaceOrientationLandscapeLeft) && (toOrientation == UIInterfaceOrientationLandscapeRight))
       || ((fromOrientation == UIInterfaceOrientationLandscapeRight) && (toOrientation == UIInterfaceOrientationLandscapeLeft)))
    {

    }   
}

, die wie eine ganz gute Verschwendung von Code scheint. Außerdem war ich der Planung über die Verwendung CGAffineTransform (wie hier zitiert: http://www.crystalminds.nl/ ? p = 1102 ), aber ich verwirrt bin, ob ich die Auffassung der Dimensionen ändern sollte entsprechen, was sie nach der Drehung sein werden.

Der große Alptraum hier ist, dass Sie den Überblick über ein globales „Orientierung“ Variable zu halten haben. Wenn Sie dies nicht tun, wird die Illusion verloren, und die Viewcontroller gedreht wird in was auch immer.

ich wirklich etwas Hilfe zu diesem Thema verwenden könnte, danke!

War es hilfreich?

Lösung

Das Beste, was Sie tun können, ist den Rahmen Ihres subview Rahmen entsprechend ur Schnittstelle Orientierungen zu ändern. Sie können es wie tun:

 #pragma mark -
 #pragma mark InterfaceOrientationMethods

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown || interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    if(toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
        //self.view = portraitView;
        [self changeTheViewToPortrait:YES andDuration:duration];

    }
    else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){
        //self.view = landscapeView;
        [self changeTheViewToPortrait:NO andDuration:duration];
    }
}

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------

- (void) changeTheViewToPortrait:(BOOL)portrait andDuration:(NSTimeInterval)duration{

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:duration];

    if(portrait){
        //change the view and subview frames for the portrait view
    }
    else{   
        //change the view and subview  frames for the landscape view
    }

    [UIView commitAnimations];
}

Hope, das hilft.

Andere Tipps

ich merkte etwas .. sagen wir mal unser Projekt mehrere Schicht von Viewcontroller haben (wie in, wenn Sie subview andere View-Controller zu Ihrem View-Controller hinzufügen)

willRotateToInterfaceOrientation: Dauer Methode nicht für die zweite Schicht von Viewcontroller genannt werden ...

Also, was ich tat, war, nachdem ich meinen zweiten Schicht-View-Controller von meiner obersten Schicht zu initialisieren, dann, wenn willRotateToInterfaceOrientation: Dauer-Methode auf der obersten Ebene genannt wird, werde ich willRotateToInterfaceOrientation nennen: Dauer für die 2. Schicht-View-Controller als gut

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top