2017-01-09 1 views
-5

먼저, 영역 맵보기를 설정하면 확대 및 축소가 올바르게 수행됩니다. 사용자 정의보기로 주석을 설정하려고 할 때 주석을 설정하면 확대/축소가 작동하지 않습니다. 사용자가 확대 한 후 자동으로 축소됩니다.신속하게 MKMapview가 작동하지 않습니다.

 func setRegion(){ 
     var newRegion = MKCoordinateRegion() 
     //  let str = String(format: "%.01f", maxLoc) 
     //  maxdist = Double(str)! 
     let subscriberData = (SubscriberConfigDBHandler.SubConfigDBSharedInstance).getSubscriberUserDetails() 

     let latLanCoords :CLLocation = CLLocation(latitude:subscriberData.busLat as Double , longitude:subscriberData.busLng as Double) 
     newRegion.center.latitude = latLanCoords.coordinate.latitude 
     newRegion.center.longitude = latLanCoords.coordinate.longitude 
     newRegion.span.latitudeDelta = 0.075 
     newRegion.span.longitudeDelta = 0.075 
     self.liveTrackingMapView.setRegion(newRegion, animated: false) 

    } 

    private var mapChangedFromUserInteraction = false 

    private func mapViewRegionDidChangeFromUserInteraction() -> Bool { 
     let view = self.liveTrackingMapView.subviews[0] 
     if let gestureRecognizers = view.gestureRecognizers { 
      for recognizer in gestureRecognizers { 
       if(recognizer.state == UIGestureRecognizerState.Began || recognizer.state == UIGestureRecognizerState.Ended) { 
        return true 
       } 
      } 
     } 
     return false 
    } 

    func mapView(mapView: MKMapView, regionWillChangeAnimated animated: Bool) { 
     mapChangedFromUserInteraction = mapViewRegionDidChangeFromUserInteraction() 

    } 

    func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) { 
     if (mapChangedFromUserInteraction) { 

     } 
    } 
    func tapGesture(sender :UITapGestureRecognizer) { 
     if sender != tap1 { 
      self.searchListTableView .removeFromSuperview() 
     } 
    } 
    func navigationButtonTapped() { 
     for controller in self.navigationController!.viewControllers as Array { 
      if controller.isKindOfClass(DashBoardViewController) { 
       self.navigationController?.popToViewController(controller as UIViewController, animated: false) 
      } 
     } 
    } 
    func getLiveLocationData() { 
     self.timer = NSTimer.scheduledTimerWithTimeInterval(30, target: self, selector: #selector(getRefreshedLocationData), userInfo: nil, repeats: true) 

    } 
    func getRefreshedLocationData(){ 
     self.isFrom = "liveTracking" 
     if vehicleMap.count > 0 { 
      (SubscriberLocationService.sharedSubLocationService).sublocationDelegate = self 
      (SubscriberLocationService.sharedSubLocationService).syncLastLocationForSub(carrierIds as String, numberMap: numberMap, vehicleMap: vehicleMap, personMap: personMap, routeMap: routeMap, timeMap: timeMap, selCarrier: selectedId as String, lastTime: lastLocTime) 
      //   if (selectedId.intValue) > 0{ 
      //    selCarLocList = (SubscriberLocationService.sharedSubLocationService).getLocSetForSelectedCarrier(selectedId as String, lastLocTime: lastLocTime) 
      //       } 
      //   else{ 
      //    (SubscriberLocationService.sharedSubLocationService).syncLastLocationForSubDetails(timeMap) 
      //    (SubscriberLocationService.sharedSubLocationService).sublocationDelegate = self 
      //   } 
     } 
    } 

    //subscriberlocser delegate method 
    func getSubsriberLiveLocation() { 
     (ShowLoader.showLoaderSharedInstance).hideLoadingHUD() 
     initializeMapData() 
    } 

    func initializeMapData(){ 
     // (ShowToast.showToastSharedInstance).showActivityWithMessage() 
     let subscriberData = (PMLAppCache.sharedPMLCache).getSubscriberConfig() 
     isSchool = ((GlobalConstants.ORGANIZATION_TYPE_SchoolBus == subscriberData.organizationType) || (GlobalConstants.ORGANIZATION_TYPE_OfficeBus == subscriberData.organizationType) || (GlobalConstants.ORGANIZATION_TYPE_Taxi == subscriberData.organizationType)) 
     isOffice = ((GlobalConstants.ORGANIZATION_TYPE_SchoolBus == subscriberData.organizationType) || (GlobalConstants.ORGANIZATION_TYPE_OfficeBus == subscriberData.organizationType) || (GlobalConstants.ORGANIZATION_TYPE_Taxi == subscriberData.organizationType)) 
     isTaxi = ((GlobalConstants.ORGANIZATION_TYPE_SchoolBus == subscriberData.organizationType) || (GlobalConstants.ORGANIZATION_TYPE_OfficeBus == subscriberData.organizationType) || (GlobalConstants.ORGANIZATION_TYPE_Taxi == subscriberData.organizationType)) 
     // InitializeActivityAsyncTask().execute(); 

      self.getInitialData() 


    } 
     func getInitialData() { 
     self.locList.removeAllObjects() 
     var data : SubscriberLocationDetails = SubscriberLocationDetails() 
     carrierIdList = (CodeTypeCodeValueService.sharedcodeTypecodeValService).getAllIdFromAppDB(CodeTypeConstants.CARRIER_CODES) as! NSArray 
     carrierIds = "" 
     for i in 0 ..< carrierIdList.count{ 
      if i == carrierIdList.count-1 { 
       carrierIds.appendString(carrierIdList[i] as! String) 
      }else if i != 0{ 
       carrierIds.appendString(carrierIdList[i] as! String) 
       carrierIds.appendString(",") 
      } 
     } 
     locList = (SubscriberLocationService.sharedSubLocationService).getLastLocDataForCarriers() as! NSMutableArray 
     (SubscriberLocationService.sharedSubLocationService).sublocationDelegate = self 
     let sortDiscripter = NSSortDescriptor(key:"vehicleDesc", ascending: true) 
     let sortedResults: NSArray = locList.sortedArrayUsingDescriptors([sortDiscripter]) 
     locList.removeAllObjects() 
     locList = sortedResults.mutableCopy() as! NSMutableArray 


     for i in 0 ..< locList.count{ 

      data = locList[i] as! SubscriberLocationDetails 
      key = data.carrierId! 
      numberMap.setObject(data.personPhone!, forKey: key) 
      vehicleMap.setObject(data.vehicleDesc!, forKey: key) 
      personMap.setObject(data.personDesc!, forKey: key) 
      routeMap.setObject(data.routeNumber!, forKey: key) 
      if i == 0 { 
       timeMap.setObject(data.createdTime!, forKey: data.carrierId!) 
      }else if(timeMap.objectForKey(data.carrierId!) !== NSNull() && ((data.createdTime?.longLongValue > timeMap.objectForKey(data.carrierId!)?.longLongValue))){ 
       timeMap.setObject(data.createdTime!, forKey: data.carrierId!) 
      } 
      if ((lastLocTime.isEqualToNumber(0)) || (lastLocTime.longLongValue < data.createdTime?.longLongValue)) { 
       lastLocTime = data.createdTime! 
      } 

     } 
     if isSchool { 
      let sortDiscripter = NSSortDescriptor(key:"vehicleDesc", ascending: true) 
      let sortedResults: NSArray = locList.sortedArrayUsingDescriptors([sortDiscripter]) 
      locList.removeAllObjects() 
      locList = sortedResults.mutableCopy() as! NSMutableArray 

     }else{ 
      let sortDiscripter = NSSortDescriptor(key:"personDesc", ascending: true) 
      let sortedResults: NSArray = locList.sortedArrayUsingDescriptors([sortDiscripter]) 
      locList.removeAllObjects() 
      locList = sortedResults.mutableCopy() as! NSMutableArray 

     } 
     if selectedId .intValue > 0 { 
      for i in 0 ..< locList.count { 
       let locData = locList[i] as! SubscriberLocationDetails 
       if (locData.carrierId == selectedId) { 
        let latLanCoords :CLLocation = CLLocation(latitude:locData.latitude as! Double , longitude:locData.longitude as! Double) 
        self.centerMapOnLocation(latLanCoords) 
        self.setSingleAnnotation(locData) 
        setButtonsForScrollview(locData.carrierId!) 
       } 
      } 
     }else{ 
      setTheAnnotations(locList) 
      self.setButtonsForScrollview("") 
     } 

    } 



    // 115.315482669664 
    // -175.179858047742 
    // 133.003988043541 
    // 133.168361358532 
    // 8.32069131099509 
    // 133.089068653276 
    // -21.9573563525713 
    /*------- set Annotations **/ 
    func setTheAnnotations(annotArray : NSArray) { 
//  dispatch_async(dispatch_get_main_queue()) { 
      self.selectedId = "" 
      self.degreeMap.removeAllObjects() 
      //var oldLoc = CLLocation() 
      var newLoc = CLLocation() 
      //  let str = String(format: "%.01f", maxLoc) 
      //  maxdist = Double(str)! 
         for annotation in self.liveTrackingMapView.annotations as [MKAnnotation] { 
       self.liveTrackingMapView.removeAnnotation(annotation) 
      } 
//  print(annotArray.count) 
      for i in 0 ..< annotArray.count{ 
       let subLocData = annotArray[i] as! SubscriberLocationDetails 
       let initialLocation :CLLocation = CLLocation(latitude:subLocData.latitude as! Double , longitude:subLocData.longitude as! Double) 
       // let distanceInMeters = userloc.distanceFromLocation(initialLocation) 
       //if distanceInMeters > 0 { 
       let subConfig = (SubscriberConfigDBHandler.SubConfigDBSharedInstance).getSubscriberUserDetails() 

       let subscriberLocation = CLLocation(latitude: subConfig.busLat as Double , longitude : subConfig.busLng as Double) 
       newLoc = initialLocation 
       var locationArray = NSArray() 
       let placesData = NSUserDefaults.standardUserDefaults().objectForKey("myList") as? NSData 
       if let placesData = placesData { 
        locationArray = (NSKeyedUnarchiver.unarchiveObjectWithData(placesData) as? [SubscriberLocationDetails])! 
       } 
       self.key = subLocData.vehicleDesc! 
       if (UiUtils.uiUtilsSharedInstance).getUserDefaultsBool(GlobalConstants.FIRST_TIME_GET_BEARING){ 
        self.busDegree = self.getBearingBetweenTwoPoints1(subscriberLocation, point2: newLoc) 
        self.degreeMap.setObject(self.busDegree, forKey: self.key) 
        self.lastLocationArray.addObject(subLocData) 
        if i == self.locList.count - 1 { 
         (UiUtils.uiUtilsSharedInstance).updateUserDefaultsBool(GlobalConstants.FIRST_TIME_GET_BEARING, value: false) 

         let placesData1 = NSKeyedArchiver.archivedDataWithRootObject(self.lastLocationArray) 
         self.lastLocationArray.removeAllObjects() 
         NSUserDefaults.standardUserDefaults().setObject(placesData1, forKey: "myList") 
        } 
       }else{ 
        for i in 0 ..< locationArray.count{ 
         let locData = locationArray[i] as! SubscriberLocationDetails 
         if locData.carrierId == subLocData.carrierId { 
          let oldLocation = CLLocation(latitude:locData.latitude as! Double, longitude : locData.longitude as! Double) 
          self.busDegree = self.getBearingBetweenTwoPoints1(oldLocation, point2: newLoc) 
          self.degreeMap.setObject(self.busDegree, forKey: self.key) 
         } 
         if i == locationArray.count - 1 { 
          let placesData1 = NSKeyedArchiver.archivedDataWithRootObject(self.lastLocationArray) 
          self.lastLocationArray.removeAllObjects() 
          NSUserDefaults.standardUserDefaults().setObject(placesData1, forKey: "myList") 
         } 

        } 

       } 

       self.setAnnotationView(subLocData, coords: newLoc) 
      } 
//  } 
     //oldLoc = newLoc 
     //    let sourceIndex = oldLoc 
     //    let destinationIndex = newLoc 
     // 
     //    let c1 = sourceIndex.coordinate 
     //    let c2 = destinationIndex.coordinate 
     //    var a = [c1, c2] 
     //    let polyline = MKPolyline(coordinates: &a, count: a.count) 
     //    liveTrackingMapView.addOverlay(polyline) 



    } 

    func setAnnotationView(data : SubscriberLocationDetails ,coords :CLLocation) { 
     let locationCoords = CLLocationCoordinate2DMake(coords.coordinate.latitude, coords.coordinate.longitude) 
     pointAnnotation = CustomPointAnnotation(location: locationCoords) 
     if isSchool { 
      ImageNameStr = "school_bus_marker.png" 
     }else if isOffice{ 
      ImageNameStr = "office_bus_marker.png" 
     }else if isTaxi{ 
      ImageNameStr = "car_marker.png" 
     }else{ 
      ImageNameStr = "onfield_component_default.png" 
     } 

     pointAnnotation.coordinate = coords.coordinate 
     if personMap.valueForKey(data.carrierId!) as? String == "" { 
      pointAnnotation.title = "NA" 
     }else{ 
      pointAnnotation.title = personMap.valueForKey(data.carrierId!) as? String 
     } 
     pointAnnotation.subtitle = data.vehicleDesc 
     pinAnnotationView = MKPinAnnotationView(annotation: pointAnnotation, reuseIdentifier: reuseIdentifier) 
     self.liveTrackingMapView.addAnnotation(self.pinAnnotationView.annotation!) 
    } 
+0

지도 로딩 방법의 구문과 단계를 자세히 관찰 해 보셨습니까? –

+1

일부 코드를 입력하십시오. 그렇지 않으면 기본적으로이 문제를 해결할 수있는 방법이 없습니다. –

+0

지역, 위치 좌표 및 위임을 올바르게 설정했지만 일부 위치를 확대하려고하면 축소됩니다. – Jalindar

답변

0

당신의 mapKit보기 축소 유지하는 이유는 함수 아래라는 것을하고 해당 지역을 '리셋'유지 :

아래 내 코드를 참조하십시오.

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     guard let location = locations.last as CLLocation? else { return } 

     let userCenter = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude) 
     let region = MKCoordinateRegion(center: userCenter, span: MKCoordinateSpan(latitudeDelta: 180, longitudeDelta: 180)) 
     nameOfMapKitView.setRegion(region, animated: true) // THIS CAUSES MAP TO ZOOM OUT AGAIN 

} 

편집 : 다른 사람이 말했듯이 우리가 오류를 "추측"할 필요가 없습니다, 다행히 내가 그래서이 무엇인지 꽤 확신이 다른 날에 실행, 질문과 코드를 게시하시기 바랍니다 지도보기에 문제가 있습니다.

+0

나는이 위임 메서드를 사용하지 않는 이유가 무엇인지 사용자 위치를 사용하지 않는다. – Jalindar

관련 문제