2015-02-10 126 views
0

我買了一些燈塔,並開始跟着他們玩一些教程。 我現在有一個小問題,用下面的代碼我可以成功地改變我的iPhone的背景顏色,但聲音(3分鐘的MP3)在幾秒鐘後循環。Swift - 在燈塔附近播放聲音

如何修改我的代碼以繼續?

func locationManager(manager: CLLocationManager!, didRangeBeacons beacons: [AnyObject]!, inRegion region: CLBeaconRegion!) { 

    let knownBeacon = beacons.filter{ $0.proximity != CLProximity.Unknown } 
    if knownBeacon.count > 0 { 
     let nearestBeacon = knownBeacon[0] as CLBeacon 
     self.view.backgroundColor = self.colors[nearestBeacon.minor.integerValue] 

     if nearestBeacon.minor.integerValue == 15879 { 
      audioPlayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: path!), fileTypeHint: "mp3", error: nil) 
      if let sound = audioPlayer { 
       sound.prepareToPlay() 
       sound.play() 
      } 
     } 
    } 
} 
+0

只要你有你的燈塔附近,循環運行。您需要添加一些邏輯,以便在可以再次調用之前等待,只要您需要。 – MXV 2015-02-10 22:57:14

+0

謝謝。你能提供一個代碼示例嗎? – Mark 2015-02-10 23:01:17

回答

1

只要附近有燈塔,您的環路就會運行。可能還有其他的方法,但我可以想到的是使用簡單的NSTimer。

在項目的頂部添加一個bool

var beaconEnabled : Bool = true 
類下面

更改您的代碼是這樣的。在play()函數之後注意「beaconEnabled = true」和NSTimer。將300秒改爲任何你需要的。

func locationManager(manager: CLLocationManager!, didRangeBeacons beacons: [AnyObject]!, inRegion region: CLBeaconRegion!) { 

    if beaconEnabled { 

     let knownBeacon = beacons.filter{ $0.proximity != CLProximity.Unknown } 
     if knownBeacon.count > 0 { 
      let nearestBeacon = knownBeacon[0] as CLBeacon 
      self.view.backgroundColor = self.colors[nearestBeacon.minor.integerValue] 

      if nearestBeacon.minor.integerValue == 15879 { 
       audioPlayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: path!), fileTypeHint: "mp3", error: nil) 
       if let sound = audioPlayer { 
        sound.prepareToPlay() 
        sound.play() 
        beaconEnabled = false 
        NSTimer.scheduledTimerWithTimeInterval(300.0, target: self, selector: Selector("enableBeacon"), userInfo: nil, repeats: false) 
       } 
      } 
     } 
    } 
} 

然後加入這項功能,讓您的烽火再次

func enableBeacon() { 
    beaconEnabled = true 
} 

這將等待300秒,纔可以再次播放聲音。