我正在尝试学习如何将位置编入应用程序,而这整段代码真的让我与locationManager和委托人混淆了。当你声明一个名为locationManager的函数时,我根本不知道发生了什么。你正在定义这个函数,locationManager,对吗?有2个参数。究竟是什么调用这个locationManager?在浏览Complete iOS Developer Course时,他会获取此locationManager代码段并复制粘贴它,而不解释复制和粘贴时您正在执行的操作背后的原理。是否有一些代码行调用“locationManager(...)”?如果是这样,这会发生在哪里?我的大脑一直在想,如果它是一个继承自超类CLLocationManagerDelegate的函数,你不是必须重写它才能让它工作吗?你能否对代表们的工作方式有一些直觉?
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet var myMap : MKMapView!
var manager:CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// Core Location
manager = CLLocationManager()
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()
}
func locationManager(manager:CLLocationManager, didUpdateLocations locations:[AnyObject]) {
var userLocation:CLLocation = locations[0] as CLLocation
var latitude:CLLocationDegrees = userLocation.coordinate.latitude
var longitude:CLLocationDegrees = userLocation.coordinate.longitude
var latDelta:CLLocationDegrees = 0.01
var lonDelta:CLLocationDegrees = 0.01
var span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta)
var location:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)
var region:MKCoordinateRegion = MKCoordinateRegionMake(location, span)
myMap.setRegion(region, animated: true)
}
func locationManager(manager:CLLocationManager, didFailWithError error:NSError)
{
println(error)
}
非常感谢你的帮助!
答案 0 :(得分:1)
CLLocationManagerDelegate
协议中定义的这些委托方法由您实例化并在CLLocationManager
变量中引用的manager
对象调用。因此,您已经实例化了CLLocationManager
对象,您已经要求它在有位置更新时通知您,并通过调用您已实现的这些委托方法来实现。
你说:
我的大脑一直在想,如果它是一个继承自超类
CLLocationManagerDelegate
的函数,你是不是必须重写它才能让它工作?
CLLocationManagerDelegate
不是一个类。这是一个“协议”。它定义了delegate
对象(在本例中,您的视图控制器)可能/应该实现的功能。所以,没有什么可以覆盖的。