ฉันแค่ใช้ศูนย์การแจ้งเตือน:
เพิ่มตัวแปรการวางแนว (จะอธิบายในตอนท้าย)
//Above viewdidload
var orientations:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
เพิ่มการแจ้งเตือนเมื่อมุมมองปรากฏขึ้น
override func viewDidAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "orientationChanged:", name: UIDeviceOrientationDidChangeNotification, object: nil)
}
ลบการแจ้งเตือนเมื่อมุมมองหายไป
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIDeviceOrientationDidChangeNotification, object: nil)
}
รับการวางแนวปัจจุบันเมื่อมีการแจ้งเตือน
func orientationChanged (notification: NSNotification) {
adjustViewsForOrientation(UIApplication.sharedApplication().statusBarOrientation)
}
ตรวจสอบการวางแนว (แนวตั้ง / แนวนอน) และจัดการเหตุการณ์
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
}
}
}
เหตุผลที่ฉันเพิ่มตัวแปรการวางแนวก็เพราะว่าเมื่อทำการทดสอบบนอุปกรณ์จริงการแจ้งเตือนการวางแนวจะถูกเรียกทุกครั้งที่มีการเคลื่อนไหวเล็กน้อยในอุปกรณ์ไม่ใช่เฉพาะเมื่อมันหมุน การเพิ่มคำสั่ง var และ if จะเรียกใช้โค้ดก็ต่อเมื่อมันเปลี่ยนไปอยู่ในทิศทางตรงกันข้าม
UIViewController
อ่านเอกสารสำหรับ ดูหัวข้อ "การจัดการมุมมองการหมุนเวียน" ซึ่งจะอธิบายถึงสิ่งที่คุณควรทำ