IPad MPMoviePlayerController - отключить полноэкранный режим

Есть ли способ отключить полноэкранную кнопку MPMoviePlayerController?

Ответы

Ответ 1

Нет, нет способа. Надеюсь, следующее обновление.

Ответ 2

Просто сделал это:

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

Ответ 3

В зависимости от ваших потребностей вы также можете просто отключить все пользовательские взаимодействия в представлении плеера.

player.view.userInteractionEnabled = NO;

Ответ 4

Вы можете установить controlStyle в полноэкранный режим. эти элементы управления несколько отличаются, но на нем нет полноэкранной кнопки!

[_moviePlayerController setControlStyle:MPMovieControlStyleFullscreen];

Ответ 5

Вы можете скрыть элементы управления воспроизведением и добавить свои собственные, это предотвратит отображение кнопок по умолчанию на всех

I.e с

[player setMovieControlMode:MPMovieControlModeNone];

Ответ 6

К сожалению, никто из вышеперечисленных не работал у меня правильно, поэтому, выбрав выше, я выполнил следующее (и работал отлично):

  • Скрыть кнопку полного экрана.

Добавьте этот код в метод, в котором вы инициализируете проигрывателя.

    ....

        //Because we have to wait until controllers are shown

        [self performSelector:@selector(hideFullscreenButton) withObject:self afterDelay:0.5];

    ...

Добавьте методы:

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

            }

        }

    }

Проблема заключается в том, что нет тега, чтобы определить, какой вид вам нужно скрыть. В моем случае я определяю его по координатам вида.

  1. Перезаписать жесты жесткого диска, не позволяя полноэкранный зум.
 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];

И добавьте методы выбора:

    -(void) doSingleTap{
        //DO NOTHING!!!
    }

    -(void) doDoubleTap{
        //DO NOTHING!!!
    }

Ответ 7

Там чит:

MPMoviePlayerController *mpc = (...some instance...)
UIView *fsbutton = [[mpc view] viewWithTag:512];
[fsbutton setHidden:YES];

Основной вывод заключается в том, что вы должны сделать это в viewDidAppear: или аналогичном, потому что представление MoviePlayer устанавливается где-то внутри didMoveToWindow или didMoveToSuperview, которое происходит после viewWillAppear:. Таким образом, вы получаете кратковременную вспышку полноэкранной кнопки. Другие очевидные уловы включают в себя: хрупкий против Apple, изменяющий значение тега 512 (хотя он работает в 3.2 - 4.2); и, конечно же, Apple предпочла бы, чтобы вы этого не делали.

Подтвержденное решение состоит в том, чтобы установить стиль управления на MPMovieControlStyleNone и свернуть ваши собственные средства управления транспортом, что больше работает.

Ответ 8

чтобы отключить переключение в полноэкранный режим, либо кнопку формы, либо жест щепотки, вы можете использовать это:

moviePlayer.controlStyle = MPMovieControlStyleNone;
moviePlayer.view.userInteractionEnabled =NO; 

Ответ 9

Проводник делает это. Для видеороликов, которые начинаются в полноэкранном режиме, у них есть стандартные элементы управления MPMoviePlayerController, но отсутствуют полноэкранные кнопки. И они используют стандартные встроенные, так как они внезапно получили кнопку AirPlay с 4.2.

Ответ 10

Полноэкранная кнопка вместе с кнопкой паузы может быть удалена.

[self.videoPlayer setControlStyle:MPMovieControlStyleNone];

Ответ 11

Простой блок для удаления щепого зума здесь

Надеюсь, что это поможет

он работает со мной на iOS6

 for (UIView *view in  moviePlayer.view.subviews) {

    for(UIPinchGestureRecognizer *pinch in view.gestureRecognizers){
    if([pinch isKindOfClass:[UIPinchGestureRecognizer class]])
        [view removeGestureRecognizer:pinch];
    }
}

Ответ 12

Это работало на 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;
    }
}

Обратите внимание, что я слушаю только "DID", а не уведомление "WILL", а также его анимацию. Я думаю, что это работает, поскольку это дает системному времени реагировать. Когда я использовал "WILL" и "DID", как указано в ответах выше, это привело к черному экрану без контроля. Есть небольшой сбой, который виден при переходе, но мне нужны кнопки воспроизведения/очистки из встроенных.

Ответ 13

Если только вещь, которую вы хотите сделать, отключить пинч, чтобы перейти в полноэкранный режим (т.е. включить взаимодействие и любой стиль управления), вы можете использовать это:

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

Ответ 14

Это версия Swift первого решения Хавьера Калатравы 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
        }
    }
}

И когда пользователь вступает в игру:

self.performSelector(#selector(VideoViewController.hideFullScreenButton), withObject: self, afterDelay: 0.5)

(VideoViewController - это контроллер представления, в котором у меня есть MPMoviePlayerController)

Ответ 15

Я знаю, это немного устарело, но все равно. Я провел некоторое исследование в этом направлении и, похоже, нашел ответ. Я не знаю, почему он работает, но это так.

-(void) playMovieAtURL: (NSURL*) theURL {

    MPMoviePlayerController* theMovie =
    [[MPMoviePlayerController alloc] initWithContentURL: theURL];
    //That line is for ARC. Without it, it may not work.
    self.moviePlayer = theMovie;
    theMovie.scalingMode = MPMovieScalingModeAspectFill;
    theMovie.controlStyle = MPMovieControlStyleFullscreen;
    theMovie.repeatMode  = MPMovieRepeatModeOne;
    //Here you'd better use your custom ViewController subclass, if you want autorotating and all that stuff.
    UIViewController * vc = [UIViewController new];
    [vc.view addSubview:theMovie.view];
    theMovie.fullscreen  = YES;
    theMovie.view.frame = vc.view.bounds;
    vc.view = theMovie.view;
    [self presentModalViewController:vc animated:YES];
    theMovie.fullscreen  = YES;

    [theMovie prepareToPlay];
    [theMovie play];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMovieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
}

//Когда фильм сделан, отпустите контроллер.

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

Ответ 16

Поместите a UIView или UIButton прозрачным фоном в верхней части представления, которое показывает видео, чтобы пользователь не мог использовать вид, содержащий видео.