我买了一些信标,然后按照一些教程开始玩它们。 我现在有一点问题,用下面的代码我可以成功地改变我的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()
}
}
}
}
答案 0 :(得分:1)
只要你附近有一个信标,你的循环就会运行。可能还有其他方法,但我能想到的是使用简单的NSTimer。
在类
下面的项目顶部添加一个boolvar beaconEnabled : Bool = true
将您的代码更改为此类似内容。注意“beaconEnabled = true”和play()函数之后的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秒才能再次播放声音。