티스토리 뷰

728x90

안녕하세요.............................
정말 오래간만의 포스팅입니다... 아무튼간,

오늘 포스팅 주제는
아이패드를 지원하려면 어떤 작업들이 필요할까??
입니당(아이패드 대응)

최근에 아이패드 대응 작업을 하고있는데, 아이패드를 안써봐서 그런지 ㅠㅠ.. 어떤 작업들을 해야할지도 막막하더라구요
그래서 오늘은 간단하게 어떤 작업들을 해야하는지 아이패드 피처 TODO 에 대해 작성해볼까 합니다

사실 아이패드에서 빌드만 되면 되! 라는거라면, Deployment Info에서 ipad 체크만으로 빌드가 가능합니당

가로모드 지원!

아이패드 대응 하면 생각나는것.. 바로 가로모드죠 가로모드 정도는 되야.. ㅠ

가로모드를 지원하려면 어떤걸 해줘야 할까요..? 설정은 생각보다 간단합니당

  1. Deployment Info에서 아이패드만 선택됬을 때 Device Orientation에 모두 체크되어 있으면 됩니당(이러면 아이패드에서만 회전됩니당)
  2. 레이아웃을 가로모드에도 잘 나오도록 잘 .. 짜줍시당

참고로 화면이 회전될 때 아래 메소드를 통해 콜 받으실 수 있습니당 (컨테이너 사이즈가 변경될 때 콜 된다고 합니당)
viewWillTransition

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
// ..
  }

splitView 지원!

처음엔 스플릿뷰가 뭔지 몰랐어요... 이런거에요



이것도 설정방법은 간단합니다(만 레이아웃이 헬...)

  1. 가로모드 설정을 해줍시당(Device Orientation)
  2. Deployment Info에 있는 Requires full screen 체크가 되어있다면 없애줍시당
    이렇게 하면 우선 스플릿뷰는 정상적으로 되고..
  3. 레이아웃을 설정해줍시다..
    스플릿뷰 대응을 위한 레이아웃을 설정해줄 때 주의해야 할 점이 있어요.
    바로 뷰가 스플릿 되기 때문에, frame 대신 bounce로, 혹은 UIWindow를 기준으로 설정해주셔야
    스플릿뷰 사이즈가 변해도 레이아웃이 잘 적용되요.

다만 네비 titleView 커스텀뷰와 같은 커스텀뷰 레이아웃을 설정할 경우엔, 해당 뷰의 window를 기준으로 레이아웃을 잡아줘야 할 때가 있을거에요.
그런데 viewDidLoad 이하 단계에서 레이아웃을 설정해주셧다면(대부분 이전 단계에서 하죵..) window가 없는상태라 레이아웃이 안잡힐거에요..

그럼 만약 작업을 하시게 된다면 뷰에서의 window는 언제 생기나가 궁금하실텐데,
위 사진에서 viewWillAppear 이후에 생깁니다(updateConstraint)

멀티 윈도우...

멀티윈도우는, 같은 앱을 여러개 띄울 수 있는 기능이에요 (scene이 여러개)
요런 느낌?? 사파리 앱이 동시에 2개가 떠있죠??


설정 방법(요건 좀 복잡합니당)

  1. Deployment Info에서 Supports multiple windows 체크
  2. 기존에 appDelegate만 사용했다면 SceneDelegate 마이그레이션
  3. SceneDelegate 설정(SceneSession이란게 생겼습니당)

이 기능은 sceneDelegate를 통해 여러 scene을 관리해야 함으로, 코스트가 많이들고, 관리 포인트도 많아서 필수 작업은 아니라고 생각해요.
대표적으로 카카오톡이나, 슬랙과 같은 앱도 멀티윈도우를 지원 안하고 있습니다!
그 이유는 다른 scene이긴 하지만, 메모리를 공유하기 때문일 것 같아요(주륵..)
예)카카오톡 화면1에서 a로그인, 화면2에서 b로그인을 하게 된다면?? 메모리는 공유되는데..

다만 보안 관련 문제가 없는 앱들은 신세션만 잘 관리해준다면, 코스트가 그리 클 것 같진 않아요!
예) 노트앱에서 여러 화면에서 작업한다면?? 신세션만 잘 적용시켜주고, 메모리공유도 큰 이슈일 것 같진 않아요

UISplitViewController 적용!

스플릿뷰컨트롤러는 이런 뷰컨트롤러 입니당

네비게이션컨트롤러와 같이 컨테이너 뷰 컨트롤러이고, tabBarController에서 viewControllers를 설정해주는 것처럼 viewControllers를 설정해주는 식으로 사용해볼 수 있습니당

let splitVC = UISplitViewController()
let primaryVC = UIViewController()
let secondaryVC = UIViewController()

splitVC.viewControllers = [primaryVC, secondaryVC]

특이점이라면, 오른쪽 영역인 secondary 컬럼에 뷰를 띄울려면 3가지 방법이 있는데,

  1. showDetailViewController(아이폰에선 모달로 뜸)
  2. splitViewController의 viewConstrollers 재설정
  3. setViewController를 통한 설정

결국엔 특정 컬럼에 뷰를 덮어 씌우는거라, 1번 방법인 showDetailViewController를 사용하는게 아니라면
아이폰과 아이패드에서 똑같이 보이도록 추가 작업이 필요합니당 (이부분은 고민중)


이정도가 아이패드 대응할때 할 수 있는 작업 TODO 인 것 같습니당

요즘.. 바빳습니다.. 지금도 바쁘고..
그런데 바쁘다고 쉬고싶다고 안쓰다보니깐 결국 이렇게 안쓰게 되더라구요.. 🥺
그래서 간단하게라도 꾸준하게 적어보자! 로 목표를 조금 낮춰서 블로그 포스팅을 다시 시작해볼까 해요


화이팅..!

728x90
댓글