Наложение сверх Потоковой передачи MPMoviePlayerController

Я (и остальная часть нашей команды в моей компании) предпочитаю повышать исключения вместо того, чтобы возвратить коды ошибки. Коды ошибки должны быть проверены везде, розданы и иметь тенденцию делать код нечитабельным, когда объем кода становится больше.

ошибочный класс тогда определил бы сообщение.

пз: и на самом деле также забота об интернационализации!
PPS: Вы могли также переопределить метод повышения и добавить вход, фильтруя и т.д. при необходимости (в средах эластина, где Классы исключений и друзья являются растяжимыми/изменяемыми)

5
задан skaffman 31 March 2010 в 17:08
поделиться

3 ответа

MPMoviePlayerController создает свое собственное окно и устанавливает его в качестве ключевого окна - вы, вероятно, уже знаете это из примера приложения MoviePlayer.

Я не знаю почему, но есть задержка, когда player использует поток - поэтому keyWindow, которое вы получаете сразу после инициализации проигрывателя, скорее всего, не является окном проигрывателя, поскольку оно, кажется, будет добавлено позже.

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

[NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(addMyOverlay:) userInfo:nil repeats:FALSE]

Или вы можете прослушать событие UIWindowDidBecomeKeyNotification и сделать то же самое:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyWindowChanged:) name:UIWindowDidBecomeKeyNotification object:nil];

Ни один из вариантов не подходит (я бы хотел узнать более чистый способ сделать это), но он получает работа сделана.

11
ответ дан 18 December 2019 в 09:51
поделиться

Предыдущий ответ был основан на таймере. & фиксированные 5 секунд.

Когда запускается Movie player, в приложение добавляется новое окно.

Используйте таймер, чтобы проверить, добавлено ли новое окно в ваше приложение или нет.

Когда окно (Movie Player) окно) добавлено. установить уведомления.

-(void)viewDidLoad{

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(moviePreloadDidFinish:) 
                                                 name:MPMoviePlayerContentPreloadDidFinishNotification 
                                               object:nil];

    // Register to receive a notification when the movie has finished playing. 
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(moviePlayBackDidFinish:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:nil];

    // Register to receive a notification when the movie scaling mode has changed. 
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(movieScalingModeDidChange:) 
                                                 name:MPMoviePlayerScalingModeDidChangeNotification 
                                               object:nil];
    videoListController.xmlClassVideoList=t;
    // here ttttt is a timer declared in .h file
    tttttt=[NSTimer scheduledTimerWithTimeInterval:0.5 target:self      selector:@selector(startMy) userInfo:nil repeats:YES];  
}

-(void)startMy{
    NSArray *windows = [[UIApplication sharedApplication] windows];  
    NSLog(@"%i",[windows count]);
    // depends on your application window
    // it may be 1/2/3
    if ([windows count] > 3) {
        // Locate the movie player window
        [tttttt invalidate];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyWindowChanged:) name:UIWindowDidBecomeKeyNotification object:nil];
    }
}
1
ответ дан 18 December 2019 в 09:51
поделиться

Вы можете наложить свое представление, когда получите уведомление «MPMoviePlayerContentPreloadDidFinishNotification».

Зарегистрируйтесь для уведомления:

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(moviePreloadDidFinish:) 
                                             name:MPMoviePlayerContentPreloadDidFinishNotification 
                                           object:nil];

Добавить представление наложения при получении уведомления:

//  Notification called when the movie finished preloading.
- (void) moviePreloadDidFinish:(NSNotification*)notification
{
    NSArray *windows = [[UIApplication sharedApplication] windows];
    if ([windows count] > 1)
    {
        // Locate the movie player window
        UIWindow *moviePlayerWindow = [[UIApplication sharedApplication] keyWindow];
        if ([moviePlayerWindow viewWithTag:0x3939] == nil) {
            self.videoOverlayView.tag = 0x3939;
            [moviePlayerWindow addSubview:self.videoOverlayView];
        }
        [moviePlayerWindow bringSubviewToFront:self.videoOverlayView];
    }
}
3
ответ дан 18 December 2019 в 09:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: