我正在尝试使用Estimote Beacons构建演示应用。我希望应用程序在用户靠近信标时打开特定的viewcontroller。即时通讯使用performseguewithidentifier但是当应用程序启动时只打开第一个视图控制器,它代表范围内的第一个信标,当我靠近其他信标时它不会打开其他信标。它不知何故停止了其他信标的测距。 下面是我用于信标范围的代码:
func beaconManager(manager: AnyObject, didRangeBeacons beacons: [CLBeacon],
inRegion region: CLBeaconRegion) {
let knownBeacons = beacons.filter{ $0.proximity != CLProximity.Unknown}
if (knownBeacons.count > 0) {
let closestBeacon = knownBeacons [0] as CLBeacon
if(closestBeacon.minor.integerValue==50557){
performSegueWithIdentifier("VC1", sender: nil)
}
else if(closestBeacon.minor.integerValue==37890){
performSegueWithIdentifier("VC2", sender: nil)
}
else if(closestBeacon.minor.integerValue==18976){
performSegueWithIdentifier("VC3", sender: nil)
}
else {
self.view.backgroundColor = UIColor.brownColor()
}
答案 0 :(得分:0)
我还没有使用Estimote的自定义库,但我认为它与位置管理员类似。
在核心位置管理器中,如果您的应用程序在后台,当您第一次进入新的信标区域时会收到输入的区域通知,然后您只会获得几秒钟的测距信息。
如果您使用唯一的UUID和主要ID设置了您的区域但没有次要ID,那么具有该UUID和主要ID的所有信标都被视为同一区域的一部分,您将无法可靠地获得范围通知,因为具有不同次要ID的信标成为最近的信标。
如果您想同时处理范围内的多个信标并区分它们,您需要为每个信标的UUID,主要ID 和创建单独的信标区域次要身份证。
我不知道你是否面临这个问题,但可能是。