Lecture de vidéos sur un écran de taille personnalisée - affichage sur iPhone
-
07-07-2019 - |
Question
Supposons que l'utilisateur appuie sur un bouton et que la vidéo commence à jouer. Désormais, lorsque la vidéo est lue, elle reste toujours en mode plein écran.
La vidéo doit être lue en mode portrait (mais normalement, la vidéo est lue en mode paysage). Comment puis-je faire cela?
La solution
@interface MPMoviePlayerController (extend)
-(void)setOrientation:(int)orientation animated:(BOOL)value;
@end
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieUR];
[moviePlayer setOrientation:UIDeviceOrientationPortrait animated:NO];
if (moviePlayer)
{
[self.moviePlayer play];
}
Cette solution sera rejetée par Apple, car setOrientation pour le lecteur de film est l’API privée. Soyez prudent, mais cela peut fonctionner sur les iPhones Jailbroke.
Autres conseils
Juste une mise à jour, le dernier SDK pour iPhone 3.2+ autorisera désormais les programmeurs à afficher la vidéo dans la taille et l'orientation souhaités. Un nouveau MPMoviePlayerView est fourni, qui est une propriété de MPMoviePlayerController. pouvez ajouter une sous-vue à votre vue.
D'après les documents documentés, je ne pense pas que cela soit possible en utilisant le lecteur multimédia intégré
Essayez ceci. J'ai trouvé quelque chose de nouveau.
@interface MPMoviePlayerController (extend)
-(void)setOrientation:(int)orientation animated:(BOOL)value;
@end
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieUR];
[moviePlayer setOrientation:UIDeviceOrientationPortrait animated:NO];
if (moviePlayer)
{
[self.moviePlayer play];
}
Voici ce que j'ai fait. Ajoutez NSNotification pour vous informer de la fin du préchargement de la vidéo.
- (void)playVideoUrl:(NSString *)videoUrl {
NSURL *url = [NSURL URLWithString:videoUrl];
MPMoviePlayerController* theMovie=[[MPMoviePlayerController alloc]
initWithContentURL:url];
[[NSNotificationCenter defaultCenter] addObserver:self
//MPMoviePlayerContentPreloadDidFinishNotification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(myMovieFinishedPreloading:)
name:MPMoviePlayerContentPreloadDidFinishNotification
object:theMovie];
// Movie playback is asynchronous, so this method returns immediately.
[theMovie play];
}
Sélecteur de rappel:
-(void)myMovieFinishedPreloading:(NSNotification*)aNotification {
NSArray *windows = [[UIApplication sharedApplication] windows];
UIWindow *moviePlayerWindow = nil;
if ([windows count] > 1)
{
moviePlayerWindow = [[UIApplication sharedApplication] keyWindow];
}
CGAffineTransform transform = CGAffineTransformMakeScale(0.5, 0.5);
transform = CGAffineTransformRotate(transform, -90.0f*M_PI/180.0f);
[moviePlayerWindow setTransform:transform];
}