2010-04-27 30 views
15

Tôi đang gặp sự cố với UIWebView và MPMoviePlayerController: UIWebView của tôi có phim bên trong html (đó là tệp html cục bộ), tôi đang sử dụng html5 và thẻ video cho video . Vấn đề là: người dùng có thể đặt video để phát nội tuyến, trực tiếp trên html hoặc anh ấy có thể nhấn vào nút toàn màn hình, nhưng tôi cần biết video có đang phát toàn màn hình hay không.MPMoviePlayerController phim toàn màn hình bên trong UIWebView

Tôi đã cố sử dụng MPMoviePlayerDidEnterFullscreenNotification nhưng không thành công.

Có ai biết cách nhận thông báo này từ chế độ xem web không?

Cảm ơn trước

+0

Xem câu trả lời của tôi trên http://stackoverflow.com/questions/8518719/how-to-receive-nsnotifications-from-uiwebview-embedded-youtube-video-playback/8554040#8554040 để thực sự tìm cách để thực hiện việc này . – Till

+0

Đây là giải pháp tốt nhất mà tôi tìm thấy và tôi đã làm việc cho tôi http://stackoverflow.com/a/9088751/1002338 – Mona

Trả lời

2

Nếu bạn đang nhúng phim của bạn trong một lần xem web bằng HTML, sau đó bạn sẽ cần phải giải quyết bộ phim của bạn sử dụng Javascript chứ không phải là lớp MPMoviePlayer.

Hãy xem hướng dẫn tạo kịch bản của Apple dành cho Quicktime here.

Tôi cho rằng thuộc tính bạn yêu cầu là GetRectangle() trả về một chuỗi vị trí và kích thước của bộ phim trong khu vực nhúng.

Khi bạn có kích thước, bạn có thể chuyển nó trở lại mục tiêu-C từ Javascript.

+0

Điều này hữu ích khi nói kích thước của hình chữ nhật là tại một thời điểm nhất định; tuy nhiên, câu hỏi sẽ hỏi cách nhận thông báo rằng trình phát phim đã nhập toàn màn hình (hoặc kích thước đã thay đổi). –

15

Không có thông báo nào được gửi (cũng xem bài đăng này: Event on view displayed change (Youtube MPMoviePlayerViewController)), nhưng chế độ xem web sẽ làm điều gì đó bị tấn công: nó sẽ thêm phần phụ vào chế độ xem gốc UIViewController's, làm cho màn hình đầy đủ và phát phim ở đó.

Làm cho chính UIViewController's của bạn xem chế độ xem của riêng bạn và chặn -didAddSubview:-willRemoveSubview:. Bằng cách này, bạn sẽ có thể phát hiện khi người chơi được mang chế độ toàn màn hình.

+0

Đó là ít nhận xét về việc thêm một subview vào khung nhìn gốc của UIViewController là vô giá. Không có nó, tôi không biết tại sao phương thức xuất hiện của RootViewController lại được gọi, bất cứ khi nào tôi để lại một trình xem phim toàn màn hình đang được lưu trữ trong một VC hoàn toàn khác. – Julian

4

Bạn cũng có thể tag giao diện chính của bạn và mở rộng UIView (hoặc thực hiện các phương thức dưới đây trong trường hợp bạn sở hữu giao diện chính):

@implementation UIView (UIViewExtended) 
- (void)didAddSubview:(UIView *)subview { 
    if (subview.superview.tag == ...) { 
... set some flag here or do some action 
    } 
} 

- (void)willRemoveSubview:(UIView *)subview { 
    if (subview.superview.tag == ...) { 
... set some flag here or do some action 
    } 
} 
@end 
+0

Làm việc như một sự quyến rũ! –

+0

Dường như điều này đã phá vỡ trong iOS 6. Bất kỳ ý tưởng nào khác? –

0

Từ Apple's documentation:

Full-Screen tổ chức sự kiện và Thuộc tính

Safari phát ra sự kiện thay đổi màn hình trên webkit khi một phần tử đi vào hoặc thoát khỏi chế độ toàn màn hình. Lắng nghe sự kiện này để phát hiện các thay đổi.

Bạn có thể kiểm tra thuộc tính document.webkitIsFullScreen để xem liệu Safari gần đây đã nhập hoặc thoát chế độ toàn màn hình hay chưa. Thuộc tính là đúng khi ở chế độ toàn màn hình.

Thuộc tính document.webkitCurrentFullScreenElement chứa phần tử ở chế độ toàn màn hình. Sử dụng thuộc tính này nếu bạn có nhiều phần tử có thể ở chế độ toàn màn hình.

Rất tiếc, những thứ này dường như không hoạt động trên iOS. Apple cần phải thay đổi điều này.

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