使用Orientation Changed Notification遇到的問題及解決辦法

來源:互聯網
上載者:User

有些情況下uiviewcontroller內建的rotate方法會不起作用,所以需要使用uidevice的Orientation Changed Notification方法

Orientation Changed Notification使用方法:

Orientation Changed NotificationAdd to #AppDelegate.m didFinishLaunchingWithOptions

//----- SETUP DEVICE ORIENTATION CHANGE NOTIFICATION -----UIDevice *device = [UIDevice currentDevice];//Get the device object[device beginGeneratingDeviceOrientationNotifications];//Tell it to start monitoring the accelerometer for orientationNSNotificationCenter *nc = [NSNotificationCenter defaultCenter];//Get the notification centre for the app[nc addObserver:self//Add yourself as an observer   selector:@selector(orientationChanged:)   name:UIDeviceOrientationDidChangeNotification object:device];
Function To Receive Notification Message
//********** ORIENTATION CHANGED **********- (void)orientationChanged:(NSNotification *)note{NSLog(@"Orientation  has changed: %d", [[note object] orientation]);}

不過這樣會有個問題,那就是UIDeviceOrientation是有6種,而UIInterfaceOrientation是4種,這樣在使用UIDeviceOrientationIsPortrait的時候如果取反就會包含unknown或者faceup等情況

typedef enum {   UIDeviceOrientationUnknown,   UIDeviceOrientationPortrait,   UIDeviceOrientationPortraitUpsideDown,   UIDeviceOrientationLandscapeLeft,   UIDeviceOrientationLandscapeRight,   UIDeviceOrientationFaceUp,   UIDeviceOrientationFaceDown} UIDeviceOrientation;
解決方案:在orientationChanged:(NSNotification *)note中加入如下代碼:

if ([[note
object] orientation] ==
UIDeviceOrientationUnknown ||

        [[note
object] orientation] ==
UIDeviceOrientationFaceUp  ||

        [[note
object] orientation] ==
UIDeviceOrientationFaceDown) return;

這樣就可以放心使用UIDeviceOrientationIsPortrait了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.