CLLocationManagerDelegate协议详解
代理方法:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
此方法iOS6.0以后被弃用,第一次定位的时候可以拿到相关的位置信息,如果用户不停止定位功能,每隔一段时间返回一条数据,newLocation最新获取到的定位信息,oldLocation上次定位的位置信息
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
此方法iOS6.0以后新增方法,当位置更新或者拿到位置信息的时候都会调用这个方法;manager生成更新事件的位置管理器对象,locations 这个代表更新的locaiton对象数据,为什么是数组呐,因为定位的时候有可能延迟调用该方法或者拿到了多个位置的对象,但是这个数组中的对象的排列顺序是有序的,最后一个对象是最新的对象。
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
此方法iOS3.0以上新增,manager生成更新事件的位置管理器对象,newHeading设备的真实方向,当获取新的设备方向的时候调用
- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)manager
此方法告诉用户设备周边的磁场改变时或者有干扰设备干扰磁场,或者设备的角度变化时通过该方法来通知委托者。iOS3.0以后添加。
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
此方法iOS7.0以上新增,每当设备超过某个区域的边界时都会调用该方法。判断一下设备是在这个区域的外面还是里面,也就是state(CLRegionState)状态。
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
当定位发生错误时调用该方法
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
此方法iOS4.2以上新增,当app的定位权限修改以后调用该方法。
- (void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager
此方法iOS6.0以上新增,当设备位置没有变化时,iOS会暂停定位的交付工作,并用此方法告知开发者。
- (void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager
此方法iOS6.0以上新增,当iOS自动恢复位置更新交付时,调用该方法
- (void)locationManager:(CLLocationManager *)manager didFinishDeferredUpdatesWithError:(nullable NSError *)error
此方法iOS6.0以上新增,延迟更新交付定位位置时,调用
- (void)locationManager:(CLLocationManager *)manager didVisit:(CLVisit *)visit
此方法iOS8.0以上新增,必须调用:startMonitoringVisits 使用位置定位来判断用户是不是在某个期望的地理位置,如果在调用该方法。
区域监视及ibeacons基站
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
此方法iOS7.0以上新增,当进入iBeacon基站,基站位置变化时,会调用该方法。
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
此方法iOS4.0以上新增,当设备进入一个iBeacon区域时,会调用该方法,速度很快
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
此方法iOS4.0以上新增,当设备离开一个iBeacon区域时,会调用该方法,此方法有30秒的延迟
- (void)locationManager:(CLLocationManager *)manager rangingBeaconsDidFailForRegion:(CLBeaconRegion *)region withError:(NSError *)error
此方法iOS7.0以上新增, startRangingBeaconsInRegion 当一个区域的信号发生错误或Ranging模式检测附近的Beacons基站失败,调用该方法
- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(nullable CLRegion *)region withError:(NSError *)error
此方法iOS4.0以上新增, startMonitoringForRegion 当一个区域的信号发生错误或Monitoring模式检测附近的Beacons基站失败,调用该方法
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region
此方法iOS5.0以上新增,当一个新区域的检测成功启用时调用。
参考:
Apple官方文档
iOS8区域定位CLVisit的了解
CLLocationManager didVisit not working
Apple iBeacons