티스토리 뷰

 


//  UIView+Extension.swift
//  Journey

import UIKit

extension UIDevice {
    var hasNotch: Bool {
        let bottom = UIApplication.shared.keyWindow?.safeAreaInsets.bottom ?? 0
        return bottom > 0
    }
}

디바이스가 노치가 있는 것인지 없는 것인지 판별하기 위해 Extension으로 따로 빼서 만듦.
// ChallengeViewController.swift
// Joureny

notchCase 라는 함수를 만들어 주었고 (viewDidLoad에 넣어줌)
옆에 이미지에서 보이듯이 노치가 있을 때는 스탬프가 삼각형 구조로 배열되어 있고,
노치가 없을 때는 스탬프가 일렬로 배열되어 있다.

뷰를 설계할 때 어떻게 구현해야할지에 대해 고민을 많이 했었는데 
방안은 뷰를 두개 만들고, 케이스를 나누어 isHidden 처리를 해주었다.
또한 모든 기기에서 안정감있게 보여야 했기 때문에 오토레이아웃 잡은 것을 
뷰컨에 NSLayoutConstraint로 연결해서 케이스마다 전부 구분하였다.


private func notchCase(totalStamp: Int) {

        stampStackView.isHidden = false
        if UIDevice.current.hasNotch {
            switch totalStamp {
            case 1:
                stampImageView2.isHidden = true
                stampImageView3.isHidden = true
                viewToImage.constant = 22
                challengeToStampViewBottom.constant = 60
                triangleStampView.isHidden = true
            case 2:
                stampImageView3.isHidden = true
                triangleStampView.isHidden = true
                viewToImage.constant = 22
                stackviewToChallengeLabel.constant = 47
                challengeToStampViewBottom.constant = 62
            case 3:
                triangleStampView.isHidden = false
                stampStackView.isHidden = true
                
            default:
                break
            }
            
        } else {
            switch totalStamp {
            case 1:
                stampImageView2.isHidden = true
                stampImageView3.isHidden = true
                triangleStampView.isHidden = true
            case 2:
                stampImageView3.isHidden = true
                triangleStampView.isHidden = true
                viewToImage.constant = 22
                challengeToStampViewBottom.constant = 62
                stackviewToChallengeLabel.constant = 47
            case 3:
                triangleStampView.isHidden = true
                stackviewToChallengeLabel.constant = 41
                challengeToStampViewBottom.constant = 39
                viewToImage.constant = 11
            default:
                break
            }
        }
    }

'SOPT 28th APPJAM - iOS' 카테고리의 다른 글

[Swift] carouselView, CollectionView3D 전환 [1/2]  (0) 2021.09.22
[Swift] 카카오 소셜 로그인  (0) 2021.08.23
[Swift] Commit, Issue, Pull Request  (0) 2021.07.23
[Swift] Branch Rules  (0) 2021.07.23
[Swift] Coding Convention  (0) 2021.07.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 27 28 29 30 31
글 보관함