반응형
최근 프로젝트를 구상하면서 카메라 화면을 구성해보고 싶다는 생각이 들었습니다.
그런데 카메라는 비율을 보통 4:3 , 16: 9 이렇게 고정된 값으로 많이들 사용하기 때문에
아이폰 기기별 UI의 차이가 컸습니다..
때문에 이것을 오토레이아웃으로 구현할지, 기기별로 따로 UI를 만들지 고민하다가 이번에 기기별로 따로 대응을 해보고자 했습니다!
그래서 어떻게 해볼 수 있을까 고민을 하다가 좀 더 쉽게 접근을 해보고자
DeviceKit을 사용해봤습니다!
https://github.com/devicekit/DeviceKit
DeviceKit을 이용하면 쉽게 어떤 기기를 사용하고 있는지 알 수 있습니다.
우선 싱글톤으로 어떤 파일에서든 쉽게 접근할 수 있도록 만들어주었습니다.
(싱글톤으로 구현하는 아이디어는 이 분의 블로그를 참고했습니다!)
import DeviceKit
public enum DeviceGrounp {
case homeButtonDevice
public var rawValue : [Device] {
switch self {
case .homeButtonDevice:
return [.iPhone8, .iPhone8Plus, .iPhoneSE2, .iPhoneSE3]
}
}
}
class DeviceManager {
static let shared : DeviceManager = DeviceManager()
func isHomeButtonDevice() -> Bool {
return Device.current.isOneOf(DeviceGrounp.homeButtonDevice.rawValue)
}
}
저는 iOS 16을 기준으로 개발을 해보고 있기 때문에 iOS16에서 지원하는 홈버튼이 있는 4가지 기종만 구분하면 됐습니다.
https://support.apple.com/ko-kr/guide/iphone/iphe3fa5df43/16.0/ios/16.0
(이 홈페이지에서 iOS 별 호환 모델들을 확인할 수 있습니다.)
이제 나머지는 간단합니다.
@objc func cameraButtonTapped() {
if DeviceManager.shared.isHomeButtonDevice() {
print("홈버튼이 있는 기종")
let homeButtonLessVC = HomeButtonLessVC()
homeButtonLessVC.modalTransitionStyle = .coverVertical
homeButtonLessVC.modalPresentationStyle = .automatic
present(homeButtonLessVC, animated: true)
}
else {
print("홈 버튼이 없는 기종")
let homeButtonVC = HomeButtonVC()
homeButtonVC.modalTransitionStyle = .coverVertical
homeButtonVC.modalPresentationStyle = .automatic
present(homeButtonVC, animated: true)
}
}
다음과 같이 디바이스 별로 분류를 하고 해당 뷰컨을 만들어 각각의 화면을 만들어 줄 수 있습니다.
모든 기기를 한번에 다 처리할 수 없다면 다음과 같이 VC를 분리해서 따로 처리해도 좋은 방법이 될 수 있을 것 같습니다!
반응형
'swift공부' 카테고리의 다른 글
[RealmSwift Test] "오운완" Mock을 활용한 Realm 테스트 (0) | 2023.09.26 |
---|---|
Swift 공부) iOS Google Admob 구현해보기 ,The Google Mobile Ads SDK was initialized without AppMeasurement 에러 해결 (0) | 2022.10.02 |
Swift Realm 알아보기 (0) | 2022.09.07 |
swift uikit preview(미리보기) 띄우기 (0) | 2022.08.09 |
swift label 행간 늘리기 (0) | 2022.08.08 |