0

我的應用程序設計需要UIViews能夠感知旋轉。iPad的旋轉:第一次旋轉事件沒有通知?

當我的應用程序啓動時,它收到一個UIApplicationWillChangeStatusBarOrientationNotification

然而,然後,在第一次旋轉(任一方向到任一方向)上不收到通知。

每個後續循環事件都會生成預期的UIApplicationWillChangeStatusBarOrientationNotification通知。

這同樣適用於UIDeviceOrientationDidChangeNotification通知,當下面的代碼被更改爲設備方向檢查 - 結果是相同的。

代碼: (myUIView INIT)

// set up to listen for rotation 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

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

(上旋轉myUIView)

-(void)didRotate 
{ 

if ([self landscape]) // rotated TO landscape 
    { 
    // do landscape stuff 
    } 
} 

(在myUIView旋轉止)

// answer the question: are we landscape? Yes or no. No indicates portrait.            
-(BOOL)landscape 
{ 
    UIInterfaceOrientation iOrientation = [UIApplication sharedApplication].statusBarOrientation; 

// Just get a displayable string version 
    NSString* iOrientationString ; 
    switch (iOrientation) { 
    case UIInterfaceOrientationPortrait : iOrientationString = @"UIInterfaceOrientationPortrait" ; break ; 
    case UIInterfaceOrientationPortraitUpsideDown : iOrientationString = @"UIInterfaceOrientationPortraitUpsideDown" ; break ; 
    case UIInterfaceOrientationLandscapeLeft:iOrientationString = @"UIInterfaceOrientationLandscapeLeft" ; break ; 
    case UIInterfaceOrientationLandscapeRight:iOrientationString = @"UIInterfaceOrientationLandscapeRight " ; break ; 
    } 
    NSLog(@"%@=%@" , @S(iOrientation) , iOrientationString) ; 



    return UIInterfaceOrientationIsLandscape(iOrientation); 
} 

我注意到,在UIViewController,正確調用-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation,第一次旋轉和全部。

但我想有旋轉感知的意見。有沒有解釋,和/或解決方案,爲失蹤的第一個事件?

+0

put [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];放入applicationdidFinishLaunchingWithOptions或放到awakefromnib中。 – Maruti

+0

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];在applicationdidFinishLaunchingWithOptions或awakefromnib中,它就是它的所在之處(我的發佈代碼的第一行)是否會產生如此巨大的差異?回想一下它(工作中) - 只是錯過了第一個事件。 –

回答

0

最後,我去了更'正常'?解決方案,因此我在UIViewController中使用-(void)didRotateFromInterfaceOrientation,並放棄了旋轉感知UIView

感謝您的幫助。