AVPlayer currentTime mise à jour pour un UISlider quand ViewController charge
Je suis en train de jouer des chansons en AVPlayer
. J'ai créé une view controller pour mon media player et l'initialisation, et toutes les méthodes que j'utilise pour le lecteur (lecture, pause, répétition, lecture aléatoire) y sont dans la même vue-contrôleur.
- Je mettre à jour un curseur comme ceci:
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(sliderUpdate:) userInfo:nil repeats:YES];`
- (void) sliderUpdate:(id) sender{
int currentTime = (int)((song.player.currentTime.value)/song.player.currentTime.timescale);
slider.value=currentTime;
NSLog(@"%i",currentTime);
song.currentTime=currentTime;
int currentPoint=(int)((song.player.currentTime.value)/song.player.currentTime.timescale);
int pointMins=(int)(currentPoint/60);
int pointSec=(int)(currentPoint%60);
NSString *strMinlabel=[NSString stringWithFormat:@"%02d:%02d",pointMins,pointSec];
lblSlidermin.text=strMinlabel;
song.strslidermin=strMinlabel;
}
Une fois que je suis sortie de la viewcontroller et lorsque viennent à nouveau, la chanson est en cours de lecture, mais le problème est le curseur n'est pas mise à jour. J'ai donc créé une classe singleton pour attribuer chanson en cours de lecture détails. Aussi à l'intérieur du curseur de mise à jour, je asigned playerCurrentTime
(slidercurrent valeur) pour une classe singleton variable. Et mon viewdidload
méthode que j'ai assigné comme ceci:
if (song.isPlaying==NO) {
[self prePlaySong];
}else{
lblAlbum.text=song.currentAlbum;
lblArtist.text=song.currentArtist;
lblSong.text=song.currentSong;
slider.value=song.currentTime;
slider.maximumValue=song.sliderMax;
slider.minimumValue=song.sliderMin;
imgSong.image=song.songImage;
[btnMiddle setBackgroundImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal];
}
mais le curseur n'est pas mis à jour. Pourquoi et comment je peux résoudre ce problème?
OriginalL'auteur iDia | 2013-10-01
Vous devez vous connecter pour publier un commentaire.
Vous ne devez pas utiliser une minuterie pour cela,
AVPlayer
fournit une API vous observez les temps.Enregistrer un observateur (par exemple, dans
viewWillAppear
) comme ceci:Pour annuler l'inscription de l'observateur (par exemple, dans
viewDidDisappear
), faites:Espère que ça aide.
OriginalL'auteur chris
Swift 3 version.
Enregistrer un observateur:
Supprimer un obserber:
OriginalL'auteur Allen Wang