2016-06-02 13 views
2

Ich versuche einen View-Controller zu erstellen, der Apples Kamera-App sehr ähnlich ist. Beachten Sie, wie die untere Leiste an der Home-Taste hängt, egal wie Sie das Telefon drehen. Einzelne Elemente rotieren und bewegen sich als Antwort, aber bleibt die Hauptansicht an Ort und Stelle.Wie man Kamera-App imitiert - Override-Orientierungswechselanimation?

Wie kann ich das neu erstellen?

iOS Camera App Portrait http://content.gcflearnfree.org/topics/230/2013_camera_orient_por.jpg

iOS Camera App Lanscape http://content.gcflearnfree.org/topics/230/2013_camera_orient_lan.jpg

Wenn ich damit Orientierungen für die meiner Meinung nach ist es eine große störende Animation wie die ganze Sicht dreht sich um. Ich brauche Dinge, um an Ort und Stelle zu bleiben.

Ich habe versucht, Orientierungsänderungen in meiner Ansicht zu deaktivieren, und animiert alles von Hand, aber ich muss einen UIAlertController präsentieren, und die Warnung erscheint auf dem Kopf oder seitwärts, wenn Sie das Telefon gedreht haben.

Gibt es eine Möglichkeit, Orientierungsänderungen zuzulassen, aber die Animation sofort auszuführen? Dann könnte ich Elemente gleichzeitig in ihre neue Position bringen und sie scheinen still zu stehen.

Wenn nicht, wie würden Sie die Ausrichtung und das Layoutverhalten der iOS Camera App neu erstellen?

+2

Haben Sie bei https://developer.apple.com/library/ios/qa/qa1890/_index.html geschaut? – beyowulf

+0

Nein, das ist großartig, danke! Ich denke, dass ich eine einfachere Lösung habe, werde ich unten posten. –

Antwort

1

Hier ist eine Lösung zusammen aus verschiedenen anderen Fragen gekratzt:

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) 

    let duration = coordinator.transitionDuration() 
    UIView.animateWithDuration(duration, animations: { 
     // things you want to animate go here 
     // any animations we kick off before turning them off will continue 
    }) 

    // prevent any animations until this completes 
    UIView.setAnimationsEnabled(false) 
    coordinator.animateAlongsideTransition({ context in 

    }, completion: { context in 
     // turn animations back on. 
     UIView.setAnimationsEnabled(true) 
    }) 
}