Swift MkMapView로 지도 응용 프로그램 만들기(04) - 추적 모드 전환(자체 제작 버튼)

기사 목록


Swift MkMapView로 지도 애플리케이션을 만들었습니다(기사 일람).

버튼에 붙인 그림을xcassets 포함


  • Image Set 추가
    AppIcon에서 흰색 공간을 마우스 오른쪽 버튼으로 클릭하고 New Image Set을 누릅니다.


  • 추가 Image Set에서 이미지 가져오기
    가져올 이미지를 드래그 앤 드롭합니다.


  • 롤링 모드, 위쪽, 위쪽, 위쪽 Image Set 추가
    각 Image Set을 추가하여 이름을 변경합니다.

  • View Controller에 버튼 추가


  • View Controller에 버튼 추가
    엔트(command+shift+l)에 Objects Library를 표시합니다.
    Buton을 storyboard의 장치에 끌어 놓습니다.


  • 버튼에 북쪽 이미지 설정하기
    Image 드롭다운 작업에서 Image Set을 선택할 수 있으므로 추적 모드의 초기 값으로 북상 이미지를 설정합니다.

  • 추가 버튼의 터치 감소 감지


  • 터치가 떨어질 때call의 함수를 정의합니다
    ViewController.swift: 터치가 떨어질 때Call의 함수를 정의합니다
    @IBAction func trackingBtnThouchDown(_ sender: AnyObject) {
        print("tracking Button Thouch Down!")
    }
    

  • 로그인 터치 하강 시Call 함수
    Buton Object를 마우스 오른쪽 버튼으로 클릭하여 Touch Down의 오른쪽에 있는 ○을 구동하고 View Controller를 구동합니다.
    출력을 Drack으로 정의하는 함수를 선택합니다.


  • ▶터치 스크린이 감지되었는지 PC 에뮬레이터로 확인할 준비
    터치 다운(1)에 정의된 함수는 Call입니다.

  • 터치 후 추적 모드 전환


  • 터치로 추적 모드 전환
    위로 → 위로 뒤집기 → 스크롤 모드 → 위로 뒤집기 순서로 전환합니다.
    ViewController.swift: 터치로 추적 모드 전환
    @IBAction func trackingBtnThouchDown(_ sender: AnyObject) {
        switch mapView.userTrackingMode {
        case .follow:
            mapView.userTrackingMode = .followWithHeading
            break
        case .followWithHeading:
            mapView.userTrackingMode = .none
            break
        default:
            mapView.userTrackingMode = .follow
            break
        }
    }
    

  • 현재 위치 업데이트 시 선택한 추적 모드에 따라 지도의 중심 위치를 변경합니다
    Swift MkMapView로 지도 애플리케이션을 만들었다(03) - 현재 위치를 지도의 중심으로에서 이루어진 처리를 변경합니다.
    ViewController.swift:변경 전
    // CLLocationManagerのdelegate:現在位置取得
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations:[CLLocation]) {
    
        mapView.userTrackingMode = .follow
    
    
    변경 전에 현재 위치가 업데이트되면 무조건 지도의 중심 위치를 북쪽으로 업데이트합니다.
    ViewController.swift:변경 후
    // CLLocationManagerのdelegate:現在位置取得
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations:[CLLocation]) {
    
        switch mapView.userTrackingMode {
        case .followWithHeading:
            mapView.userTrackingMode = .followWithHeading
            break
        case .follow:
            mapView.userTrackingMode = .follow
            break
        default:
            break
        }
    
    
    변경 후 hedding up이면 hedding up에 대응하고 no-up이면 no-up으로 업데이트합니다.
    맵뷰는 맵을 위로 또는 위로 스크롤할 때 표시됩니다.userTrackingMode가 말했다.무단으로 none으로 변경되었기 때문에 상술한 설치는 스크롤 중에도 현재 위치로 되돌아오지 않습니다.

  • 추적 모드에서 버튼 이미지 전환
    Storyboard의 UIButton과 Image Set에 등록된 이미지를 연결하는 변수를 정의합니다.
    ViewController.swift:변경 후
    class ViewController:   UIViewController,
                            CLLocationManagerDelegate,
                            UIGestureRecognizerDelegate {
    
        // storyboardのUIButtonを紐付ける変数
        @IBOutlet var trackingButton: UIButton!
    
        // Image Setに登録した画像を紐付ける変数
        let ImageHeadingUp :UIImage? = UIImage(named:"ImageHeadingUp")
        let ImageScrollMode :UIImage? = UIImage(named:"ImageScrollMode")
        let ImageNorthUp :UIImage? = UIImage(named:"ImageNorthUp")
    
    그런 다음 storyboard의 UIButton과 변수를 연결합니다.
    tracking Buton을 선택합니다.

    마지막(2)에 생성된 함수에 setImage()로 버튼 이미지를 변경하는 처리가 추가됩니다.
    ViewController.swift: 추가 처리 후
    @IBAction func trackingBtnThouchDown(_ sender: AnyObject) {
        switch mapView.userTrackingMode {
        case .follow:
            mapView.userTrackingMode = .followWithHeading
            trackingButton.setImage(ImageHeadingUp, for: .normal)
            break
        case .followWithHeading:
            mapView.userTrackingMode = .none
            trackingButton.setImage(ImageScrollMode, for: .normal)
            break
        default:
            mapView.userTrackingMode = .follow
            trackingButton.setImage(ImageNorthUp, for: .normal)
            break
        }
    }
    
  • 기사 목록


    Swift MkMapView로 지도 애플리케이션을 만들었습니다(기사 일람).

    좋은 웹페이지 즐겨찾기