CustomLaunchScreen 만들어 보자 !

앱 메인화면에 진입하기 전 뜨는 앱 화면을 런처스크린이라고 부르는데요 !
저는 런처스크린 스토리보드를 사용하지 않고 따로 런처스크린 용도 ViewController를 만들어서 사용하였습니다 !
이게 잘 쓰이는 건지는 모르겠지만 새로운 시도라고 생각하보고 만들어봤어요 !!

일단 먼저 사용할 이미지 뷰를 선언하고 위치와 크기를 잡아 줄께요 !

1
2
3
4
5
6
7
8
9
10
11
private func setImageView() {
private let launchImageView = UIImageView()

let imageViewSize: CGFloat = 100
launchImageView.image = Data.logo
view.addSubview(launchImageView)
launchImageView.snp.makeConstraints { (imageView) in
imageView.width.height.equalTo(imageViewSize)
imageView.center.equalTo(view)
}
}

그리고 그냥 이미지만 두면 심심하기 때문에 에니메이션을 줘보겠습니다 !
애니메이션은 animateKeyframes를 사용해서 잡아봤습니다 !
그리고 해당 애니메이션이 끝나면 completion으로 확인을 해 메인 뷰로 present를 해줬어요 !

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private func setlogoAnimation() {
UIView.animateKeyframes(
withDuration: 3,
delay: 0,
animations: {
UIView.addKeyframe(
withRelativeStartTime: 0,
relativeDuration: 1.5/3) {
self.launchImageView.transform = CGAffineTransform(scaleX: 3.0, y: 3.0)
}
UIView.addKeyframe(
withRelativeStartTime: 1.5/3,
relativeDuration: 1.5/3) {
self.launchImageView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
}

}, completion: {(isFinished) in
guard isFinished else {return}
DispatchQueue.main.async {
let naviMainVC = UINavigationController(rootViewController: MainViewController())
naviMainVC.view.backgroundColor = .systemBackground
naviMainVC.modalPresentationStyle = .fullScreen
self.present(naviMainVC, animated: true)
}
})
}

마지막으로 작성하였던 함수들을 viewDidLoad에다가 실행을 시켜줍니다 !

1
2
3
4
5
override func viewDidLoad() {
super.viewDidLoad()
setImageView()
setlogoAnimation()
}