2013-09-30 5 views
3

Im используя AVPlayer для воспроизведения песен с urls, я инициализировал и размещал его в моем диспетчере просмотра, теперь у меня есть проблема, когда я перехожу к другому контроллеру представления и обратно к основному проигрывателю, обновление слайдера должно остаться, но проблема заключается в том, когда я перехожу к основному проигрывателю, снова играющему детали, а обновление слайдера не происходит, но песня постоянно воспроизводится. Как я могу избежать этого, и кто-нибудь может показать мне пример. Мне нужно создать одноэлементный класс, если да, то как создать одноэлементный класс для AVPlayer.Как создать класс однопользовательского AVPlayer

Благодаря

ответ

7

Решение 1: Вы должны обновить пользовательский интерфейс также в viewWillAppear вашего PlayerViewController. Песня продолжает воспроизводиться, потому что вы не вернетесь или не освободите PlayerViewController. Если вы открываете или закрываете PlayerViewController, это решение не будет работать.

Решение 2: Создание класса Singleton с экземпляром AVAudioPlayer. например

MediaManager.h

@interface MediaManager : NSObject{ 

} 

+(MediaManager *)sharedInstance; 
-(void)playWithURL:(NSURL *)url; 
-(float)currentPlaybackTime; 
@end 

MediaManager.m

static MediaManager *sharedInstance = nil; 
@interface MediaManager(){ 
AVAudioPlayer *audioPlayer; 
} 

@end 
@implementation MediaManager 

-(id)init{ 
if(self = [super init]){ 

} 
return self; 
} 

+(MediaManager *)sharedInstance{ 
//create an instance if not already else return 
    if(!sharedInstance){ 
     sharedInstance = [[[self class] alloc] init]; 
    } 
    return sharedInstance; 
} 

-(void)playWithURL:(NSURL *)url{ 
NSError *error = nil; 
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
if(error == nil){ 
    [audioPlayer play]; 
} 
} 

-(float)currentPlaybackTime{ 

    return audioPlayer.currentTime; 
} 

@end 

Добавьте другие необходимые методы в нем, как "stopPlayer" и т.д.

Метод проб вызова

[[MediaManager sharedInstance] playWithURL:url]; 
float currentTime = [[MediaManager sharedInstance] currentPlaybackTime]; 
// Update slider 
+0

Хорошее объяснение, это помогает мне много – Asmita

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