2014-09-28 25 views
8

Tôi đang chuyển một ứng dụng sang iOS 8. Tôi đã có một số mã để phát video đang hoạt động trước nhưng hiện tại thì không.MPMoviePlayerVề vấn đề ràng buộc bố cục bộ điều khiển

Khi tôi chạy nó, tôi nhận được các lỗi sau đây:

(
"<NSLayoutConstraint:0x7faba2df5940 H:|-(34)-[MPKnockoutButton:0x7faba2e6d750](LTR) (Names: '|':_UIBackdropContentView:0x7faba2dc38c0)>", 

"<NSLayoutConstraint:0x7faba2d51780 H:[MPKnockoutButton:0x7faba2e6d750]-(34)-[MPDetailSlider:0x7faba2dc6440](LTR)>", 

"<NSLayoutConstraint:0x7faba2d5b7f0 H:[MPDetailSlider:0x7faba2dc6440]-(34)-[UIView:0x7faba2dc4060](LTR)>", 

"<NSLayoutConstraint:0x7faba2dc5da0 UIView:0x7faba2dc4060.right == _UIBackdropView:0x7faba2dbfdc0.right>", 

"<NSLayoutConstraint:0x7faba2dc58d0 H:|-(0)-[_UIBackdropView:0x7faba2dbfdc0] (Names: '|':MPVideoPlaybackOverlayView:0x7faba2dbf6a0)>", 

"<NSLayoutConstraint:0x7faba2dc5950 H:[_UIBackdropView:0x7faba2dbfdc0]-(0)-| (Names: '|':MPVideoPlaybackOverlayView:0x7faba2dbf6a0)>", 

"<NSLayoutConstraint:0x7faba2df9b10 H:[MPVideoPlaybackOverlayView:0x7faba2dbf6a0(0)]>", 

"<NSAutoresizingMaskLayoutConstraint:0x7faba2dfbfa0 h=-&- v=-&- _UIBackdropContentView:0x7faba2dc38c0.midX == _UIBackdropView:0x7faba2dbfdc0.midX>", 

"<NSAutoresizingMaskLayoutConstraint:0x7faba2dfbff0 h=-&- v=-&- _UIBackdropContentView:0x7faba2dc38c0.width == _UIBackdropView:0x7faba2dbfdc0.width>" 
) 

Dưới đây là các mã:

movieController = [[MPMoviePlayerController alloc] 
       initWithContentURL:[NSURL URLWithString:playlistUrl]]; 

movieController.movieSourceType = MPMovieSourceTypeStreaming; 
[movieController.view setFrame:[self.playerView bounds]]; 

[self.playerView addSubview:movieController.view]; 
[movieController play]; 

Bất kỳ suy nghĩ?

Trả lời

7

Điều này dường như được sửa trong iOS 8.1. Lỗi này biến mất sau khi tôi nâng cấp.

Tuy nhiên, tôi đã phải thay đổi mã của tôi hơi:

movieController = [[MPMoviePlayerController alloc] 
        initWithContentURL:[NSURL URLWithString:playlistUrl]]; 

movieController.movieSourceType = MPMovieSourceTypeStreaming; 

[movieController.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[playerView addSubview:movieController.view]; 

id views = @{ @"player": movieController.view }; 

[playerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[player]|" 
                     options:0 
                     metrics:nil 
                     views:views]]; 

[playerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[player]|" 
                     options:0 
                     metrics:nil 
                     views:views]]; 
[movieController play]; 
+0

Cảm ơn, Simon, điều này đã giúp tôi tiết kiệm rất nhiều thời gian! –

1

Tôi vừa tự mình gặp vấn đề này.

Tôi nhận thấy các cảnh báo ràng buộc sẽ xuất hiện ngay cả khi không có chế độ xem MKMoviePlayerController trên màn hình và trước khi tôi truy cập vào nó.

Điều này dẫn tôi xóa các cuộc gọi của tôi sang thế hệ hình thu nhỏ API requestThumbnailImagesAtTimes:timeOption:cancelAllThumbnailImageRequests.

Sau khi sử dụng phương pháp thay thế truy xuất hình thu nhỏ, cảnh báo dừng ngay lập tức.

Tôi đang tải url cục bộ, không phát trực tuyến - nhưng tôi tưởng tượng cơ chế phát trực tuyến đang cố tải hình thu nhỏ ở đâu đó và gây ra sự cố mà chúng tôi đang gặp phải.

Tôi chưa nhận thấy bất kỳ giải pháp hoặc câu trả lời được ghi lại nào về vấn đề này vì vậy tôi hy vọng bằng chứng giai thoại của tôi sẽ giúp ích.

1

Đối với những người lười biếng.

Khi tôi muốn sử dụng movieController.view.frame trực tiếp tôi chỉ cần gọi

[movieController.view setTranslatesAutoresizingMaskIntoConstraints:YES]; 

trước

[movieController prepareToPlay]; 
[self.view addSubview:movieController.view]; 

để không gây rối với những hạn chế.

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