[英]animateWithDuration play sound doesn't repeat
我有一個用animateWithDuration和setAnimationRepeatCount()
動畫的脈動矩形。
我正在嘗試在動畫塊中添加聲音效果,而女巫正在同步“單擊”。 但是聲音效果只播放一次。 我在任何地方都找不到任何提示。
UIView.animateWithDuration(0.5,
delay: 0,
options: UIViewAnimationOptions.AllowUserInteraction | UIViewAnimationOptions.CurveEaseOut | UIViewAnimationOptions.Repeat,
animations: {
UIView.setAnimationRepeatCount(4)
self.audioPlayer.play()
self.img_MotronomLight.alpha = 0.1
}, completion: nil)
聲音效果應該播放四次,但不能播放四次。
音頻實現:
//global:
var metronomClickSample = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("metronomeClick", ofType: "mp3")!)
var audioPlayer = AVAudioPlayer()
override func viewDidLoad() {
super.viewDidLoad()
audioPlayer = AVAudioPlayer(contentsOfURL: metronomClickSample, error: nil)
audioPlayer.prepareToPlay()
....
}
@IBAction func act_toggleStartTapped(sender: AnyObject) {
....
UIView.animateWithDuration(....
animations: {
UIView.setAnimationRepeatCount(4)
self.audioPlayer.play()
self.img_MotronomLight.alpha = 0.1
}, completion: nil)
}
提供了UIViewAnimationOptions.Repeat
選項不會導致動畫塊反復調用。 在CoreAnimation
級別上重復動畫。 如果在動畫塊中放置一個斷點,則會注意到該斷點僅執行一次。
如果您希望動畫與聲音一起循環執行,請創建一個重復的NSTimer
並從那里調用動畫/聲音。 請記住,計時器將保留目標,因此不要忘記使計時器無效以防止保留周期。
編輯:下面添加了實現
首先,假設我們有一個名為timer
的實例變量,我們將需要創建timer
。 這可以在viewDidLoad:
或視圖的init
方法中完成。 初始化后,我們計划通過運行循環執行,否則將不會重復觸發。
self.timesFired = 0
self.timer = NSTimer(timeInterval: 0.5, target: self, selector:"timerDidFire:", userInfo: nil, repeats: true)
if let timer = self.timer {
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode)
}
以下是計時器每間隔(在這種情況下為0.5秒)觸發的方法。 在這里,您可以運行動畫和音頻播放。 請注意, UIViewAnimationOptions.Repeat
選項已刪除,因為計時器現在負責處理重復的動畫和音頻。 如果僅定時器觸發特定次數,則可以添加實例變量來跟蹤觸發的時間,如果計數高於閾值,則使定時器無效。
func timerDidFire(timer: NSTimer) {
/*
* If limited number of repeats is required
* and assuming there's an instance variable
* called `timesFired`
*/
if self.timesFired > 5 {
if let timer = self.timer {
timer.invalidate()
}
self.timer = nil
return
}
++self.timesFired
self.audioPlayer.play()
var options = UIViewAnimationOptions.AllowUserInteraction | UIViewAnimationOptions.CurveEaseOut;
UIView.animateWithDuration(0.5, delay: 0, options: options, animations: {
self.img_MotronomLight.alpha = 0.1
}, completion: nil)
}
在沒有看到音頻播放器的實現的情況下,我可以想到的一些事情包括:
音頻文件太長,可能在文件末尾沒有聲音,因此它沒有播放文件中包含聲音的第一部分
每次都需要將音頻文件設置為文件的開頭(其他3次可能只是播放文件的末尾而導致沒有音頻輸出)
動畫發生得很快,音頻沒有時間緩沖
希望這些建議可以幫助您縮小問題的范圍,但是在沒有看到播放器的實現的情況下,很難說出實際的問題是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.