2013-09-30 85 views
15

我做了什麼?iOS - 視頻不能僅在iOS7上通過iPhone旋轉?

我在玩視頻在擴展類的MPMoviePlayerViewController和已實施定向功能如下

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 

    if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){ 
     return FALSE; 
    } 
    else{ 
     return TRUE; 
    } 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [self setControlsPositions:toInterfaceOrientation]; 
} 
-(BOOL)shouldAutorotate 
{ 
    return YES; 
} 

我現在面臨什麼問題?

應用程序在iPhone和iPad上的iOS6上運行良好Almong使用iPad(使用iOS7),但視頻不通過安裝iOS7的iPhone旋轉。

這種問題的原因是什麼以及如何解決?

更新

我發現,在影片結束旋轉如果setMovieSourceType是 設置爲MPMovieSourceTypeUnknown但是,當設置爲 `MPMovieSourceTypeStreaming

+0

您的結論聽起來像是MediaPlayer框架中的一個錯誤(又一個錯誤)。我強烈建議使用最小化的示例提交錯誤報告。 – Till

+0

@Till這似乎是一個不錯的選擇,但我在哪裏發送錯誤報告。我的意思是發送電子郵件到蘋果或在蘋果論壇發帖? –

+1

關於[蘋果網站bug雷達服務](https://bugreport.apple.com)。另外,在[OpenRadar](http://openradar.appspot.com/)上也可能是一個好主意。 – Till

回答

3

當蘋果想讓我給他們一個iOS-7報告的bug的樣本後,我發現我並沒有推視圖控制器,而是將視圖添加到窗口。 在這種情況下,其他視圖控制器確實獲取方向事件,但MPMoviePlayerViewController子類沒有,所以我只是介紹視圖控制器,而不是添加其視圖,它的工作。

0

旋轉方法改變不旋轉在iOS 6中,您需要將iOS 6旋轉方法添加到視圖控制器:

- (BOOL)shouldAutorotate { 
    return YES: 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskAllButUpsideDown; 
} 

而且您需要將支持的方向添加到Supported interface orientations到您的應用程序info.plist

iOS 6.0 release信息:

UIViewController類具有新的接口支持以下 行爲:

  • 新接口提供了管理和跟蹤界面旋轉更清晰的路徑。
+0

但它的工作正常在iOS6和iOS7在iPad –

+1

此外在信息。 plist除了'UIInterfaceOrientationPortraitUpsideDown'外允許所有屏幕方向 –

+0

如果您沒有實現['shouldAutorotate'](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/) Reference.html#// apple_ref/doc/uid/TP40006926-CH3-SW124),該值被認爲是「YES」。然後,如果旋轉與任何支持的旋轉形式「info.plist」相匹配,那麼您的視圖就會旋轉。如果你實現上述方法,你的'MPMoviePlayerViewController'子類將再次旋轉。 – rckoenes

1

嘗試這種解決方案:

在你AppDelegate.h

@property (nonatomic, assign) BOOL *fullScreenVideoIsPlaying; 

在你AppDelegate.m

@synthesize fullScreenVideoIsPlaying; 

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 
    NSUInteger orientations = UIInterfaceOrientationMaskPortrait; 
    if (self.fullScreenVideoIsPlaying) { 
     return UIInterfaceOrientationMaskAllButUpsideDown; 
    } 
    else { 
     if(self.window.rootViewController){ 
      UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject]; 
      orientations = [presentedViewController supportedInterfaceOrientations]; 
     } 
     return orientations; 
    }} 

在您的視圖控制器:

viewDidLoad方法:

myDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieStarted:) name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinished:) name:@"UIMoviePlayerControllerWillExitFullscreenNotification" object:nil]; 

並添加這兩種方法在同一類:

-(void) movieStarted:(NSNotification*) notif { 
    myDelegate.fullScreenVideoIsPlaying = YES; 
} 
-(void) youTubeFinished:(movieFinished*) notif { 
    myDelegate.fullScreenVideoIsPlaying = NO; 
} 
0

我認爲設備旋轉被鎖定在控制中心因爲它在iPad等iOS 7運行良好。