8
kullanarak yatay moda filmi dönemez

[güncelleme]iPhone MPMoviePlayerViewController

olarak ben tüm yönlerde desteklemeye tüm üst görünümü denetleyicileri değişti önerildi. Uygulama yapmam şu şekildedir: AppDelegate> RootViewController> Videolar> VideoDetails> MPMoviePlayerViewController.

Tüm yönelimleri desteklemek için bunları değiştirirsem, video manzara modunda oynatılır. Ancak tüm yönelimleri desteklemek istediğim şey değil ve başka sorunlara da neden oluyor. Yapabileceğim başka işler var mı?

Teşekkür

[/ güncelleme]

Ben MPMoviePlayerViewController özel bir alt sınıfını kullanarak videoları görüntüleyen bir portre tabanlı iPhone app var. kullanıcı presler Ben bu sınıfın bir örneğini oluşturmak oynamak ve modally sunmak aşağıdaki gibi:

- (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]; 
} 

sorun portre ince oynadığını ama manzara iPhone açtığınızda video halen portre oynadığı ve değil manzara :(uygulamasındaki tüm görünüm denetleyicileri yalnızca dikey yönünü desteklemek

Benim MPMoviePlayerViewController alt sınıf sadece yönü değişikliklerine ilişkin izin için aşağıdaki yöntemi geçersiz kılar ama hiç bir etkisi yoktur.

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

hatta ettikVideoyu programlı olarak döndürmeye çalıştı ama kesinlikle şanssız, her zaman portre modunda kalır.

- (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

Döndürme desteği * sıralama * heirarchical. Bu yüzden bir film oynatıcı denetleyicisi sunuyorsanız ve döndürmenize izin vermiyorsa, ilk hata ayıklama adımı, film oynatıcınıza 'shouldOutorotate..' yöntemiyle giden HER görünüm denetleyicisini kontrol etmek ve yalnızca 'YES; '(Daha sonra daha fazla güçlük kaydetmek istiyorsanız bunu aşamalı olarak yapabilirsiniz).Daha sonra, portre için kilitlenene kadar bunları birer birer tekrar port haline getirin ve hangi UIKit'lerin sizinkileri döndürmeye çalıştığını kontrol edersiniz. Oradan git. – darvids0n

+0

@ darvids0n teşekkürler. Gerçekten başka herhangi bir görüşün portre dışında bir şeyi desteklemesine izin vermek istemiyorum ama sanırım bir deneme yapacağım ve ne olduğunu göreceğim. – bennythemink

+0

@ darvids0n Sorumu güncelledim. önerebileceğin bir şey var mı? Herhangi bir tavsiye için çok teşekkürler. – bennythemink

cevap

10

[DÜZENLE] Aşağıdaki çözüm iOS5 üzerinde mükemmel çalıştı ama artık iOS6 üzerinde çalışır. Gelecekte bu konuyla ilgilenmek için biraz zaman bulabilirim :([/ EDIT]

Tamam, düzeltildi. IOS'un bir yönlendirme değişikliği uygulamasına nasıl bildirdiğine dair yanlış anlaşılmamla ilgisi vardı. herhangi bir yönelim değişikliğini yayınladığını düşündü, ama öyle değil, bu sizin görüş hiyerarşinizi izliyor ve herhangi bir çocuk yönelim denetleyicisinin bir yönelimin değiştiğini anlatmak size kalmış ... Bu benim geri kalanlarımdı

Uygulamam aşağıdakilerden oluşuyordu: kurmak:

pencere> RootViewController> tabbar kontrolör> nav denetleyicisi> görünüm denetleyici> MPMoviePlayerViewController

Sekme denetleyicisini, yalnızca portre modu için doğru olarak döndürmek üzere alt sınıflara ayırdım. Bunu root view denetleyicileri shouldAutoRotateToOrientation yönteminden döndürdüm. Bu, tüm görüşlerin sadece portre olacak olmasını sağlamıştır.

Daha sonra, RootViewController adında çağrılan presentMoviePlayerViewControllerAnimated yöntemini kullanarak modaya filmini sundum. Bu, otomatik olarak, hem yatay hem de dikey olarak YES olarak ayarlanmış olan özel MPMoviePlayerViewController'ın shouldAutoRotateToOrientation yöntemini çağırdı.