Czy istnieje sposób na wyłączenie pełnoekranowego przycisku MPMoviePlayerController?iPad MPMoviePlayerController - Wyłącz pełny ekran
Odpowiedz
Nie, nie ma mowy. Mam nadzieję, że przy następnej aktualizacji.
Można ukryć elementy sterujące odtwarzaniem i dodawać własne niestandardowe te, to zapobiec przyciski domyślne są renderowane w ogóle
Ie z
[player setMovieControlMode:MPMovieControlModeNone];
W zależności od potrzeb, można też po prostu wyłączyć wszystkie interakcje użytkownika w widoku odtwarzacza.
player.view.userInteractionEnabled = NO;
Wired to robi. Filmy, które rozpoczynają się w trybie pełnoekranowym, mają standardowe kontrolki MPMoviePlayerController, ale brakuje im przycisków pełnoekranowych. I używają standardowych wbudowanych, ponieważ nagle dostali przycisk AirPlay z 4.2.
Jest oszustem:
MPMoviePlayerController *mpc = (...some instance...)
UIView *fsbutton = [[mpc view] viewWithTag:512];
[fsbutton setHidden:YES];
Głównym połów jest, trzeba to zrobić w viewDidAppear:
lub podobny, ponieważ widok movieplayer ustawia się gdzieś wewnątrz didMoveToWindow
lub didMoveToSuperview
, który nastąpi po viewWillAppear:
. Otrzymujesz krótki błysk przycisku pełnoekranowego. Inne oczywiste połowy to: kruche kontra Apple zmieniające tę wartość 512 (chociaż działa w wersjach 3.2 - 4.2); i oczywiście Apple wolałby, żebyś tego nie robił.
Zatwierdzonym rozwiązaniem jest ustawienie stylu sterowania na MPMovieControlStyleNone
i przetasowanie własnych elementów sterujących transportem, co oznacza więcej pracy.
Innym problemem jest to, że gest uszczypnięcia i powiększenia, który przenosi użytkownika na pełny ekran, omija ten pomysł. – Roger
i spróbuj usunąć gesty. – SAKrisT
Apple prawdopodobnie odrzuci twoją aplikację, jeśli spróbujesz zmodyfikować MPMovePlayerController poza publicznym API. Oto cytat z [dokumentów Apple'a] (https://developer.apple.com/library/ios/documentation/MediaPlayer/Reference/MPMoviePlayerController_Class/Reference/Reference.html): "Rozważ widok odtwarzacza filmów jako nieprzezroczysty Możesz dodać własne niestandardowe widoki do zawartości warstwy na górze filmu, ale ** nigdy nie wolno modyfikować żadnego z istniejących podrzędnych widoków. ** " – n8tr
Właśnie to zrobił:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieEventFullscreenHandler:)
name:MPMoviePlayerWillEnterFullscreenNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieEventFullscreenHandler:)
name:MPMoviePlayerDidEnterFullscreenNotification
object:nil];
self.moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
}
- (void)movieEventFullscreenHandler:(NSNotification*)notification {
[self.moviePlayer setFullscreen:NO animated:NO];
[self.moviePlayer setControlStyle:MPMovieControlStyleEmbedded];
}
Niezły pomysł, myślałem, że mogę go użyć, aby wywołać alert wyjaśniający, dlaczego tryb pełnoekranowy nie był dozwolony w bieżącym kontekście i zmusił go do pozostania w trybie wbudowanym. Niestety, tak naprawdę dzieje się tak, że nadal przechodzisz do trybu pełnoekranowego, a następnie powracasz do bycia osadzonym, co wygląda naprawdę okropnie. – Roger
Po prostu próbowałem to zrobić, ale niestety, pełnoekranowy ignoruje MPMovieControlStyleEmbedded i używa FullScreen, który, gdy przełączam na pełny ekran, staje się jeszcze większy :( – lordB8r
Fullscreen przycisk wraz z przyciskiem pauzy mogą zostać usunięte.
[self.videoPlayer setControlStyle:MPMovieControlStyleNone];
w celu wyłączenia przełącznika w trybie pełnoekranowym, czy przycisk formularz lub gestu pinch, można użyć tego:
moviePlayer.controlStyle = MPMovieControlStyleNone;
moviePlayer.view.userInteractionEnabled =NO;
Wiem, że to trochę przestarzałe, ale w każdym razie. Zrobiłem badania w tym kierunku i wygląda na to, że znalazłem odpowiedź. Nie wiem, dlaczego to działa, ale tak jest.
// Po zakończeniu filmu zwolnij kontroler.
-(void) myMovieFinishedCallback: (NSNotification*) aNotification
{
[self dismissModalViewControllerAnimated:YES];
MPMoviePlayerController* theMovie = [aNotification object];
[[NSNotificationCenter defaultCenter]
removeObserver: self
name: MPMoviePlayerPlaybackDidFinishNotification
object: theMovie];
[self.moviePlayer.view removeFromSuperview];
self.moviePlayer = nil;
// Release the movie instance created in playMovieAtURL:
}
Jeśli tylko rzeczą, którą chcesz zrobić, to wyłączyć szczypta jechać na pełnym ekranie (tjzachować interakcję włączona i cokolwiek kontrola styl chcesz), można użyć tego:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *set = [event allTouches];
NSArray *arr = [set allObjects];
for (int i = 0; i < arr.count; i++) {
UITouch *touch = (UITouch *) [arr objectAtIndex:i];
NSArray *recognisers = touch.gestureRecognizers;
for (UIGestureRecognizer *recogniser in recognisers) {
if (recogniser.enabled && [recogniser isMemberOfClass:[UIPinchGestureRecognizer class]]) {
recogniser.enabled = NO;
}
}
}
}
prosty dom usunąć pinch zoom tutaj
nadzieję, że pomoże
pracować ze mną na iOS6
for (UIView *view in moviePlayer.view.subviews) {
for(UIPinchGestureRecognizer *pinch in view.gestureRecognizers){
if([pinch isKindOfClass:[UIPinchGestureRecognizer class]])
[view removeGestureRecognizer:pinch];
}
}
Możesz ustawić parametr controlStyle na Pełny ekran. Te elementy sterujące są nieco inne, ale nie ma przycisku Pełny ekran!
[_moviePlayerController setControlStyle:MPMovieControlStyleFullscreen];
Geniusz! To zdecydowanie najlepsza odpowiedź – PICyourBrain
To działało na iOS 7, iPhone 5s.
Add Notification:
MPMoviePlayerDidEnterFullscreenNotification : @"moviePlayFullscreenNote:"
- (void)moviePlayFullscreenNote:(NSNotification*)notification
{
if (notification.object == self.videoPlayer)
{
[self.videoPlayer setFullscreen:NO animated:YES];
self.videoPlayer.controlStyle = MPMovieControlStyleEmbedded;
}
}
Zauważ, że tylko słucham powiadomienia "DID", a nie "WILL", a także uruchamiam animację. Myślę, że to działa, ponieważ daje czas systemowy na reakcję. Kiedy użyłem "WILL" i "DID", jak zaznaczono powyżej, doprowadziło to do czarnego ekranu bez kontroli. Występuje niewielki błąd, który jest widoczny podczas przejścia, ale potrzebuję wbudowanych przycisków odtwarzania/szorowania.
Niestety żaden z wyżej pracował dla mnie prawidłowo, więc wybranie powyższego I wdrożone następujące (i działało w porządku):
- Ukryj przycisk pełnego ekranu.
Dodaj ten kod w metodzie, w której uruchamiasz odtwarzacz filmów.
.... //Because we have to wait until controllers are shown [self performSelector:@selector(hideFullscreenButton) withObject:self afterDelay:0.5]; ...
Dodaj metody:
-(void) hideFullscreenButton{ //Hide full screen mode button [self hideFullscreenSubview:movieClip.view.subviews]; } -(void) hideFullscreenSubview:(NSArray*)arr{ for(UIView *v in arr){ if([v.subviews count]>0) [self hideFullscreenSubview:v.subviews]; else NSLog(@"%@",v); if(v.frame.origin.x==975){ v.hidden=TRUE; } } }
Problem polega, że nie ma tag określić, które zobaczyć trzeba ukryć. W moim przypadku ustalam to za pomocą współrzędnych widoku.
- Zastępuj gesty dotykiem, aby nie zezwalać na powiększenie pełnoekranowe.
movieClip.controlStyle = MPMovieControlStyleEmbedded; //Disable tap for not allowing that video control set on a full screen mode. UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action:@selector(doSingleTap)]; singleTap.numberOfTapsRequired = 1; [movieClip.view addGestureRecognizer:singleTap]; UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action:@selector(doDoubleTap)]; doubleTap.numberOfTapsRequired = 2; [movieClip.view addGestureRecognizer:doubleTap]; [singleTap requireGestureRecognizerToFail:doubleTap];
i dodać metody selektora:
-(void) doSingleTap{ //DO NOTHING!!! } -(void) doDoubleTap{ //DO NOTHING!!! }
Pierwsze rozwiązanie sprawdziło się idealnie, Na dole wersja Swift – diegomen
ukrywa skruber, a nie przycisk pełnego ekranu –
umieścić UIView
lub UIButton
z przezroczystym tle w górnej części widoku, który pokazuje wideo, dzięki czemu użytkownik nie będzie mógł dotknij widoku zawierającego wideo.
To Swift wersja pierwszego roztworu Javier Calatrava Llavería:
func hideFullScreenButton() {
self.hideFullScreenSubview((self.moviePlayerController?.view.subviews)!)
}
func hideFullScreenSubview(subviews: [UIView]) {
for view: UIView in subviews {
if view.subviews.count > 0 {
self.hideFullScreenSubview(view.subviews)
}
if view.frame.origin.x == 631 {
view.hidden = true
}
}
}
A gdy użytkownik kliknie Play:
self.performSelector(#selector(VideoViewController.hideFullScreenButton), withObject: self, afterDelay: 0.5)
(VideoViewController jest kontroler widoku, w którym mam MPMoviePlayerController)
- 1. Wyłącz AirPlay z MPMoviePlayerController
- 2. Pełny ekran telefonu iPhone
- 3. Chrome Pełny ekran API
- 4. UIImagePickerController nie pełny ekran
- 5. Ustaw pełny ekran onCreate
- 6. Bootstrap Karuzela Pełny ekran
- 7. Pełny ekran z pyqt4?
- 8. LWJGL Pełny ekran nie działa
- 9. Swift & SpriteKit: Pełny ekran obrazu
- 10. Java Windows 8 Pełny ekran?
- 11. Pełny ekran w widoku przewijania
- 12. Wyłącz utrzymać ekran na
- 13. Pełny ekran HTML wideo 5 Internet Explorer
- 14. Ustawienie menu kontekstowego na pełny ekran
- 15. Wykonaj bottomSheetDialog pełny ekran nad paskiem stanu
- 16. Pełny ekran Arch Linux w wirtualnym pudełku
- 17. Jak wykonać pełny ekran projektowania materiałów?
- 18. Rozwiń Widok Androida jako pełny ekran
- 19. Wymuś pełny ekran w przeglądarce Chrome
- 20. Java GUI Pełny ekran dla wielu ekranów
- 21. Jak zrobić działalności, nie obejmujące pełny ekran
- 22. Android: Jak ustawić dialogFragment na pełny ekran
- 23. Jak wykryć przeglądarkę przeszła na pełny ekran
- 24. Jak rozszerzyć rozszerzenie chrome na pełny ekran?
- 25. Wyłącz wyświetlanie ekranu, gdy laptop wyłącza ekran?
- 26. PhoneGap Wyłącz ekran obracać na jednej stronie?
- 27. Wyłącz/Zmień IntelliJ IDE ekran powitalny
- 28. iOS 8 uruchom aplikację na zawsze lub wyłącz ekran
- 29. pełny ekran div, który pasuje do rozmiaru przeglądarki
- 30. Jak wykonać pełny ekran w systemie Android 4.0
:( Dziękujemy! – MathieuF