2016-09-13 3 views
1

지도에서 일부 특수 효과를 만들려고합니다. 그러나 주위를 둘러 볼 수는 없습니다. 내가 사용하는 코드는지도에 특수 효과를 추가하는 Swift

// Names 
names = ["Ben", "Big", "Hawk", "Enot", "Wiltons", "Scott's", "The Laughing"] 

     // Latitudes, Longitudes 
     coordinates = [ 
      [51.519066, -0.135200], 
      [51.513446, -0.125787], 
      [51.465314, -0.214795], 
      [51.507747, -0.139134], 
      [51.509878, -0.150952], 
      [51.501041, -0.104098], 
      [51.485411, -0.162042], 
      [51.513117, -0.142319] 
     ] 
+0

데이터 구조처럼 보입니다. 실제로지도보기에 특수 효과를 추가하려고 시도한 것은 무엇입니까? 지도보기는 어떻게 만듭니 까? – Losiowaty

+1

시도를 보여줘야합니다. 어떤지도를 사용하고 있습니까? – Larme

+0

mapview는 사용자 위치 (자신의 길을 만들었습니다 : https://www.youtube.com/watch?v=qrdIL44T6FQ)를 따르지만지도에 특수 효과로 넣고 싶습니다. 나는 문자열로 시도했지만 아무것도 할 수 없었다. var names : [String]! var 설명 : [문자열]! var 좌표 : [AnyObject]! var currentRestaurantIndex : Int = 0 var LocationManager = CLLocationManager() – Adam

답변

6

입니다. 실제로 많이 시도하지 않았습니다. 그러나 이것 좀보세요. addAnnotation 함수는 CLLocation 타입의 배열을 취하는데, 이것은 당신이 사용해야하는 것이다. CLLocation 객체를 초기화하려면 배열을 다음과 같이 만듭니다. 난 당신이 이미 등 작업 렌더링지도,지도보기 객체, 여기

let coords = [ CLLocation(latitude: xxxx, longitude: xxxx), 
    CLLocation(latitude: xxx, longitude: xxx), 
    CLLocation(latitude: xxx, longitude:xxx) 
    ]; 

이 가정은 그 배열을 할 수있는 기능이며, 각 요소를 순환 아직 렌더링되지 않은지도보기 (에 주석으로 추가합니다)

func addAnnotations(coords: [CLLocation]){ 
     for coord in coords{ 
      let CLLCoordType = CLLocationCoordinate2D(latitude: coord.coordinate.latitude, 
                 longitude: coord.coordinate.longitude); 
      let anno = MKPointAnnotation(); 
      anno.coordinate = CLLCoordType; 
      mapView.addAnnotation(anno); 
     } 

    } 

마지막으로, 당신은 새로운 주석이 추가는 자동으로 호출 방법 중 하나를 사용하도록 MKMapViewDelegate 대리자를 사용할 필요가, 그래서 우리는 대기하고 렌더링 할 수 있습니다. 주석을 한 번 추가하는 경우에는 필요하지 않지만 나중에 주석을 추가 할 수 있도록 추가해야하는 것이 좋습니다.

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
    if annotation is MKUserLocation{ 
     return nil; 
    }else{ 
     let pinIdent = "Pin"; 
     var pinView: MKPinAnnotationView; 
     if let dequeuedView = mapView.dequeueReusableAnnotationViewWithIdentifier(pinIdent) as? MKPinAnnotationView { 
      dequeuedView.annotation = annotation; 
      pinView = dequeuedView; 
     }else{ 
      pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: pinIdent); 

     } 
     return pinView; 
    } 
} 

이 코드를 추가하고 올바르게 작동한다고 가정하고 올바르게 프로젝트의 올바른 영역에 통합하십시오. 추가 질문이 있으면 의견을 말하십시오.

UPDATE :

이 사용 컨트롤러로 MKMapViewDelegate 프로토콜을 상속해야합니다.

실제로 addAnnotations으로 전화하고 ViewDidLoadcoords 배열을 전달하십시오. ViewDidLoad에 정의 할 수 있습니다.

mapView 메소드가 ViewDidLoad가 아니라 컨트롤러의 멤버인지 확인하십시오.

+0

코드를 사용하고 값을 올바른 값으로 변경했습니다. 하지만 (불변 가치 "coords"는 사용되지 않았습니다.) 내가 viewdidload에 첫 번째 코드를 넣는 것은 맞습니까? 아니면 절대적으로 손실됩니까? – Adam

+0

addAnnotation 함수를 호출하고 배열을 인수로 전달해야합니다. –

+0

나는 내 대답을 염두에 두어야 할 목록으로 업데이트 할 예정이며, 어떻게 진행되는지 말해 줄 것이다. –

관련 문제