2010-04-21 26 views
5

Kể từ 3.2 SDK hệ điều hành iPhone, việc phát video thực sự khác.iPhone - Phát video trên cả OS và SDK 3.0 và 4.0?

Vì vậy, tôi đã tự hỏi nếu có một cách để làm cho video chơi toàn màn hình với một mã tương thích (cả hai < và> 3.2) mà không cần viết mã cho hai trường hợp.

Tôi nghĩ chúng tôi sẽ phải viết 2 phiên bản của các lớp học của chúng tôi xử lý việc phát video ...

Thy!

Trả lời

2

tôi làm cơ bản những gì Jeff Kelly trên gợi ý để chạy trên 3.1 trở lên, lưu ý các cuộc gọi instancesRespondToSelector:

// Initialize a movie player object with the specified URL 
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; 
if (mp) 
{ 

    // Register to receive a notification when the movie has finished playing. 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayBackDidFinish:) 
               name:MPMoviePlayerPlaybackDidFinishNotification 
               object:nil]; 


    //Will only run this code for >= OS 3.2 
    if ([MPMoviePlayerController instancesRespondToSelector:@selector(setFullscreen:animated:)]){ 

     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(moviePlayBackStateDidChange:) 
                name:MPMoviePlayerPlaybackStateDidChangeNotification 
                object:nil]; 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(nowPlayingMovieDidChange:) 
                name:MPMoviePlayerNowPlayingMovieDidChangeNotification 
                object:nil]; 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(moviePlayBackDidFinish:) 
                name:MPMoviePlayerDidExitFullscreenNotification 
                object:nil]; 

     mp.controlStyle = MPMovieControlStyleFullscreen; 


     [mp setScalingMode:MPMovieScalingModeAspectFit]; 

        //change mainMenu here to whatever your parent view is 
     [mp.view setFrame:mainMenu.frame]; 
     [self.view addSubview:mp.view]; 



     [mp setFullscreen:YES animated:NO]; 
    } 
//continue as normal 

và sau đó trong functionPlayBackDidFinish Tôi sử dụng kỹ thuật tương tự để xóa các thông báo.

-1

Bạn có thể phải sử dụng # if/# else/# endif khối và biên dịch Universal Binary có thực thi phù hợp với cấp độ O/S cụ thể.

+2

Sử dụng macro tiền xử lý như vậy sẽ có tác dụng làm bất kỳ SDK hoạt động nào được đặt thành. Khi bạn biên dịch ứng dụng, nếu bạn đang nhắm mục tiêu, cả 3.1.3 và phiên bản sau của SDK iPhone, nó sẽ biên dịch ứng dụng với cài đặt 3.1.3 và cùng một nhị phân sẽ được sử dụng cho cả hai phiên bản hệ điều hành. Nói chung, nội suy thời gian chạy (ví dụ: 'if ([SomeClass respondsToSelector: @selector (someSelector)])') được ưu tiên. –

0

Một khả năng là có phương pháp trợ giúp cho việc này. Bằng cách này bạn sẽ chỉ cần viết một lần và có khả năng này ở khắp mọi nơi.

Để tự viết phương thức trợ giúp, bạn sẽ muốn kiểm tra xem MPMoviePlayerViewController có khả dụng không. Nếu có, hãy sử dụng và sau đó trình bày toàn màn hình đó. Nếu không, chỉ cần sử dụng MPMoviePlayerController thông thường.

Vì vậy, khuôn khổ cơ bản sẽ là:

-(void)playMovie:(NSURL *)movieURL 
{ 
    Class mpVC = NCClassFromString("MPMoviePlayerViewController"); 
    if(mpVC) 
    { 
     // Generate MPPlayerViewController here and use accordingly 
    } 
    else 
    { 
     // Generate MPPlayerController here and use accordingly 
    } 
} 
Các vấn đề liên quan