8

[cập nhật]iPhone không thể xoay phim sang chế độ phong cảnh sử dụng MPMoviePlayerViewController

Như đã đề nghị tôi đã thay đổi tất cả các bộ điều khiển xem cha mẹ để hỗ trợ tất cả định hướng. Cấu trúc ứng dụng của tôi như sau: AppDelegate> RootViewController> Video> VideoDetails> MPMoviePlayerViewController.

Video sẽ phát ở chế độ ngang nếu tôi thay đổi tất cả những thứ này để hỗ trợ tất cả các hướng. Nhưng hỗ trợ tất cả các định hướng không phải là những gì tôi muốn và gây ra các vấn đề khác. Có công việc nào khác xung quanh hay bất cứ thứ gì khác tôi có thể làm không?

Cảm ơn

[/ cập nhật]

Tôi có một chân dung dựa ứng dụng iPhone có hiển thị video sử dụng một lớp con tùy chỉnh của MPMoviePlayerViewController. Khi người dùng nhấn play để tạo một thể hiện của lớp này và trình bày nó modally như sau:

- (IBAction) playPressed:(id)sender { 

NSString *filepath = [[NSBundle mainBundle] pathForResource:self.currentVideoModel.videoFileName ofType:@"m4v"]; 
NSURL *fileURL = [NSURL fileURLWithPath:filepath]; 

// MovieViewController is just a simple subclass of MPMoviePlayerViewController 
self.moviePlayerController = [[MovieViewController alloc] initWithContentURL:fileURL]; 

// full screen code. 
[self.moviePlayerController.moviePlayer setScalingMode:MPMovieScalingModeFill]; 
[self.moviePlayerController.moviePlayer setFullscreen:TRUE]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayerController]; 

[self presentMoviePlayerViewControllerAnimated:self.moviePlayerController]; 
} 

Vấn đề là nó đóng tiền phạt trong bức chân dung nhưng khi tôi xoay iPhone để cảnh video vẫn đóng trong bức chân dung và không cảnh :(Tất cả các bộ điều khiển xem trong ứng dụng chỉ hỗ trợ hướng dọc

My MPMoviePlayerViewController lớp con chỉ ghi đè các phương pháp sau đây để cho phép thay đổi hướng nhưng nó đã không ảnh hưởng đến:.

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
return (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

tôi đã thậm chí đã cố gắng xoay video theo chương trình nhưng hoàn toàn không có may mắn, video luôn ở chế độ dọc.

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 

if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
    [self.view setTransform:CGAffineTransformMakeRotation(M_PI/2)]; 
    return true; 
} 
else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) { 
    [self.view setTransform:CGAffineTransformMakeRotation(M_PI * 2)]; 
    return true; 
} 
else if (toInterfaceOrientation == UIInterfaceOrientationPortrait) { 
    [self.view setTransform:CGAffineTransformIdentity]; 
    return true; 
} 
else return false; 

}

+0

Hỗ trợ xoay vòng * là loại * heirarchical. Vì vậy, nếu bạn đang trình bày một bộ điều khiển trình phát phim và nó không cho phép bạn xoay, bước gỡ lỗi đầu tiên của tôi sẽ là kiểm tra bộ điều khiển xem MỌI dẫn đến trình phát phim của bạn cho phương thức 'shouldAutorotate..' và làm cho nó chỉ trả về CÓ; '(bạn có thể làm điều này tăng dần nếu bạn muốn tiết kiệm thêm rắc rối sau này).Sau đó, chuyển đổi chúng một lần trở lại chân dung cho đến khi nó khóa chân dung, và bạn biết cái nào mà UIKit' đang kiểm tra khi cố xoay vòng của bạn. Đi từ đó. – darvids0n

+0

@ darvids0n cảm ơn. Tôi không thực sự muốn để bất kỳ hỗ trợ xem nào khác ngoài bức chân dung nhưng tôi đoán tôi sẽ thử và xem điều gì sẽ xảy ra. – bennythemink

+0

@ darvids0n Tôi đã cập nhật câu hỏi của mình. có bất cứ điều gì bạn có thể đề nghị? Cảm ơn rât nhiêu vi lơi khuyên. – bennythemink

Trả lời

10

[EDIT] Các giải pháp dưới đây làm việc một cách hoàn hảo trên iOS5 nhưng không còn hoạt động trên iOS6. Tôi có thể mất một chút thời gian để xem xét vấn đề này trong tương lai hy vọng: ([/ EDIT]

OK Tôi đã khắc phục sự cố. Đó là tất cả những gì tôi hiểu về cách iOS thông báo cho ứng dụng thay đổi định hướng. nghĩ rằng nó phát sóng ra bất kỳ thay đổi định hướng nhưng nó không, nó theo hệ thống phân cấp xem của bạn và nó là vào bạn để nói với bất kỳ bộ điều khiển xem trẻ em của một sự thay đổi định hướng.Đây là hoàn tác của tôi. thiết lập:

cửa sổ> RootViewController> điều khiển thanh tab> nav controller> xem bộ điều khiển> MPMoviePlayerViewController

Tôi đã phân lớp bộ điều khiển thanh tab để chỉ trả về true cho chế độ dọc. Tôi đã trả về điều này từ phương thức kiểm soát gốc xem shouldAutoRotateToOrientation. Điều này đảm bảo rằng tất cả các chế độ xem sẽ chỉ ở chế độ dọc.

Sau đó, tôi đã trình bày bộ phim bằng phương thức presentMoviePlayerViewControllerAnimated được gọi từ RootViewController. Điều này tự động được gọi là phương thức shouldAutoRotateToOrientation tùy chỉnh của MPMoviePlayerViewController đã được đặt thành CÓ cho cả cảnh quan và chân dung :)

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