我有播放聲音,當用戶點擊導航欄上的回欄按鈕,這裏是代碼代碼:播放聲音時,按後退按鈕(不包括動畫)
@property(strong,nonatomic) SoundPlayer *soundPlayer;
- (IBAction)voltar:(id)sender{
[self.soundPlayer PlaySound:@"back" extension:@"mp3" loops:0];
[self.navigationController popViewControllerAnimated:YES];
}
我的代碼工作得非常好,但我有一個問題!我想在視圖消失時製作不同類型的動畫,爲此,我需要將popViewControllerAnimated設置爲否。
當我做這種事情時,我的播放器不播放聲音!但爲什麼?我認爲,因爲有動畫,視圖將會釋放並且聲音不會播放,當動畫播放時,聲音播放效果非常好,因爲必須有很短的延遲才能觀看場景。
我的最後一次嘗試是ViewWillDisappear
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[self.soundPlayer PlaySound:@"back" extension:@"mp3" loops:0];
}
這裏是我用來打發我的看法動畫:
-(void)setAnimation{
CATransition* transition = [CATransition animation];
transition.duration = 0.3;
transition.type = kCATransitionFade;
transition.subtype = kCATransitionFromTop;
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
}
我怎麼能解決這個問題?
解決方案
我能解決這個問題,創建視圖熄滅前,將睡我的代碼代碼:
[NSThread sleepForTimeInterval:0.1f];
我相信這是不是解決這個最專業的方式類似的東西,但...
解決方案2
嘿,我們可以使用一個回調時的過渡處理:d
-(void)setAnimation{
CATransition* transition = [CATransition animation];
transition.duration = 0.3;
transition.type = kCATransitionFade;
transition.subtype = kCATransitionFromTop;
transition.delegate = self;
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
[self.soundPlayer PlaySound:@"back" extension:@"mp3" loops:0];
}
嗯,我想這就是解決這個問題的最好方法和專業的方式(比睡眠的效果是傑裏 - 鑽機)
修正
嗯,我意識到這個代碼的一些測試,並看到animationDidStop不播放聲音,播放聲音的代碼是viewDidDisappear,但是爲什麼?
讓我們思考......當我在我的動畫中給委託給自己時,我的代碼在動畫停止時欠下代碼的執行,即使所有東西都從場景中取出(我認爲)。
但是在這個時候viewDidDisappear被稱爲...並執行歌曲。所以...所有我需要做的是給授人以我的動畫,並把聲音裏面viewDidDisappear和刪除方法animationDidStop(像一個bug,奇怪...)
你試過在不同的線程中播放聲音嗎? – zcui93
@ zcui93使用GDC?是的,我嘗試但不工作... – LettersBa
只需創建一個單身播放聲音。一位將負責處理這一切的經理。一些枚舉可能很好地指示播放什麼聲音。接下來,你可以控制如果在你還在播放某種聲音時播放另一個聲音,該怎麼辦......做這種事情的一般方法。 –