2016-03-25 15 views
0

AVAudioPlayer kullanarak bir şarkı çalıyorum ve şarkı 30 saniyelik işaretine ulaştığında, bir eylemi tetiklemek istiyorum (bir işlevi çağırmak). Ben şarkı böyle bittiğinde bunu nasıl biliyorum:Swift: Şarkının belli bir bölümünde hareket (avaudioplayer)

func play(url: NSURL) { 
let item = AVPlayerItem(URL: url) 

NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerDidFinishPlaying:", name: AVPlayerItemDidPlayToEndTimeNotification, object: item) 

let player = AVPlayer(playerItem: item) 
player.play() 
} 

func playerDidFinishPlaying(note: NSNotification) { 
// Your code here 
} 

Ancak, ben şarkı 30 saniyede isabet zaman benzer bir şey ama istiyoruz. Mümkün mü? Şu anda NSTimers kullanmak zorundayım ama güvenilir değil.

Teşekkür ederiz!

cevap

0

Bunun pahalı olup olmadığından emin değil, ancak çok iyi çalışıyor.

var dpLink : CADisplayLink? 
dpLink = CADisplayLink(target: self, selector: "checkForStrobe") 
dpLink?.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes) 

Sonra ben sadece benim checkForStrobe fonksiyonu içinde bu koymak: Bu benim sorunu çözüldü

func checkForStrobe(){ 
    //This is being called repeatedly checking if its time to run strobe 
    if(backgroundAudio.currentTime >= 38.5 && backgroundAudio.currentTime <= 38.6){ 
     runStrobe() 
    } 
    if(backgroundAudio.currentTime >= 63.5 && backgroundAudio.currentTime <= 63.6){ 
     stopStrobe() 
    } 
    if(backgroundAudio.currentTime >= 125.0 && backgroundAudio.currentTime <= 125.1){ 
     runStrobe() 
    } 
    if(backgroundAudio.currentTime >= 150.0 && backgroundAudio.currentTime <= 150.1){ 
     stopStrobe() 
    } 
} 

İlk ben "checkForStrobe" çok çağıran bir döngü çalıştırın.