刚开始自学iOS开发
正在做一个练习,在MapView上放一个“showPins”button,点击这个button,会在地图上添加一个大头针(pins)
另外还有一个“showLocation”button,点击后显示用户当前位置我的代码如下:
/*点击showLocation button的处理*/
func showMyLoc(sender: UIButton) {
        locMngr.desiredAccuracy = kCLLocationAccuracyBest
        let authorizationStatus = CLLocationManager.authorizationStatus()
        
        if .NotDetermined == authorizationStatus {
            locMngr.requestWhenInUseAuthorization()
        }
        else if authorizationStatus == .AuthorizedAlways || authorizationStatus == .AuthorizedWhenInUse {
            locMngr.requestLocation()
            
            mymapView.showsUserLocation = true
            mymapView.showsScale = true
        }
    }/*delegate,显示用户当前位置*/
func locationManager(manager: CLLocationManager, didUpdateLocations locations:[CLLocation] ) {
        if let lastUserLocation = locations.last {
            let zoomedInCurrentLocation = MKCoordinateRegionMakeWithDistance(lastUserLocation.coordinate, 500, 500)
            
            mymapView.setRegion(zoomedInCurrentLocation, animated: true)
        }
    }/*点击showPins button的处理*/
func showMyPins(pinsBtn: UIButton) {
        if true == mymapView.showsUserLocation {
            mymapView.showsUserLocation = false
            mymapView.showsScale = false
        }        let myAnnotation = MKPointAnnotation()
        myAnnotation.title = "PinsTitle"
        myAnnotation.subtitle = "就是这里"
        myAnnotation.coordinate = 预先定义好的经纬度
        mymapView.addAnnotation(myAnnotation)
       let zoomedInCurrentLocation = MKCoordinateRegionMakeWithDistance(myAnnotation.coordinate, 5000, 5000)
        mymapView.setRegion(zoomedInCurrentLocation, animated: true)

    }/*delegate,返回要显示的Pin的MKPinAnnotationView对象*/
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView?  {
        if annotation.isKindOfClass(MKUserLocation) {
            return nil
        }
        
        var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier("Test") as? MKPinAnnotationView
        
        if pinView == nil {
            pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "Test")
            pinView!.canShowCallout = true
            pinView!.animatesDrop = true
            pinView!.pinTintColor = UIColor.purpleColor()
            let myAnnotation = MKPointAnnotation()
            myAnnotation.title = PinsTitle[PinsTitleIdx]
            myAnnotation.subtitle = "Test Pin"
            myAnnotation.coordinate = Postion[PinsTitleIdx]
            pinView!.annotation = myAnnotation
        }
        else {
            pinView!.annotation = annotation
        }
        
        return pinView
    }问题点:
1.先考虑上面代码中红色字部分不存在的情况:
程序运行起来后,如果先点击showLocation显示当前用户位置、然后再点击showPins的话,showPins对应的delegate:func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView?  没有被调用,地图上不显示大头针2.如果加上了红色字部分:
则showPins对应的delegate:func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView?  会被调用,地图上能显示大头针3.如果程序运行起来后,先点击showPins button,那么即使没有红色字部分代码,func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView?  也会被正常调用,地图上能正常显示大头针
现在不清楚这个setRegion对地图显示到底有什么影响,导致delegate不能被调用
官方文档里我目前没有找到相关说明
望大神们赐教
谢谢!