2

私は、5つのタブ(ビュー)を備えた純粋なタブバーコントローラーであるアプリを持っています。私はそれらのビューをポートレートのみにしたい。ただし、このアプリではビデオクリップの再生が許可されており、MPMoviePlayerViewControllerを使用して再生されます。しかし、プレイヤーを横向きに回転させることはできません!

私は次のことを試しました(他の多くのことと一緒に):MPMoviePlayerViewControllerをサブクラス化し、そのクラスのshouldAutorotateToInterfaceOrientationメソッドをオーバーライドします。

アプリに横向きを許可してから、タブビューを縦向きにロックしようとします(ロックしないで、不要な横向きに移動できるようにします)。

私はStackOverflowとGoogleを何日も精査してきました!この問題と、ムービープレーヤーを回転させる方法に精通している人はいますか?

4

2 に答える 2

0

最後にこれを解決しました!

わかりましたので、親ビュー コントローラー (私の場合はタブ ビューのコントローラー) で上書きする必要がある重要なメソッドがあります。

-(BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
    return NO;//This must be NO to allow any child views to use their own orientation
}

次に、サブクラス化した MPMoviePlayerViewController で、これを向きに設定します。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;//This allows all orientations, set it to whatever you want
}

次に、タブ ビュー コントローラーから MPMoviePlayerViewController を次のように表示します。

- (IBAction)buttonVideo:(id)sender {
    MovieViewController *vc = [[MovieViewController alloc] initWithContentURL:@"http://www.MY-VIDEO-URL.com"];
    [self presentMoviePlayerViewControllerAnimated:vc];  
}

そしてWA-LA!縦向きにロックされたタブ バー アプリケーション内ですべての向きを許可するムービー プレーヤー!

于 2012-07-09T21:42:10.610 に答える
0

UIViewControllerコンテインメントを実装してみてください。ムービーを表示しているタブの viewController を親 (またはコンテナー) viewController として指定します。

サブクラスで shouldAutorotateToInterfaceOrientation をオーバーライドして、ランドスケープのみを許可する必要がありますが、これはすでに行っているようです。親View ControllerとtabBarControllerで、自動回転メソッドをサブクラスに転送していることを確認する必要があります。これは、shouldAutorotateToInterfaceOrientation のサブクラス実装に NSLog を入れることで確認できます。

次に、ビデオを表示する場合は、MPMoviePlayerViewController のサブクラスを追加します。

ムービー プレーヤーのサブクラスをロードするときは、親ビュー コントローラーでこれを実行してみてください。

[self addChildViewController:self.subclassedMoviePlayerViewController];
[self.view addSubview:self.currentViewController.view];
[self.subclassedMoviePlayerViewController didMoveToParentViewController:self];

または、変更をアニメーション化する場合は、次のようにすることができます。

CGRect viewFrame=self.subclassedMoviePlayerViewController.view.frame;
CGFloat viewHeight=inputViewFrame.size.height;

CGRect newFrame=CGRectMake(0, self.view.frame.size.height, viewFrame.size.width, viewFrame.size.height);

self.subclassedMoviePlayerViewController.view.frame=newFrame;
[self addChildViewController:self.subclassedMoviePlayerViewController];

CGRect offSetRect=CGRectOffset(newFrame, 0, -inputViewHeight);

[self.view addSubview:self.subclassedMoviePlayerViewController.view];
[UIView animateWithDuration:0.2
                 animations:^{
                      self.subclassedMoviePlayerViewController.view.frame=offSetRect;
                 }
                 completion:^(BOOL finished){
                     [self.subclassedMoviePlayerViewController didMoveToParentViewController:self];
                 }];

もちろん、追加する前に、ムービー プレーヤー ビュー コントローラーのサブクラスのビューのフレームを設定する必要があります。

次に、それを削除する場合:

[self.subclassedMoviePlayerViewController willMoveToParentViewController:nil];
[self.subclassedMoviePlayerViewController.view removeFromSuperView];
[self.subclassedMoviePlayerViewController removeFromParentViewController];

幸運を

t

于 2012-07-07T03:50:48.547 に答える