10

私のiPhoneアプリは縦向きのみのアプリで、私のアプリにUITableViewUIWebView最初のUITableCell. はUIWebView、埋め込まれた YouTube ビデオを示しています。ビデオをクリックして再生すると、フルスクリーン モードになります。私がする必要があるのは、ユーザーがデバイスを回転させ、ビデオを横向きモードで再生できるようにすることです。次に、ビデオが停止すると、縦向きのみが再び許可されます。ビデオが全画面表示になり、全画面表示から出たときに通知をリッスンするように設定しました。しかし、プログラムでユーザーがインターフェイスの向きを回転できるようにする方法がわかりません。

基本的に、通知が渡されたときに2つのメソッドが呼び出されます

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youTubeStarted:) name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youTubeFinished:) name:@"UIMoviePlayerControllerDidExitFullscreenNotification" object:nil];

-(void)youTubeStarted:(NSNotification *)notification{
    // Entered fullscreen code goes here.
}

-(void)youTubeFinished:(NSNotification *)notification{
    // Left fullscreen code goes here.
}

ビデオの再生中にのみ方向の変更を許可するには、これらの 2 つの方法に何を入れますか?

4

3 に答える 3

19

私はそれを考え出した。私の2つの方法では:

-(void)youTubeStarted:(NSNotification *)notification{
   // Entered Fullscreen code goes here..
   AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
   appDelegate.fullScreenVideoIsPlaying = YES;
}

-(void)youTubeFinished:(NSNotification *)notification{
   // Left fullscreen code goes here...
   AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
   appDelegate.fullScreenVideoIsPlaying = NO;

   //CODE BELOW FORCES APP BACK TO PORTRAIT ORIENTATION ONCE YOU LEAVE VIDEO.
   [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];
    //present/dismiss viewcontroller in order to activate rotating.
    UIViewController *mVC = [[UIViewController alloc] init];
    [self presentModalViewController:mVC animated:NO];
    [self dismissModalViewControllerAnimated:NO];
}

AppDelegate の BOOL プロパティを設定して、上記のメソッドで App デリゲートにアクセスしました。次に、AppDelegate.m で以下のアプリケーション メソッドを呼び出しました。

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

    }
    return orientations;
}
}

これself.fullScreenVideoIsPlayingBOOL、AppDelegate.h ファイルでプロパティとして設定したものです。

私がそれを理解するのに失った5時間、これが他の人に役立つことを願っています.

于 2013-06-19T07:19:45.450 に答える
0

おそらくアプリデリゲートまたはグローバルにアクセスできる変数を保存する場所にグローバル状態変数を設定し、ムービープレーヤーがフルスクリーンかどうtrueかに応じて設定します。falseアプリを回転するために呼び出されるコールバックでは、変数の状態を確認し、その結果に応じて、回転が許可されているかどうかを確認します。

于 2013-06-19T02:12:28.903 に答える