1

長い一日を過ごした後、1024x768のビデオがiPad 3で機能しない理由を調査し、多くのフォーラムを探しました。この問題に対する合理的な解決策は見つかりませんでした。黒い画面しか表示されないのと同じ状況にある人は多いようです。

解決策は、必要なビデオを1024x748としてレンダリングすることでした。iPadの上部に表示されるステータスバーである理由は20pxです。

これにより、この状況で発生している多くのユーザーの問題が解決されることを願っています。

次の質問に…。

現在、MPMoviePlayerControllerを介してビューにビデオが埋め込まれています。このビデオは一定のループ(アニメーションメニュー)にあります。次に、メソッドが呼び出されるビデオの上に3つの非表示のボタンを重ねます。現在作業しているのは1つだけで、他の2つはアラートを表示するだけです。

私が現在抱えている問題は、ボタンがクリックされたときに別のビデオを再生したいということです。これは完全に機能していますが、最初のビデオを最初に再生して最後に次のビデオを再生したいのですが、理由は、シームレスすぎて、あるビデオから別のビデオに移動することがはっきりしないためです。

これに関するフィードバックは素晴らしいでしょう....

#import "MainViewController.h"
#import "VideoPlayerViewController.h"
#import <MediaPlayer/MediaPlayer.h>
#import <UIKit/UIKit.h>

@interface MainViewController () 

@property (nonatomic, retain) MPMoviePlayerController *playerViewController;
@property (nonatomic, retain) VideoPlayerViewController *myPlayerViewController;

@end


@implementation MainViewController

@synthesize playerViewController = _playerViewController;
@synthesize myPlayerViewController = _myPlayerViewController;

- (void)dealloc {
    self.playerViewController = nil;
    self.myPlayerViewController = nil;

    [super dealloc];
}


#pragma mark - View lifecycle

-(void)buttonEventOne:(id)sender {

    //[[[[UIAlertView alloc] initWithTitle:@"CONTENT ONE" message:@"This will link to content one video" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease] show];


    NSURL *urlTwo = [[NSBundle mainBundle] URLForResource:@"BAE_BG_anim_pt2_748" withExtension:@"mov"];
    MPMoviePlayerController *playerViewController = [[MPMoviePlayerController alloc] init];

    playerViewController.contentURL = urlTwo;
    playerViewController.view.frame = CGRectMake(0, 0, 1024, 768);
    playerViewController.controlStyle = MPMovieControlStyleNone;
    //playerViewController.repeatMode = MPMovieRepeatModeOne;

    [self.view addSubview:playerViewController.view];
    [playerViewController play];

    self.playerViewController = playerViewController;
    [playerViewController release];


}

-(void)buttonEventTwo:(id)sender {

    [[[[UIAlertView alloc] initWithTitle:@"CONTENT TWO" message:@"This will link to content one video" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease] show];
}

-(void)buttonEventThree:(id)sender {

    [[[[UIAlertView alloc] initWithTitle:@"CONTENT THREE" message:@"This will link to content one video" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease] show];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    NSURL *url = [[NSBundle mainBundle] URLForResource:@"BAE_Main_Loop_748" withExtension:@"mov"];

    // video player
    MPMoviePlayerController *playerViewController = [[MPMoviePlayerController alloc] init];
    playerViewController.contentURL = url;
    [playerViewController prepareToPlay];
    playerViewController.view.frame = CGRectMake(0, 0, 1024, 768);
    playerViewController.controlStyle = MPMovieControlStyleNone;
    playerViewController.repeatMode = MPMovieRepeatModeOne;

    [self.view addSubview:playerViewController.view];
    [playerViewController play];

    self.playerViewController = playerViewController;
    [playerViewController release];

    UIButton * btnOne = [UIButton buttonWithType:UIButtonTypeCustom];
    btnOne.frame = CGRectMake(260, 350, 150, 50);
    [btnOne setTitle:@"" forState:UIControlStateNormal];
    [btnOne addTarget:self action:@selector(buttonEventOne:)forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnOne];

    UIButton * btnTwo = [UIButton buttonWithType:UIButtonTypeCustom];
    btnTwo.frame = CGRectMake(620, 350, 150, 50);
    [btnTwo setTitle:@"" forState:UIControlStateNormal];
    [btnTwo addTarget:self action:@selector(buttonEventTwo:)forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnTwo];

    UIButton * btnThree = [UIButton buttonWithType:UIButtonTypeCustom];
    btnThree.frame = CGRectMake(450, 250, 150, 50);
    [btnThree setTitle:@"" forState:UIControlStateNormal];
    [btnThree addTarget:self action:@selector(buttonEventThree:)forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnThree];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
            interfaceOrientation == UIInterfaceOrientationLandscapeRight);
} 
@end
4

1 に答える 1

0

再生通知、特にMPMoviePlayerPlaybackDidFinishNotificationキャッチーなハァッに登録してみましたか?ボタンが押されたときに通知に登録する場合:

[[NSNotificationCenter defaultCenter] 
  addObserver:self 
  selector:@selector(introMovieFinished:) 
  name:MPMoviePlayerPlaybackDidFinishNotification 
  object:self.playerViewController];

次に、その関数で:

- (void)introMovieFinished:(NSNotification*)note {
  [[NSNotificationCenter defaultCenter] 
    removeObserver:self 
    name:MPMoviePlayerPlaybackDidFinishNotification
    object:self.playerViewController];
  // Do stuff.
}

通知への関心の登録を解除してから、次の映画の再生を開始します。ボタンが押されたときにのみインタレストを登録するため、ムービーが終了するまで関数呼び出しを受信しないでください。

于 2012-04-23T14:51:58.900 に答える