AVSpeechSynthesizer — не останавливается при использовании AVSpeechBoundaryImmediate

У меня есть два контроллера представления. Один и Два.

  1. На oneViewController есть кнопка, которая вызывает TwoViewController с помощью раскадровки - работает нормально
  2. На TwoViewController есть кнопка, которая читает некоторый текст с помощью кнопки (кнопка прослушивания) - работает нормально
  3. На TwoViewController есть кнопка «Назад», которая возвращает вас к oneViewController.

Проблема:

если дважды нажать кнопку «Прослушать» и нажать кнопку «Назад», контроллер представления переходит от «Два» к «Один», но речь все еще продолжается в фоновом режиме. Может ли кто-нибудь помочь со способом остановить речь?

Код на TwoViewController:

AVSpeechSynthesizer *synth;

-(IBAction) Back:(id)sender
{
    [_synth stopSpeakingAtBoundary: AVSpeechBoundaryImmediate]; --not working
    [self dismissViewControllerAnimated:YES completion:nil]; - working fine.
}

-(void) viewDidDisappear:(BOOL)animated
{
    [_synth stopSpeakingAtBoundary:AVSpeechBoundaryImmediate]; --not working
    [self dismissViewControllerAnimated:YES completion:nil];
}

-(IBAction)listenButton:(id)sender
{
    AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@"I am running a test."];
    [utterance setRate:0.18f];
    _synth=[[AVSpeechSynthesizer alloc] init];
    [_synth speakUtterance:utterance];

}

Примечание. Проблема не возникает, если нажать кнопку «Прослушать» один раз, а затем нажать кнопку «Назад». Проблема возникает только в том случае, если кнопка «Прослушать» нажата несколько раз, а затем нажата кнопка «Назад».


person creekbat    schedule 23.08.2014    source источник


Ответы (1)


Попробуйте это для паузы, возобновления и остановки

-(void)stopSpeechReading
{
    if([synthesize isSpeaking]) {
        NSLog(@"Reading has been stopped");
        [synthesize stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];
        AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@""];
        [synthesize speakUtterance:utterance];
        [synthesize stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];
    }
}

-(void)pauseSpeechReading
{
    if([synthesize isSpeaking]) {
        NSLog(@"Reading paused");
        [synthesize pauseSpeakingAtBoundary:AVSpeechBoundaryImmediate];
        AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@""];
        [synthesize speakUtterance:utterance];
        [synthesize pauseSpeakingAtBoundary:AVSpeechBoundaryImmediate];
    }
}

-(void)resumeSpeechReading
{
     NSLog(@"Reading resumed");
    [synthesize continueSpeaking];
}
person abdul sathar    schedule 11.12.2014