8、指南针小例子
class ViewController: UIViewController {
@IBOutlet weak var mImageView: UIImageView!
lazy var locateM : CLLocationManager = {
let locate = CLLocationManager()
locate.delegate = self
locate.requestAlwaysAuthorization()
if #available(iOS 9.0, *) {
locate.allowsBackgroundLocationUpdates = true
}
return locate
}()
override func viewDidLoad() {
super.viewDidLoad()
if(CLLocationManager.headingAvailable()){
self.locateM.startUpdatingHeading()
}else{
print("当前磁力计有问题")
}
}
}
extension ViewController : CLLocationManagerDelegate{
func locationManager(manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
//1.拿到当前设备对正朝向的角度
let angle = newHeading.magneticHeading
//2.把角度转换成弧度
let hudu = CGFloat(angle / 180 * M_PI)
//3.反向旋转照片
UIView.animateWithDuration(0.5) {
self.mImageView.transform = CGAffineTransformMakeRotation(-hudu)
}
}
}
9、区域的监听
class ViewController: UIViewController {
lazy var locateM : CLLocationManager = {
let locate = CLLocationManager()
locate.delegate = self
locate.requestAlwaysAuthorization()
if #available(iOS 9.0, *) {
locate.allowsBackgroundLocationUpdates = true
}
return locate
}()
override func viewDidLoad() {
super.viewDidLoad()
//首先应该判断当前是否可以监听某个区域
if CLLocationManager.isMonitoringAvailableForClass(CLCircularRegion){
//1.创建区域
let center = CLLocationCoordinate2DMake(21.123, 121.345)
var distance : CLLocationDistance = 1000
//限制监听的范围不能超过最大的范围
if distance < locateM.maximumRegionMonitoringDistance{
distance = locateM.maximumRegionMonitoringDistance
}
let region = CLCircularRegion(center: center, radius: distance, identifier: "xiaoxiao")
//2.监听区域
self.locateM.startMonitoringForRegion(region)
//3.判断当前状态是否是在区域内还是区域外,
//在`didDetermineState`代理方法中获得结果
self.locateM.requestStateForRegion(region)
}
}
}
extension ViewController : CLLocationManagerDelegate{
func locationManager(manager: CLLocationManager, didEnterRegion region: CLRegion) {
print("进入了区域"+region.identifier)
}
func locationManager(manager: CLLocationManager, didExitRegion region: CLRegion) {
print("出了区域"+region.identifier)
}
func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) {
//获取刚开始是否在区域内或者区域外
if region.identifier == "xiaoxiao"{
switch state {
case .Inside:
print("已经是区域内的")
case .Outside:
print("没有在区域内")
case .Unknown:
print("不清楚")
}
}
}
}
10、地理编码与反地理编码
地理编码










