Как я могу добавить KVO в MPMoviePlayerController так, чтобы я мог определить, когда элементы управления видны - PullRequest
2 голосов
/ 23 августа 2011

Я хочу, чтобы мои пользовательские элементы управления отображались и исчезали со стандартным элементом управления MPMoviePlayerController. Каков наилучший подход?

Спасибо,

Rob

1 Ответ

4 голосов
/ 24 августа 2011

Мне кажется, я нашел решение. Если кому-то еще нужна эта функциональность, вот как я заставил ее работать:

Я использовал найденный код здесь , чтобы найти подпредставление MPInlineVideoOverlay в массиве представлений MPMoviePlayer. Затем я изменил его следующим образом:


- (void)observeValueForKeyPath:(NSString *)keyPath 
                          ofObject:(id)object 
                            change:(NSDictionary *)change 
                           context:(void *)context {</p>

    float newValue = 0;
    if([change objectForKey:NSKeyValueChangeNewKey] != [NSNull null]) 
    {
        newValue = [[change objectForKey:NSKeyValueChangeNewKey] floatValue];
    }
    NSLog(@"player controls are visible: %@", newValue ? @"YES" : @"NO");
    self.controlsView.alpha = newValue;
}

-(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
        mainControlsView = view;
    } else {
        for(UIView *child in [view subviews]) {
            [self recursiveViewTraversal:child counter:counter+1];
        }
    }
}

-(void)setupAdditionalControls {
    //Call after you have initialized your MPMoviePlayerController (probably viewDidLoad)
    mainControlsView = nil;
    [self recursiveViewTraversal:moviePlayer.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(mainControlsView) {
        [mainControlsView addObserver:self forKeyPath:@"alpha"      options:NSKeyValueObservingOptionNew context:NULL];
    } else {
        [self performSelector:@selector(setupAdditionalControls) withObject:nil afterDelay:0.1];
    }
}`

Где mainControlsView - это стандартные элементы управления Apple для MPMoviePlayer, а self.controlsView - это мое представление с моими пользовательскими элементами управления. Значение ключа I Соблюдайте свойство alpha в стандартном представлении элементов управления и меняйте его, чтобы оно соответствовало при каждом его изменении.

Rob

...