0

我正在研究方向和電影播放器​​。該功能如下:iOS - 用戶界面不會隨着設備旋轉變化而變換

  • 如果我打開MPMoviePlayer的全屏模式,那麼它應該在只打開橫向模式。

  • 如果我轉動我的設備爲橫向,然後它會自動啓動MPMoviePlayer

  • 的全屏模式和它再次回到縱向模式時,我關掉
    MPMoviePlayer的全屏模式或旋轉裝置到肖像模式。

現在的問題是,它關係到在設備旋轉全屏模式爲橫向模式

,但在回來的時候,用戶界面是不是轉變到肖像模式正常。

此問題僅適用於iOS 8.1,8.2。它在iOS 7. *和8.3,8.4中工作正常。

請看附屏幕:

全屏幕前:

enter image description here

後全屏:

enter image description here

回來到肖像模式:

enter image description here

我已經使用這個代碼來處理方向:

allowRotation是布爾屬性在AppDelegate.h文件中聲明

//添加對電影播放觀察員定位事件在應用程序代表

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerWillEnterFullscreenNotification:) name:MPMoviePlayerWillEnterFullscreenNotification object:nil]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerWillExitFullscreenNotification:) name:MPMoviePlayerWillExitFullscreenNotification object:nil]; 

//觀察方法

- (void) moviePlayerWillEnterFullscreenNotification:(NSNotification*)notification { 

    allowRotation = YES; 
} 


- (void) moviePlayerWillExitFullscreenNotification:(NSNotification*)notification { 

    allowRotation = NO; 
} 

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 

    if (([[self.window.rootViewController presentedViewController] isKindOfClass:[MPMoviePlayerViewController class]] && ![[self.window.rootViewController presentedViewController] isBeingDismissed]) || allowRotation) 
    { 
     return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight; 
    } 
    else{ 

     allowRotation= NO; 
     return UIInterfaceOrientationMaskPortrait; 
    } 
    return UIInterfaceOrientationMaskPortrait; 
} 

請幫我解決這個問題。

+0

你是怎麼解決的呢? – SwiftArchitect

回答

0

在你UIViewController,實現

-(UIInterfaceOrientationMask)supportedInterfaceOrientations 
{ 
    // Do the dynamic logic here 
} 

不要

不要忽視window參數傳入:

- (UIInterfaceOrientationMask)application:(UIApplication *)application 
     supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window 

您當前的代碼實際上是沒有迴應這個問題n:ForWindow。


一般的做法是返回

  1. 所有可能的方向對於一個給定的窗口(通常只有每個應用程序的單一窗口)在supportedInterfaceOrientationsForWindow
  2. 的一個子集列表,它可以是動態的,在視圖控制器supportedInterfaceOrientations中。

// App delegate 
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window { 
    return UIInterfaceOrientationMaskAllButUpsideDown; 
} 

// View controller 
-(UIInterfaceOrientationMask)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 
相關問題