У меня есть аудиопроигрыватель, работающий в одном представлении, и таймер, воспроизводимый в другом представлении, и я хочу, чтобы аудиофайл запускался, чтобы остановить воспроизведение, когда «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];
}
}
Как уже упоминалось, вся помощь, идеи и т. Д. Будет принята с благодарностью. Если вам нужна дополнительная информация, я, безусловно, рад вам помочь.