Tôi đang phát triển trình phát video với API AVPlayer từ AV Foundation trong MonoTouch (nhưng giải pháp trong mục tiêu-c cũng có thể tốt đẹp). Tôi đang cố gắng triển khai chế độ toàn màn hình.Toàn màn hình: AVPlayerLayer không được thay đổi kích thước khi thay đổi kích thước chế độ xem gốc
Để hiển thị các khung hình video, tôi có một UIView (chúng ta hãy gọi nó xem phát lại), nơi tôi đã thêm các AVPlayerLayer như subview của lớp xem phát lại:
UIView *playbackView = ...
AVPlayerLayer *playerLayer = ...
[playbackView.layer addSublayer:playerLayer];
các thuộc tính lớp được thiết lập như thế:
playerLayer.needsDisplayOnBoundsChange = YES;
playbackView.layer.needsDisplayOnBoundsChange = YES;
để đảm bảo rằng chúng được thay đổi kích thước nếu kích thước chế độ xem phát lại bị thay đổi. Ban đầu, chế độ xem phát lại có tọa độ (0, 0, 320, 180) (chỉ hiển thị ở đầu giao diện người dùng). Sau đó, tôi đang thực hiện hoạt ảnh toàn màn hình bằng cách đặt kích thước khung xem phát lại dưới dạng kích thước cửa sổ:
playbackView.frame = playbackView.window.bounds;
Nó hoạt động tốt. Chế độ xem phát lại hiện đang lấp đầy tất cả cửa sổ (đặt màu nền để xem). Nhưng AVPlayerLayer của tôi vẫn đang ở trên đầu của chế độ xem như trước đây ở chế độ không toàn màn hình.
Tại sao lớp AVPlayer không bị thay đổi kích thước theo chế độ xem phát lại kích thước mới? Tôi có cần tạo hoạt ảnh trên AVPlayerLayer không? Làm mới với setNeedsLayout, layoutSubviews (nó dường như không thay đổi gì đó ...)? Hủy bỏ AVPlayerLayer và thêm nó một lần nữa?
Một giải pháp là thay đổi kích thước cũng là khung lớp theo khung xem phát lại trong khi hoạt ảnh (playerLayer.frame = playbackView.frame). Nhưng nếu chúng ta làm điều đó, lớp không phải là hoạt hình nhưng được hiển thị trực tiếp với kích thước cuối cùng. Làm thế nào chúng ta có thể sinh động cũng thay đổi này? Sử dụng Core Animation thay vì hoạt ảnh UIView? – nicolas