Остановка аудиоплеера в другом контроллере представления из таймера - PullRequest
1 голос
/ 19 октября 2011

У меня есть аудиопроигрыватель, работающий в одном представлении, и таймер, воспроизводимый в другом представлении, и я хочу, чтобы аудиофайл запускался, чтобы остановить воспроизведение, когда «myTicker» достигает нуля после обратного отсчета.

Я перепробовал все виды вещей, включая выделение контроллеров представления, просто запуск команды останова, ноль и т. Д. И т. Д. Я не включил усилия, так как мне было бы интересно узнать, насколько далеко от меня находится отметка был.

Вот некоторый код из контроллера представления, воспроизводящего аудио:

-(IBAction)stoneFireStop {

    [self.stoneFire stop];
    [self.bineuralDreamscape stop];
    [self.bineuralSleep stop];

}

- (void)viewDidLoad
{
    [super viewDidLoad];

NSString *stoneFireFilePath = [[NSBundle mainBundle] pathForResource:@"stoneFire" 
                                                                  ofType:@"m4a"];

    // Convert the file path to a URL.
    NSURL *stoneFireFileURL = [[NSURL alloc] initFileURLWithPath:stoneFireFilePath];

    //Initialize the AVAudioPlayer.
    self.stoneFire = [[AVAudioPlayer alloc] 
                      initWithContentsOfURL:stoneFireFileURL error:nil];

    // Preloads the buffer and prepares the audio for playing.
    [self.stoneFire prepareToPlay];
    stoneFire.numberOfLoops = -1;

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    [[AVAudioSession sharedInstance] setActive: YES error: nil];

}


- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];

    stoneFireView = nil;
    stoneFire = nil;
    bineuralDreamscape = nil;
    bineuralSleep = nil;

}

и вот код из представления, который содержит «вещи» таймера:

- (void)showActivity{


    if (blackBg1.hidden) {
        blackBg1.hidden = NO;
    }
    if (blackBg2.hidden) {
        blackBg2.hidden = NO;
    }

    timerSecond = timerSecond - 1;
    inputSeconds = timerSecond;
    hours =  inputSeconds / 3600;
    minutes = ( inputSeconds - hours * 3600 ) / 60; 

    int secondz = timerSecond - (hours * 3600 + minutes * 60);

    if (timerSecond > 0) {
        secondsLabel.text = [NSString stringWithFormat:@"%d",secondz];
    }
    else {
        secondsLabel.hidden = YES;
    }

    NSLog(@"%d:%d:%d",hours,minutes,secondz);

    if (secondz == 59) {
        timer = [NSTimer timerWithTimeInterval:speed target:self selector:@selector(setMinuteInTimer) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

        if (minutes == 0 && hours == 0) {
            isAlarm = YES;

        }
    }
    if (secondz == 10 && minutes == 0 && hours == 0) {
        newTime = YES;
        redColorTurnOn = YES;
        timer = [NSTimer timerWithTimeInterval:speed target:self selector:@selector(setMinuteInTimer) userInfo:nil repeats:YES];
        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];       

        NSString *bgrnd = [NSString stringWithFormat:@"redBgrnd.png"];
        whiteBg1.image = [UIImage imageNamed:bgrnd];
        whiteBg2.image = [UIImage imageNamed:bgrnd];

    }

    if (secondz == 0 && minutes == 0 && hours == 0) {
        redColorTurnOn = NO;
        [myTicker invalidate];
    }

}

Как уже упоминалось, вся помощь, идеи и т. Д. Будет принята с благодарностью. Если вам нужна дополнительная информация, я, безусловно, рад вам помочь.

...