我买了一些信标,并根据一些教程开始使用它们。我现在有一个小问题,使用以下代码,我可以成功地更改iPhone的背景色,但声音(3分钟的MP3)在几秒钟后循环播放。
如何修改代码以继续?
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()
}
}
}
}
只要附近有信标,循环就会运行。可能还有其他方法,但我能想到的是使用一个简单的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秒才能再次播放声音。