Halle zusammen,
ich hab hier ein Problem das sich nicht ohne weiteres lösen lässt.
Ich hab hier ein Musicplayer (keins von Hause Apple/Swift) das in Objective-C geschrieben worden ist.
Der Player ist in einem TableViewCell implementiert und ich habe das Problem, dass wenn der Player einen Titel abspielt, diesen auch dann weiter hin abspielt, wenn ich die TableView verlassen habe und das möchte ich nicht.
Ich hab es mit "MPMusicPlayerController" und "AVAudioSession" probiert aber auch damit die TableView vom memory zu laden über die viewDidDisappear/viewWillDisappear, erfolglos oder falsch.
Gleich am Anfang lese ich was von einem Observer, vermutlich soll das mein Problem eigentlich lösen, was es aber nicht tut.
Jemand ein Tipp wie ich da ran gehen könnte?
- Swiffer
Alles anzeigen
ich hab hier ein Problem das sich nicht ohne weiteres lösen lässt.
Ich hab hier ein Musicplayer (keins von Hause Apple/Swift) das in Objective-C geschrieben worden ist.
Der Player ist in einem TableViewCell implementiert und ich habe das Problem, dass wenn der Player einen Titel abspielt, diesen auch dann weiter hin abspielt, wenn ich die TableView verlassen habe und das möchte ich nicht.
Ich hab es mit "MPMusicPlayerController" und "AVAudioSession" probiert aber auch damit die TableView vom memory zu laden über die viewDidDisappear/viewWillDisappear, erfolglos oder falsch.
Gleich am Anfang lese ich was von einem Observer, vermutlich soll das mein Problem eigentlich lösen, was es aber nicht tut.
Jemand ein Tipp wie ich da ran gehen könnte?
- Swiffer
Python-Quellcode
- #import "XMMContentBlock1TableViewCell.h"
- @interface XMMContentBlock1TableViewCell () <XMMMediaFileDelegate>
- @property (nonatomic, strong) UIImage *playImage;
- @property (nonatomic, strong) UIImage *pauseImage;
- @property (nonatomic, strong) XMMMediaFile *mediaFile;
- @end
- @implementation XMMContentBlock1TableViewCell
- - (void)awakeFromNib {
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(pauseAllXMMMusicPlayer)
- name:@"pauseAllSounds"
- object:nil];
- [self setupImages];
- self.fileManager = [[XMMOfflineFileManager alloc] init];
- [self.audioControlButton setImage:self.playImage
- forState:UIControlStateNormal];
- self.audioControlButton.tintColor = UIColor.blackColor;
- [self.forwardButton setImage:[self.forwardButton.currentImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]
- forState:UIControlStateNormal];
- self.forwardButton.tintColor = UIColor.blackColor;
- [self.backwardButton setImage:[self.backwardButton.currentImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]
- forState:UIControlStateNormal];
- self.backwardButton.tintColor = UIColor.blackColor;
- [super awakeFromNib];
- }
- - (void)prepareForReuse {
- [super prepareForReuse];
- _progressBar.lineProgress = 0.0f;
- _mediaFile.delegate = nil;
- [_movingBarView stop];
- [_audioControlButton setImage:self.playImage forState:UIControlStateNormal];
- }
- - (void)setupImages {
- NSBundle *bundle = [NSBundle bundleForClass:[self class]];
- NSURL *url = [bundle URLForResource:@"XamoomSDK" withExtension:@"bundle"];
- NSBundle *imageBundle = nil;
- if (url) {
- imageBundle = [NSBundle bundleWithURL:url];
- } else {
- imageBundle = bundle;
- }
- self.playImage = [[UIImage imageNamed:@"playbutton"
- inBundle:imageBundle
- compatibleWithTraitCollection:nil] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
- self.pauseImage = [[UIImage imageNamed:@"pausebutton"
- inBundle:imageBundle
- compatibleWithTraitCollection:nil] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
- }
- - (void)configureForCell:(XMMContentBlock *)block tableView:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath style:(XMMStyle *)style offline:(BOOL)offline {
- self.titleLabel.text = block.title;
- // Ändert die Schriftart des Musiktitels
- self.titleLabel.font = [UIFont fontWithName:@"Avenir Next" size: 17];
- self.artistLabel.text = block.artists;
- // Färbe den Mediaplayer ein.
- self.forwardButton.tintColor = [UIColor colorWithHexString:@"#FFFFFF"];
- self.backwardButton.tintColor = [UIColor colorWithHexString:@"#FFFFFF"];
- // self.movingBarView.tintColor = color;
- self.audioControlButton.tintColor = [UIColor colorWithHexString:@"#FFFFFF"];
- if (block.fileID == nil) {
- return;
- }
- NSURL *url;
- if (offline) {
- url = [self.fileManager urlForSavedData:block.fileID];
- } else {
- url = [[NSURL alloc] initWithString:block.fileID];
- }
- _mediaFile = [[XMMAudioManager sharedInstance] createMediaFileForPosition:block.ID
- url:url
- title:block.title
- artist:block.artists];
- _mediaFile.delegate = self;
- [self didUpdatePlaybackPosition:_mediaFile.playbackPosition];
- if (_mediaFile.isPlaying) {
- [self didStart];
- }
- }
- - (void)didStart {
- NSLog(@"didStart");
- self.playing = YES;
- [self.movingBarView start];
- [self.audioControlButton setImage:self.pauseImage forState:UIControlStateNormal];
- }
- - (void)didPause {
- NSLog(@"didPause");
- self.playing = NO;
- [self.movingBarView stop];
- [self.audioControlButton setImage:self.playImage forState:UIControlStateNormal];
- }
- - (void)didStop {
- NSLog(@"didStop");
- self.playing = NO;
- [self.movingBarView stop];
- [self.audioControlButton setImage:self.playImage forState:UIControlStateNormal];
- }
- // RemainingTime Fix
- - (void)didUpdatePlaybackPosition:(long)playbackPosition {
- float progress = (float)playbackPosition/(float)self.mediaFile.duration;
- self.progressBar.lineProgress = progress;
- float absTimeOfMusik = (float)self.mediaFile.duration;
- float songDurationInSeconds = self.mediaFile.playbackPosition;
- float remainingTime = absTimeOfMusik - songDurationInSeconds;
- self.countingTimeLabel.text = [NSString stringWithFormat:@"%d:%02d", (int)songDurationInSeconds / 60, (int)songDurationInSeconds % 60];
- self.remainingTimeLabel.text = [NSString stringWithFormat:@"-%d:%02d", (int)remainingTime / 60, (int)remainingTime % 60];
- }
- - (IBAction)playButtonTouched:(id)sender {
- if (!self.isPlaying) {
- self.playing = YES;
- [self.audioControlButton setImage:self.pauseImage forState:UIControlStateNormal];
- [_mediaFile start];
- } else {
- self.playing = NO;
- [self.audioControlButton setImage:self.playImage forState:UIControlStateNormal];
- [_mediaFile pause];
- }
- }
- // Musikvorspulen auf 15 Sekunden gesetzt
- - (IBAction)forwardButtonTouched:(id)sender {
- [_mediaFile seekForward:15];
- }
- - (IBAction)backwardButtonTouched:(id)sender {
- [_mediaFile seekBackward:15];
- }
- #pragma mark - XMMMMusicPlayer delegate
- - (void)finishedPlayback {
- self.playing = NO;
- [self.movingBarView stop];
- [self.audioControlButton setImage:self.playImage
- forState:UIControlStateNormal];
- }
- - (void)changeTextColors:(UIColor *)color {
- self.titleLabel.textColor = color;
- self.artistLabel.textColor = color;
- self.remainingTimeLabel.textColor = color;
- self.forwardLabel.textColor = color;
- self.backwardLabel.textColor = color;
- self.forwardButton.tintColor = color;
- self.backwardButton.tintColor = color;
- self.movingBarView.tintColor = color;
- self.audioControlButton.tintColor = color;
- }
- #pragma mark - Appearance Getters & Setters
- - (void)setAudioPlayerBackgroundColor:(UIColor *)audioPlayerBackgroundColor {
- _audioPlayerView.backgroundColor = audioPlayerBackgroundColor;
- }
- - (UIColor *)audioPlayerBackgroundColor {
- return _audioPlayerView.backgroundColor;
- }
- - (void)setAudioPlayerProgressBarBackgroundColor:(UIColor *)audioPlayerProgressBarBackgroundColor {
- _progressBar.backgroundLineColor = audioPlayerProgressBarBackgroundColor;
- }
- - (UIColor *)audioPlayerProgressBarBackgroundColor {
- return _progressBar.backgroundLineColor;
- }
- - (void)setAudioPlayerProgressBarColor:(UIColor *)audioPlayerProgressBarColor {
- _progressBar.foregroundLineColor = audioPlayerProgressBarColor;
- }
- - (UIColor *)audioPlayerProgressBarColor {
- return _progressBar.foregroundLineColor;
- }
- - (void)setAudioPlayerTintColor:(UIColor *)audioPlayerTextColors {
- [self changeTextColors:audioPlayerTextColors];
- }
- - (UIColor *)audioPlayerTintColor {
- return _titleLabel.textColor;
- }
- #pragma mark - Notification Handler
- - (void)pauseAllXMMMusicPlayer {
- [self.movingBarView stop];
- self.playing = NO;
- }
- @end