Ben sadece bildirim merkezini kullanıyorum:
Bir yönelim değişkeni ekleyin (sonunda açıklanacaktır)
//Above viewdidload
var orientations:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
Görünüm göründüğünde Bildirim ekle
override func viewDidAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "orientationChanged:", name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Görünüm kaybolduğunda Bildirimi Kaldır
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceOrientationDidChangeNotification, object: nil)
}
Bildirim tetiklendiğinde mevcut yönlendirmeyi alır
func orientationChanged (notification: NSNotification) {
adjustViewsForOrientation(UIApplication.sharedApplication().statusBarOrientation)
}
Yönü kontrol eder (dikey / yatay) ve olayları yönetir
func adjustViewsForOrientation(orientation: UIInterfaceOrientation) {
if (orientation == UIInterfaceOrientation.Portrait || orientation == UIInterfaceOrientation.PortraitUpsideDown)
{
if(orientation != orientations) {
println("Portrait")
//Do Rotation stuff here
orientations = orientation
}
}
else if (orientation == UIInterfaceOrientation.LandscapeLeft || orientation == UIInterfaceOrientation.LandscapeRight)
{
if(orientation != orientations) {
println("Landscape")
//Do Rotation stuff here
orientations = orientation
}
}
}
Bir yönelim değişkeni eklememin nedeni, fiziksel bir cihaz üzerinde test yaparken, yön bildiriminin sadece döndüğünde değil, cihazdaki her küçük harekette çağrılmasıdır. Var ve if deyimlerinin eklenmesi, kodu yalnızca ters yöne geçtiyse çağırır.
UIViewController
. "Görünüm Rotasyonlarını İşleme" başlıklı bölüme bakın. Ne yapmanız gerektiğini açıklıyor.