앱을 처음 시작할 때 화면 사용법을 알려주는 코치 마크 구현

코치마크란?



자주 앱을 처음 시작할 때 화면의 기능을 소개해주는 것입니다.



이런 느낌에 사용법을 가르쳐줍니다.

기능이 많을수록 UI가 복잡해집니다.
그렇다면 처음 만지는 사용자는 당황 할 수 있습니다.
가능한 한, 설명하지 않아도 취급할 수 있도록(듯이) 설계하는 것이 최선인 것입니다만, 그렇게는 말할 수 없는 것도 있으니까요.
코치 마크를 붙이면 처음 사용하는 사용자라도 어떤 버튼을 누르면 무슨 일이 일어나는지 알기 쉬워집니다.

라이브러리 설치



여러가지 있습니다만 ephread/Instructions 를 사용해 보았습니다.

Podfile
pod 'Instructions'
$ pod install
Podfile에 라이브러리를 추가하고 터미널에서 pod install를 실행하십시오.
이것으로 설치가 끝납니다.

구현



이제 라이브러리를 사용하여 코치 마크를 표시해 봅시다.
CoachMarksController 의 인스턴스를 만들고 dataSource 를 설정합니다.
이번은 전부 ViewController 로 가고 있습니다만, 다른 클래스로 분할해도 좋다고 생각합니다.

ViewController.swift
import Instructions

class ViewController: UIViewController, CoachMarksControllerDataSource {
    var coachController = CoachMarksController()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.coachController.dataSource = self
    }
}

다음에 CoachMarksControllerDataSource 의 메소드를 구현합니다.
최소한 필요한 것은
  • 마크의 수를 돌려줍니다 numberOfCoachMarks(for coachMarksController: CoachMarksController)
  • 마크의 좌표를 설정한다 coachMarksController(_ coachMarksController: CoachMarksController, coachMarkAt index: Int)
  • 표시 할 문장 설정 coachMarksController(_ coachMarksController: CoachMarksController, coachMarkViewsAt index: Int, madeFrom coachMark: CoachMark)

  • 그렇죠?

    ViewController.swift
    class ViewController: UIViewController, CoachMarksControllerDataSource {
        ...
    
        // コーチマークを表示したいUIView
        @IBOutlet weak var firstButton: UIButton!
        @IBOutlet weak var secondButton: UIButton!
    
        // マークのメッセージ配列
        private messages = ["First Message", "Second Message"]
    
        // UIViewを配列にしておきます
        private views = [self.firstButton, self.secondButton]
    
        func coachMarksController(_ coachMarksController: CoachMarksController, coachMarkViewsAt index: Int, madeFrom coachMark: CoachMark) -> (bodyView: CoachMarkBodyView, arrowView: CoachMarkArrowView?) {
            let coachViews = coachMarksController.helper.makeDefaultCoachViews(withArrow: true, arrowOrientation: coachMark.arrowOrientation)
            coachViews.bodyView.hintLabel.text = self.messages[index] // ここで文章を設定
            coachViews.bodyView.nextLabel.text = "了解" // 「次へ」などの文章
    
            return (bodyView: coachViews.bodyView, arrowView: coachViews.arrowView)
        }
    
        func numberOfCoachMarks(for coachMarksController: CoachMarksController) -> Int {
            return self.messages.count
        }
    
        func coachMarksController(_ coachMarksController: CoachMarksController, coachMarkAt index: Int) -> CoachMark {
            return self.coachController.helper.makeCoachMark(for: self.views[index], pointOfInterest: nil, cutoutPathMaker: nil)
            // for: にUIViewを指定すれば、マークがそのViewに対応します
        }
    }
    

    마지막으로 CoachMarksControllerstartstop 를 호출합니다.

    ViewController.swift
    class ViewController: UIViewController, CoachMarksControllerDataSource {
        ...
    
        override func viewDidAppear(animated: Bool) {
            super.viewDidAppear(animated)
    
            self.coachMarksController.start(in: .window(over: self))
        }
    
        override func viewWillDisappear(animated: Bool) {
            super.viewWillDisappear(animated)
    
            self.coachMarksController.stop(immediately: true)
        }
    }
    

    동작 확인





    실행하면 이런 느낌이 듭니다. (문장이나 화면이 상기의 코드와는 다른 것은 양해 바랍니다)

    기본적으로 오버레이 색상은 흰색처럼 보입니다.
    개인적으로는 흑이 좋아할까.
    coachMarksController.overlay 에서 색상을 변경할 수 있습니다.
    self.coachController.overlay.color = UIColor.init(hex: "000000", alpha: 0.3)
    



    비고



    지금은 화면을 열 때마다 코치 마크가 표시되므로 UserDefaults 등을 사용하여 처음 시작할지 여부를 확인하는 것이 좋습니다.

    좋은 웹페이지 즐겨찾기