MPMoviePlayerController adicionando UIButton para ver isso desaparecer com os controles

Estou tentando adicionar um UIButton à exibição de um MPMoviePlayerController junto com os controles padrão. O botão aparece sobre o vídeo e funciona como esperado, recebendo eventos de toque, mas eu gostaria que ele aparecesse com os controles padrão em resposta aos toques do usuári

Sei que consegui fazer isso rolando meus próprios controles de player personalizados, mas parece bobagem, já que estou apenas tentando adicionar um botão.

EDITA

Se você percorrer recursivamente a hierarquia de exibição do MPMoviePlayerController visualização de @ eventualmente chegará a uma classe de visualização chamada MPInlineVideoOverlay. Você pode adicionar facilmente qualquer controle adicional a essa exibição para obter o comportamento de entrada / saída automática de desvaneciment

o entanto, existem algumas dicas, às vezes pode demorar um pouco (até um segundo na minha experiência) depois que você cria o MPMoviePlayerController e adicionou-o a uma visualização antes de inicializar completamente e criar seu MPInlineVideoOverlay layer. Por causa disso, tive que criar uma variável de instância chamada controlView no código abaixo, porque às vezes ele não existe quando esse código é executado. É por isso que eu tenho o último bit de código em que a função se chama novamente em 0,1 segundos, se não for encontrada. Não pude notar nenhum atraso no botão exibido na minha interface, apesar desse atraso.

-(void)setupAdditionalControls {
    //Call after you have initialized your MPMoviePlayerController (probably viewDidLoad)
    controlView = nil;
    [self recursiveViewTraversal:movie.view counter:0];

    //check to see if we found it, if we didn't we need to do it again in 0.1 seconds
    if(controlView) {
            UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
            [controlView addSubview:backButton];
    } else {
            [self performSelector:@selector(setupAdditionalControls) withObject:nil afterDelay:0.1];
    }
}


-(void)recursiveViewTraversal:(UIView*)view counter:(int)counter {
    NSLog(@"Depth %d - %@", counter, view); //For debug
    if([view isKindOfClass:NSClassFromString(@"MPInlineVideoOverlay")]) {
            //Add any additional controls you want to have fade with the standard controls here
            controlView = view;
    } else {
            for(UIView *child in [view subviews]) {
                    [self recursiveViewTraversal:child counter:counter+1];
            }
    }
}

Não é a melhor solução, mas estou publicando-a no caso de alguém tentar fazer a mesma coisa. Se a Apple alterasse a estrutura de exibição ou os nomes de classe internos à sobreposição de controle, ela seria interrompida. Também suponho que você não esteja reproduzindo o vídeo em tela cheia (embora seja possível reproduzi-lo em tela cheia com controles incorporados). Eu também tive que desativar o botão de tela cheia usando a técnica descrita aqui porque o MPInlineVideoOverlay @ view é removido e liberado quando pressionado:iPad MPMoviePlayerController - Desativar tela cheia

Calling setupAdditionalControls quando você receber as notificações em tela cheia descritas acima, adicionará novamente seus controles adicionais à interface do usuário.

Adoraria uma solução mais elegante se alguém puder sugerir algo diferente desse truque que eu criei.

questionAnswers(1)

yourAnswerToTheQuestion