2015-02-10 88 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秒,才可以再次播放声音。