2009-08-31 31 views
5

tôi đã đi qua ví dụ từ quả táo "MoviePlayer trên iPhone"Overlay trên đầu trang của Truyền MPMoviePlayerController

Im cố gắng để che phủ trên đầu trang của mpmovieplayercontroller,

nó hoạt động hoàn hảo với video clip đó là trong bó,

nhưng nó sẽ không hoạt động nếu tôi phát video từ url.

chế độ xem lớp phủ sẽ chỉ ẩn sau trình phát.

có cách nào để hiển thị chế độ xem lớp phủ lên trước không?

Trả lời

11

MPMoviePlayerController tạo cửa sổ riêng và đặt làm cửa sổ khóa - có thể bạn đã biết điều này từ ứng dụng mẫu MoviePlayer.

Tôi không biết tại sao, nhưng có sự chậm trễ khi người chơi sử dụng luồng - vì vậy keyWindow bạn nhận được ngay sau khi bạn khởi chạy trình phát có thể không phải là cửa sổ của người chơi, vì điều đó dường như được thêm sau.

Bạn có thể "ăn gian" và sử dụng một bộ đếm thời gian để có được cửa sổ máy nghe nhạc một vài giây sau, và thêm lớp phủ của bạn:

[NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(addMyOverlay:) userInfo:nil repeats:FALSE] 

Hoặc bạn có thể nghe cho sự kiện UIWindowDidBecomeKeyNotification, và làm tương tự:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyWindowChanged:) name:UIWindowDidBecomeKeyNotification object:nil]; 

Không có lựa chọn nào tuyệt vời (tôi rất muốn biết cách làm sạch hơn), nhưng công việc đã hoàn thành.

+0

Bạn là người đàn ông! bạn đã giải quyết được vấn đề của tôi! Cảm ơn rất nhiều – vicky

+3

thực sự tôi đã sử dụng UIWindowDidBecomeKeyNotification chứ không phải là bộ hẹn giờ, nó hoạt động hoàn hảo. không cần hẹn giờ. – vicky

+0

Ok Tôi đồng ý. Rằng cửa sổ của bạn - giải pháp là hoàn hảo. –

1

Câu trả lời trước được dựa trên bộ hẹn giờ. & cố định 5 giây.

Khi Trình phát phim bắt đầu, một cửa sổ mới sẽ được thêm vào ứng dụng.

Sử dụng bộ hẹn giờ để kiểm tra thời tiết cửa sổ mới được thêm vào ứng dụng của bạn hay không.

Khi cửa sổ (cửa sổ trình phát phim) được thêm vào. đặt thông báo.

-(void)viewDidLoad{ 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePreloadDidFinish:) 
               name:MPMoviePlayerContentPreloadDidFinishNotification 
               object:nil]; 

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

    // Register to receive a notification when the movie scaling mode has changed. 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(movieScalingModeDidChange:) 
               name:MPMoviePlayerScalingModeDidChangeNotification 
               object:nil]; 
    videoListController.xmlClassVideoList=t; 
    // here ttttt is a timer declared in .h file 
    tttttt=[NSTimer scheduledTimerWithTimeInterval:0.5 target:self  selector:@selector(startMy) userInfo:nil repeats:YES]; 
} 

-(void)startMy{ 
    NSArray *windows = [[UIApplication sharedApplication] windows]; 
    NSLog(@"%i",[windows count]); 
    // depends on your application window 
    // it may be 1/2/3 
    if ([windows count] > 3) { 
     // Locate the movie player window 
     [tttttt invalidate]; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyWindowChanged:) name:UIWindowDidBecomeKeyNotification object:nil]; 
    } 
} 
+2

Tôi đồng ý rằng việc kiểm tra mọi 0.5s có ​​ý nghĩa hơn so với chờ 5s, nhưng tại sao không chỉ lắng nghe UIWindowDidBecomeKeyNotification ngay từ đầu và quên hẹn giờ? –

3

Bạn có thể che phủ chế độ xem khi nhận được thông báo "MPMoviePlayerContentPreloadDidFinishNotification".

Đăng ký nhận thông báo:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(moviePreloadDidFinish:) 
              name:MPMoviePlayerContentPreloadDidFinishNotification 
              object:nil]; 

Thêm xem lớp phủ khi nhận được thông báo:

// Notification called when the movie finished preloading. 
- (void) moviePreloadDidFinish:(NSNotification*)notification 
{ 
    NSArray *windows = [[UIApplication sharedApplication] windows]; 
    if ([windows count] > 1) 
    { 
     // Locate the movie player window 
     UIWindow *moviePlayerWindow = [[UIApplication sharedApplication] keyWindow]; 
     if ([moviePlayerWindow viewWithTag:0x3939] == nil) { 
      self.videoOverlayView.tag = 0x3939; 
      [moviePlayerWindow addSubview:self.videoOverlayView]; 
     } 
     [moviePlayerWindow bringSubviewToFront:self.videoOverlayView]; 
    } 
} 
2

Một giải pháp rất đơn giản:

appDelegate.window.backgroundColor = [UIColor clearColor]; 
appDelegate.window.windowLevel = 2; 

Điều này sẽ giữ giao diện người dùng ứng dụng của bạn trên đầu cửa sổ video.

my post

Các vấn đề liên quan