진행중인 프로젝트에 튜토리얼을 넣어보고 싶어 어떻게 넣을까 찾던 도중 좋은 '개발하는 정대리'님 유튜브에서 오픈소스를 소개시켜 주신 영상을 보고 작성한 글입니다.
오픈소스 깃허브 링크
https://github.com/ephread/Instructions#cocoapods
GitHub - ephread/Instructions: Create walkthroughs and guided tours (coach marks) in a simple way, with Swift.
Create walkthroughs and guided tours (coach marks) in a simple way, with Swift. - GitHub - ephread/Instructions: Create walkthroughs and guided tours (coach marks) in a simple way, with Swift.
github.com
Add customizable coach marks into your iOS project. Available for both iPhone and iPad.
다운로드 방법은 리드미에 적혀있습니다.
저는 코코아팟으로 다운받았는데, Swift Package Manager가 더 편리해용
Pod file 에 추가해줍니다. 저는 iOS 14.5 버전에서 사용하였습니다.
pod 'Instructions', '~> 2.1.0'
1. CoachMarksController() 선언하기
let coachMarksController = CoachMarksController()
2. CoachMarksControllerDataSource, CoachMarksControllerAnimationDelegate 상속받기
// MARK: CoachMarksControllerDataSource
extension FirstViewController: CoachMarksControllerDataSource {
}
// MARK: CoachMarksControllerAnimationDelegate
extension FirstViewController: CoachMarksControllerAnimationDelegate {
}
저는 overlay(튜토리얼 시 화면을 덮는 view)를 커스터마이즈 하지 않을 것이라 CoachMarksControllerDelegate는 상속받지 않았는데 이는 유튜브를 보시면 상세하게 알 수 있습니다.
3. ViewDidLoad() 에서 dataSource와 animationDegate를 self로 설정하기
self.coachMarksController.dataSource = self
self.coachMarksController.animationDelegate = self
4. CoachMarksControllerDataSource
CoachMarksControllerDataSource 에서 보여줄 view를 설정합니다.
프로토콜 함수? 3개를 추가합니다. 설명은 코드 안에 적어놓았습니다.
coachViews 는 만들어질 튜토리얼 설명박스 입니다. index를 받아서 각 튜토리얼 마다 여러 설정을 해줄 수 있습니다.
// MARK: CoachMarksControllerDataSource
extension FirstViewController: CoachMarksControllerDataSource {
// 가이드 마커에 대한 설정
func coachMarksController(_ coachMarksController: CoachMarksController, coachMarkViewsAt index: Int, madeFrom coachMark: CoachMark) -> (bodyView: (UIView & CoachMarkBodyView), arrowView: (UIView & CoachMarkArrowView)?) {
let coachViews = coachMarksController.helper.makeDefaultCoachViews(withArrow: true, arrowOrientation: coachMark.arrowOrientation)
switch index {
case 0:
coachViews.bodyView.hintLabel.text = "여러 게임으로 국악을 익혀요!"
coachViews.bodyView.nextLabel.text = "click!"
coachViews.bodyView.background.innerColor = #colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1)
coachViews.arrowView?.background.innerColor = #colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1)
// coachViews.bodyView.background.borderColor = .black
coachViews.bodyView.hintLabel.textColor = .white
coachViews.bodyView.nextLabel.textColor = .white
default:
coachViews.bodyView.hintLabel.text = "default"
}
return (bodyView: coachViews.bodyView, arrowView: coachViews.arrowView)
}
// 가르키고자 하는 뷰를 지정
func coachMarksController(_ coachMarksController: CoachMarksController, coachMarkAt index: Int) -> CoachMark {
switch index {
case 0:
return coachMarksController.helper.makeCoachMark(for: gameTableView)
default:
return coachMarksController.helper.makeCoachMark(for: gameTableView)
}
}
// 몇 개의 뷰에 대해 가이드를 제공
func numberOfCoachMarks(for coachMarksController: CoachMarksController) -> Int {
return 1
}
}
5. CoachMarksControllerAnimationDelegate
마커가 나타날때 사라질때 떠있을때 등 여러 애니메이션 효과를 줄 수 있는 Delegate 입니다.
유튜브와 코드를 똑같이 사용했기 때문에 적어놓지는 않겠습니다.
ex) 마커가 위아래로 움직이는 효과를 줄 수 있습니다.
6. 화면에 보이기
viewDidApprear 과 viewWillDisappear 에 코드를 작성해줍니다.
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)
}
7. 실행
저는 테이블을 가르키도록 설정했는데 이걸 위로 고정시키는 방법을..ㅎㅎ 밤이 늦어서 찾지 못..(변명)
그리고 탭바를 가르키도록은 도저히 못찾겠더라구요ㅜ 탭바컨트롤러에서 해볼까 했지만 탭바 아이템 프로퍼티를 찾을 수가 없어서
이 오픈소스는 보류ㅠㅠ 하기로 했습니다.. 탭바는 정말 직접 만들어서 사용해야할 것 같아요
참고영상: 개발하는 정대리님 유튜브
https://www.youtube.com/watch?v=82mRG3SAMns
'iOS > STUDY' 카테고리의 다른 글
[iOS] UICollectionViewLayout (0) | 2022.03.04 |
---|---|
[Swift] @escaping (0) | 2022.02.28 |
Error: Unable to process request - PLA Update available (0) | 2021.07.10 |
[WWDC 2021] Discoverable design (0) | 2021.06.11 |
[iOS] UICollectionView (0) | 2021.05.22 |