2010-11-23 30 views
7

Tôi có UIWebview trong UIScrollView. Trong chế độ xem web, tôi có một bộ phim YouTube được nhúng. Khi tôi phát phim YouTube, mọi thứ hoạt động tốt, tuy nhiên, khi tôi nhấn nút toàn màn hình, phim sẽ bắt đầu phát phía sau chế độ xem web. Đưa WebView vào mặt trước không hoạt động, bởi vì tôi muốn các khả năng cuộn của ScrollView để cuộn ngang.SDK iPad: Phim được nhúng trên YouTube phát phiên bản toàn màn hình sau UIWebView

+0

Tại sao bạn có chế độ xem web bên trong một chế độ xem cuộn? UIWebView thực hiện hành vi cuộn của riêng nó.Thêm vào đó, tùy thuộc vào cách bạn kết nối các đại biểu, bạn có thể nhận được hành vi kỳ quặc wrt các 'UIScrollViewDelegate' mà cả UIWebView và UIScrollView thực hiện. Vì vậy, nếu bạn nói cả scrollview và webview rằng thuộc tính delegate của nó sẽ trỏ vào chính bạn (controller của bạn), sau đó mỗi lần cuộn webview, nó sẽ kích hoạt các phương thức như 'scrollViewDidScroll:' sẽ là phương thức được kích hoạt khi cuộn cuộn của bạn không phải là chế độ xem web. Có vẻ khó chịu với tôi. – jer

+0

Điều tôi muốn đạt được là tôi có thể cuộn ngang các trang web khác nhau (nơi mọi trang web đều là trang tạp chí). Hành vi cuộn của các chế độ xem web bị tắt. Vì vậy, có một cách để làm điều này tốt hơn hoặc bạn có thể cho tôi biết làm thế nào tôi có thể nhận được bộ phim YouTube để tiền cảnh? – user517153

Trả lời

12

Về cơ bản, bạn muốn có thể phát hiện khi phim bắt đầu phát toàn màn hình và sắp xếp các chế độ xem của bạn một cách thích hợp. Sau đó, khi quá trình phát lại toàn màn hình kết thúc, bạn muốn có thể xem lại các chế độ xem của mình.

Sự cố là không có cách nào được ghi tài liệu để móc vào hoặc phát hiện khi một UIWebView kích hoạt phát lại video ở chế độ toàn màn hình.

Tôi đã nói 'cách được tài liệu', bởi vì có một số thông báo bạn có thể sử dụng để phát hiện khi một UIWebView kích hoạt phát lại toàn màn hình. Bạn chỉ có thể nghe cho họ và sắp xếp lại các quan điểm của bạn cho phù hợp. Tuy nhiên, tôi không nhất thiết khuyên bạn nên điều này, bởi vì họ không có giấy tờ và có thể thay đổi (trên thực tế, họ có lỗi chính tả trong đó cho đến iOS 4.3, xem câu trả lời bên dưới).

// For iOS 4.3 and above: 
UIMoviePlayerControllerDidEnterFullscreenNotification 
UIMoviePlayerControllerDidExitFullscreenNotification 

// For iOS 4.2 and below: 
UIMoviePlayerControllerDidEnterFullcreenNotification 
UIMoviePlayerControllerDidExitFullcreenNotification // (note spelling mistake) 

Tìm những lỗi này là một chút đau - thực tế có thêm một số thông báo được kích hoạt khi video YouTube trong UIWebView được phát lại. Để tìm ra chúng, bạn cần phải xóa một điểm ngắt trên tất cả các thông báo đăng bài, và sau đó kiểm tra thủ công các vị trí bộ nhớ của các thông báo đó để tìm ra các tên chuỗi của chúng. Tôi không thực sự nghĩ rằng bất cứ ai đã kéo chúng ra trước, bởi vì khi tôi google chúng tôi không nhận được gì. Nhưng họ làm việc, hứa!

Tôi hy vọng có thể được thông báo khi phát lại toàn màn hình được nhập/thoát sẽ hữu ích, với cảnh báo lớn rằng Apple có thể thay đổi hành vi không có giấy tờ này bất kỳ lúc nào. Ứng dụng của bạn sẽ không bị từ chối hoàn toàn khi sử dụng chúng (vì bạn không gọi bất kỳ phương thức không có giấy tờ nào) và tôi đã sử dụng nó trong các ứng dụng giao hàng. Nhưng nó vẫn không phải là ý tưởng tốt nhất trên thế giới ... có thể là lựa chọn duy nhất bạn có.

Chỉnh sửa: Để làm rõ, dựa vào nhận xét bên dưới: chúng không phải là hằng số, vì vậy bạn cần phải đặt chúng trong dấu ngoặc kép nếu bạn đã được đăng ký nhận thông báo.

+0

Tôi phải làm gì để #import giúp họ làm việc? Tôi đang sử dụng Xcode 4 và tôi nhận được lỗi xây dựng (Sử dụng số nhận dạng không khai báo) – ageektrapped

+2

Bạn cần đặt chúng trong dấu ngoặc kép, chúng không phải là hằng số, như sau: 'addObserver: self selector: @selector (someSelector) name: @ "UIMoviePlayerControllerDidEnterFullcreenNotification" đối tượng: nil] '- hy vọng rằng sẽ giúp! – lxt

+1

Bernado đã nắm bắt tốt - trong 4.3 tên thông báo đã thay đổi và hiện được viết đúng chính tả. – lxt

2

Chỉ muốn xác nhận rằng thao tác này sẽ hoạt động sau khi phát xung quanh nó một lúc. Bạn có thể truy cập trực tiếp vào chế độ xem mà video đang phát. Đây là phương thức chặn đăng ký thông báo và kéo ra các chế độ xem thích hợp.

Lưu ý: Bạn sẽ cần trì hoãn việc thêm các bản xem trước và/hoặc truy cập vào các bản xem trước nội bộ của Apple để xóa thanh điều hướng để tùy chỉnh thêm.

[[NSNotificationCenter defaultCenter] 
    addObserverForName:@"UIMoviePlayerControllerDidEnterFullcreenNotification" 
    object:nil 
    queue:nil 
    usingBlock:^(NSNotification *note){ 
      MPMoviePlayerController *theMovieController = [note object]; 
      UIView *theDestinationVideoView = [[note userInfo] 
      objectForKey:@"UIMoviePlayerControllerFullscreenViewUserInfoKey"]; 
}]; 
+0

Tôi không có bất kỳ thành công nào để làm việc này, khối không bao giờ được kích hoạt, điều này vẫn còn hợp lệ trong 4.0? – box86rowh

+0

OK, có vẻ như họ đã sửa lỗi chính tả của mình, hiện tại là: UIMoviePlayerControllerDidEnterFullscreenNotification – box86rowh

+0

Tôi có thể tạm dừng video theo chương trình trong khi phát video toàn màn hình trong uiwebview không? – g212gs

6

Đối với iOS 4.3+, Apple đã thay đổi tên của các thông báo này: UIMoviePlayerControllerDidEnterFullcreenNotification tại là UIMoviePlayerControllerDidEnterFullscreenNotification

UIMoviePlayerControllerDidExitFullcreenNotification tại là UIMoviePlayerControllerDidExitFullscreenNotification

Hãy chú ý: Thuật ngữ "Fullscreen" đã thay đổi để "Toàn màn hình".

Cảm ơn!

+0

Được phát hiện độc đáo - Tôi đã cập nhật câu trả lời của mình để tham chiếu chỉnh sửa của bạn. – lxt

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