Frage

Ich bin mit diese .

Ich habe dieses in dem die Bilder hinzugefügt werden:

self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Ich habe diese Überschreibungen in SlideShowViewController setzen:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return YES;
}

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)InterfaceOrientation duration:(NSTimeInterval)duration {


}

Die erste genannt wird, aber nicht die zweite.

Ich bin nicht mit einer Spitze; es verwendet eine benutzerdefinierte init, die eine self.view mit den drei Bildern auf sie zurück.

Bin ich etwas fehlt? Was wäre der beste Weg, um dieses Skript zu ändern, die Landschaftsaufnahmen in voller Breite strecken zu erhalten, wenn das iPhone durch den Benutzer gedreht wird?

Edit: Gerade versucht das Hinzufügen willAnimate ... zum Stamm-View-Controller meines Navigation, aber es wird nicht aufgerufen. Vielleicht ist das Navigation das Problem? In diesem Fall, wo ich die willAnimate setzen ...? Alternativ wie erhalte ich und auf Nachrichten, um es auf den sichtbaren Viewcontroller übergibt geschickt?

Edit 2: Ursache des Fehlers im Thema war, dass die TabBarController wurde eine Verbindung in IB fehlt (was ich sicher war, war dort). So, jetzt mein Problem ist das gleiche wie für einige andere ähnliche Fragen - willAnimate ... wird in root VC aber nicht in den geschoben VCs genannt. Der Code, den ich habe Blendungen in der Galerie verwendet VC eher als Dia es in, das heißt. es ist nicht gedrückt, aber derzeit als Subview zum Fenster hinzugefügt -. das gesamte Display zu füllen

Vorschläge, wie auf der Nachricht, dass subview der Steuerung, den Rahmen setzen würde geschätzt, oder alternative Lösungen!

War es hilfreich?

Lösung

Das ist keine Antwort, warum Ihr „willAnimateRotation ...“ - Methode nicht Auslöser, sondern eine Alternative zu, wie sich die Fotogalerie zu Drehungen anpassen kann sich

In initWithImages hinzufügen:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(didRotate:)
                                             name:UIDeviceOrientationDidChangeNotification object:nil];

Fügen Sie diese Methode, um die Benachrichtigung zu erhalten. In didRotate können Sie behandeln die eine Neupositionierung der Bilder Größe ändern.

- (void) didRotate:(NSNotification *)notification
{   
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

    if (orientation == UIDeviceOrientationLandscapeLeft)
    {
        NSLog(@"Landscape Left!");
    }
}

Vergessen Sie nicht, die Meldung in dealloc abzumelden:

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];

auch Mai schlage ich vor, dass Sie eine UIScrollView verwenden, anstatt Umgang mit sich selbst Scrollen und Gesten?

Andere Tipps

gedrückt wird SlideShowViewController direkt auf den Stapel Navigation Controller, oder ist es Teil einer anderen Ansicht? Die UIView Delegatmethoden bekommen Art vermasselt, wenn sie mit Subviews auf Ansichten über die Navigation Controller-Stack arbeiten.

Wenn SlideShowViewController nur ein Subview einer anderen Ansicht ist, die auf den Navigation Controller Stapel geschoben worden ist, würde ich versuchen, für diese Methode im View-Controller zu hören, die tatsächlich auf dem Navigation Controller Stack ist, und ruft dann die entsprechende Methode in SlideShowViewController von dort aus.

Ich hatte ein ähnliches Problem in immer viewWillAppear und ähnliche Verfahren innerhalb einer Navigationssteuerung genannt.
Ich gelöst, indem sie manuell, wenn die Wurzel Aufruf der Methode aufgerufen wird.
Ich weiß nicht, ob es mit einer Drehung das gleiche Problem ist, aber man kann versuchen, in Ihrer Stammansicht setzt Controller

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)InterfaceOrientation duration:(NSTimeInterval)duration {
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    [self.navigatioController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}

Diese Frage war ein bisschen schwierig zu beantworten, ich denke, da es über meinen spezifischen nicht-rudimentären app Setup war. Es tut uns lassen die Prämie Zeit abgelaufen, es war im Grunde zu spät am selben Tag fragte ich;)

Ich dachte, ich würde schreiben dies für alle ‚nicht in den Kommentaren begraben‘, die die gleichen Symptome bekommt.

Das war zunächst, dass ich eine IBOutlet bemerkt, dass ich bin sicher, verbunden ich an einem Punkt wurde nicht mehr verbunden (Tab Bar Controller -> TabBarController Objekt). Da ich mir den Kopf und zog Sachen Abstich um diese Arbeit zu machen, das war wahrscheinlich wegen mir etwas versuchen, und dann ein Backup wiederherstellen.

Der zweite Teil der Lösung addSubView war die Galerie-Ansicht der Ansicht der TabBarController statt der navigierten zu sehen. Dann wird die Root-Ansicht-Controller des shouldAuto ... und willAuto Methoden aufgerufen wurden.

(Um die Tab-Leiste und Navigationsleiste zu verstecken während des Drehens ich ihre alpha auf 0 zu setzen hatte, während die Galerie angezeigt wird, da sonst die navigiert zu Ansicht, teilweise unter der Navigationsleiste ausgeblendet, wenn es zurückkehrt. Ich fand keine Weg, um die Statusleiste versteckt, während die Galerie zeigt.)

Danach gab es eine Anfrage die Galerie in einer Detailansicht von einem anderen Tab navigiert haben, und ich habe den kniffligen Fehler, der nur während der anderen (Arbeits-) Detail-Ansicht unter dem anderen Reiter gezeigt wurde Arbeit autorotate würde mit der neuen Galerie. Wird auf diese, quittin Zeit zur Lösung zurück.

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