[MapKit] MKMap Snapshorter를 통해 맵의 스냅샷을 획득합니다.

7196 단어 MapKitiOS

이것은 무엇이냐


iOS 7에 추가된 MKMapSnapshotter를 사용하여 지도 캡처(이미지)를 획득하는 방법을 기록합니다.

스냅샷을 가져오는 이유


사용자가 지도를 조작할 필요가 없는 상황에서 정지화로 표시하면 부하를 억제할 수 있다.
특히 UITableView의 셀에 여러 지도가 표시된 경우 효과를 발휘한다.

운영 환경

  • Xcode 9
  • Swift 4
  • 설치 방법


    우선 아래의 샘플 코드를 실행해 보세요.
    let coordinate = CLLocationCoordinate2DMake(37.331652997806785, -122.03072304117417)
    let span = MKCoordinateSpanMake(0.003, 0.003)
    
    let options = MKMapSnapshotOptions()
    options.size = CGSize(width: 300, height: 300)
    options.region = MKCoordinateRegion(center: coordinate, span: span)
    options.scale = UIScreen.main.scale
    options.mapType = .standard
    
    let snapshotter = MKMapSnapshotter(options: options)
    snapshotter.start(completionHandler: {(snapshot, error) in
        let image = snapshot?.image
    })
    

    실행 결과

    image에 다음 이미지가 설정되어 있습니다.

    다음은 원본 코드의 내용을 설명한다.

    해설


    먼저 지도의 중심점(위도와 경도)과 표시할 범위를 설정합니다.
    let coordinate = CLLocationCoordinate2DMake(37.331652997806785, -122.03072304117417)
    let span = MKCoordinateSpanMake(0.003, 0.003)
    
    그리고 MKMapSnapshotOptions를 사용하여 캡처의 크기, 해상도, 지도 유형(항공사진 등)을 설정합니다.
    let options = MKMapSnapshotOptions()
    options.size = CGSize(width: 300, height: 300)
    options.region = MKCoordinateRegion(center: coordinate, span: span)
    options.scale = UIScreen.main.scale
    options.mapType = .standard
    
    마지막으로 MKMapSnapshotterstart() 방법을 실행하여 캡처를 비동기적으로 가져옵니다.
    let snapshotter = MKMapSnapshotter(options: options)
    snapshotter.start(completionHandler: {(snapshot, error) in
        let image = snapshot?.image
    })
    

    보태다

    MKMapSnapshotOptionsshowsBuildings속성에 따라 지도상의 건축물과 POI의 표시와 숨김을 전환할 수 있습니다.

    ▲ 어떤 내용도 표시하지 않는 예시

    링크

  • Putting Map Kit in Perspective - WWDC 2013 - Videos - Apple Developer

  • Swift 3 Add custom annotation pin to MKMapSnapShotter snapshot - Stack Overflow-showsPointsOfInterest에 나온 핀도 스냅숏에 수납하고 싶을 때 이 Q&A를 참고하세요.
  • 좋은 웹페이지 즐겨찾기