2013-08-05 5 views
3

Я пытаюсь показать MBProgressHud к MPMoviePlayerController, за что я наблюдаю уведомления для нагрузочных состояний MPMoviePlayer, но как-то метод наблюдения уведомления никогда не замечает уведомления для других нагрузочных состояний затем MPMovieLoadStatePlayable. Я показываю MBProgressHud, когда видео запускается, но оно не работает после того, как оно воспроизводится, а затем для паузы для загрузки видео. Из-за этого я не могу задействовать пользователя во время загрузки видео. Если у кого-то есть лучший способ, пожалуйста, укажите его или если есть любая проблема в следующем коде, тогда дайте мне знать.Добавление MBProgressHud к MPMoviePlayerController

-(void)movieLoadStateDidChange:(NSNotification*)notification{ 

    MPMoviePlayerController *player = [notification object]; 


    if ((player.loadState & MPMovieLoadStatePlayable) == MPMovieLoadStatePlayable) { 
     NSLog(@"Load state Playable"); 
     [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; 

    }else if ((player.loadState & MPMovieLoadStatePlaythroughOK) == MPMovieLoadStatePlaythroughOK){ 
     NSLog(@"Load state Playing"); 
     [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; 
    }else if ((player.loadState & MPMovieLoadStateStalled) == MPMovieLoadStateStalled){ 
     [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
     NSLog(@"Load state stalled"); 
    }else if ((player.loadState & MPMovieLoadStateUnknown) == MPMovieLoadStateUnknown){ 
     NSLog(@"Load State unknown"); 

    } 

} 
+0

Можете ли вы охарактеризовать меня больше моего друга? потому что я не получаю вашу проблему .... – NiravPatel

+0

Проблема @NiravPatel заключается в том, что в вышеописанном методе я не получаю уведомления о состоянии загрузки, кроме MPMovieLoadStatePlayable, или, другими словами, управление никогда не входит в еще часть блоков if else, я надеюсь, что это время я упоминаю проблему в правильном порядке :) – Arslan

+0

Проще всего это правильный метод показа MBProgressHud или индикатор активности при загрузке видео с URL-адреса сервера? или мне нужно сделать что-то еще? – Arslan

ответ

3

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

записать ниже notifiations в viewdidload

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackStateDidChange:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerLoadStateDidChange:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil]; 

После определения его в ViewDidLoad, выполнять эти функции, как показано ниже ....

- (void) moviePlayerPlaybackDidFinish:(NSNotification *)notification 
{ 
    //your code.... 
MPMovieFinishReason finishReason = [notification.userInfo[MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] integerValue]; 
NSError *error = notification.userInfo[XCDMoviePlayerPlaybackDidFinishErrorUserInfoKey]; 
NSString *reason = @"Unknown"; 
switch (finishReason) 
{ 
    case MPMovieFinishReasonPlaybackEnded: 
     reason = @"Playback Ended"; 
     break; 
    case MPMovieFinishReasonPlaybackError: 
     reason = @"Playback Error"; 
     break; 
    case MPMovieFinishReasonUserExited: 
     reason = @"User Exited"; 
     break; 
} 
NSLog(@"Finish Reason: %@%@", reason, error ? [@"\n" stringByAppendingString:[error description]] : @""); 
} 


    - (void) moviePlayerPlaybackStateDidChange:(NSNotification *)notification 
{ 
    MPMoviePlayerController *moviePlayerController = notification.object; 
NSString *playbackState = @"Unknown"; 
switch (moviePlayerController.playbackState) 
{ 
    case MPMoviePlaybackStateStopped: 
     playbackState = @"Stopped"; 
     break; 
    case MPMoviePlaybackStatePlaying: 
     playbackState = @"Playing"; 
     break; 
    case MPMoviePlaybackStatePaused: 
     playbackState = @"Paused"; 
     break; 
    case MPMoviePlaybackStateInterrupted: 
     playbackState = @"Interrupted"; 
     break; 
    case MPMoviePlaybackStateSeekingForward: 
     playbackState = @"Seeking Forward"; 
     break; 
    case MPMoviePlaybackStateSeekingBackward: 
     playbackState = @"Seeking Backward"; 
     break; 
} 
NSLog(@"Playback State: %@", playbackState); 
} 


    - (void) moviePlayerLoadStateDidChange:(NSNotification *)notification 
{ 
MPMoviePlayerController *moviePlayerController = notification.object; 
NSMutableString *loadState = [NSMutableString new]; 
MPMovieLoadState state = moviePlayerController.loadState; 
if (state & MPMovieLoadStatePlayable) 
    [loadState appendString:@" | Playable"]; 
if (state & MPMovieLoadStatePlaythroughOK) 
    [loadState appendString:@" | Playthrough OK"]; 
if (state & MPMovieLoadStateStalled) 
    [loadState appendString:@" | Stalled"]; 

NSLog(@"Load State: %@", loadState.length > 0 ? [loadState substringFromIndex:3] : @"N/A"); 
} 

дайте мне знать, что это работает или нет !!!

Happy Coding !!!!

+1

Большое спасибо Нирау, теперь он работает, вы хорошо поняли, на самом деле я не добавлял наблюдателя в соответствующее положение в коде. Действительно глупая ошибка – Arslan

+0

Добро пожаловать Arslan.Can вы даете мне один upvote, пожалуйста? – NiravPatel

+0

Извините, Нир, я не могу, так как у меня недостаточно голосов, чтобы проголосовать – Arslan

Смежные вопросы