Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
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
Tags
more
Archives
Today
Total
관리 메뉴

iOS 개발일지

0816 새싹 31회차 정리 - 접근제어자, UIPageViewController 본문

SeSAC iOS 데뷔과정 2기

0816 새싹 31회차 정리 - 접근제어자, UIPageViewController

Lia's iOS 2022. 8. 16. 22:02
iOS 앱 개발자 데뷔 과정 31회차

 

 

 

 

#0. Memo

- UIView.animate

해당 메소드를 사용하면 쉽게 그럴듯한 애니메이션 효과를 줄 수 있다.

최소로 설정이 필요한 정보는 [ 시작 - 시간 - 끝 ] 으로, 위의 코드에서는 시작을 alpha 0으로, 시간을 3으로, 끝을 alpha 1로 설정했다.

앱이 실행되었을 때 tutorialLabel은 투명한 상태였다가 3초에 걸쳐 점점 선명해지는 애니메이션이 적용된다.

 

 

 

- 예시

아래에서 설명할 Custom Framework를 통해 간단하게 구현해본 화면 예시이다.

이 중 UIActivityViewController는 처음 본 컨트롤러이기 때문에 기억해놓는 것이 좋을 것 같다.

UIActivityViewController와 WebViewController

 

 

 

 

#1. Checklist

- Custom Framework

프레임워크를 통해 결합도는 낮게, Cohesion는 높게 구성할 수 있다.

Coupling (결합도) : 서로 다른 모듈과 모듈의 의존도

Cohesion (응집도) : 모듈 내부에서 하나의 목적을 가지고 연관되어 있는 정도

 

프레임워크 생성과 추가 및 사용 모두 순서만 알면 어렵지 않다.

 

- Custom Framework 생성 방법

Custom Framework 생성 방법
Access Control을 준수하며 코드 작성

 

- Custom Framework 추가 방법

프로젝트 파일만 가져오기
Target -> General -> Frameworks, Libraries, ans Embedded Content에서 + 버튼
framework 선택 후 추가

여기까지 완료되면 작업중인 프로젝트에 커스텀한 프레임워크를 import 후, 모듈 외부의 코드를 사용할 수 있다.

 

 

 

- AccessControl

소스파일 및 모듈의 코드에서 코드의 일부에 대한 접근을 제한하고자 할 때 사용한다.

접근 제어자의 사용을 통해 코드의 상세 내용을 숨기거나 코드의 불필요한 외부 노출을 제한함으로써 은닉화의 특성을 구현할 수 있다.

접근 제어자는 모듈과 소스 코드 기준으로 접근 수준을 판단한다.

 

Module : import를 통해 프로젝트에서 사용할 수 있는 형태의 코드 묶음 단위

프로젝트도 하나의 모듈로 볼 수 있으며, 프레임워크 하나를 하나의 모듈로 볼 수 있다.

open, public을 통해 프로젝트에 접근할 수 있다.

 

Source File : 하나의 프로젝트 내에서 코드 제어를 할 경우 internal, fileprivate, private로 제어가 가능하다.

 

- Access Lebel

접근 레벨 // open이 가장 개방적이고, private가 가장 제한적이다.

별도로 접근 제어를 선언하지 않는 경우에는 default로 internal이 설정된다.

open ➡️ public ➡️ internal ➡️ fileprivate ➡️ private

---프로젝트에서 외부 모듈에 접근 가능한 레벨---

open : 클래스에서만 사용 가능하며, open으로 클래스를 선언할 경우 다른 모듈에서 해당 클래스의 오버라이딩이 가능하다.

 

public : public으로 선언한 경우, 상속과 오버라이딩이 불가능하다.

 

internal : 같은 모듈 내에서는 internal일 경우 어떤 파일에서도 코드에 대한 접근과 상속이 불가능하다.

fileprivate : fileprivate으로 설정한 스위프트 파일 내부에서만 접근 가능하다.

 

private : private으로 설정한 요소가 들어 있는 블록 내에서만 접근 가능하다.

 

 

 

- UIPageViewController

UIPageViewController를 추가하고, 뷰컨트롤러를 배열로 만들어 PageView로 보여줄 수 있다.

어플의 인트로에서 나오는 사용방법 등으로 활용할 수 있다.

인스펙터 영역에서 Transition Style을 Page Curl로 선택하면 책장을 넘기는 듯한 효과를 줄 수 있다.

 

 

 

 

- UIPageControl

UIPageControl을 통해 현재 보고있는 페이지가 몇번째 페이지인지 사용자에게 명시할 수 있다.

위에서 바꾼 Transition Style을 다시 Scroll로 바꿔야 정상적으로 작동한다.

위의 두 개의 pageViewController 메서드는, 현재 VC의 인덱스를 통해 직전 또는 직후의 인덱스를 계산한다.

그리고 직전/직후의 인덱스가 존재할 경우 다음 인덱스에 해당하는 값을 반환하고, 그렇지 않을 경우 nil을 반환한다.

 

여기까지만 구현하면 아무것도 바뀌지 않기 때문에, 보여주는 역할의 메서드가 따로 필요하다.

presentationCount 메서드에서 사용자에게 보여줄 총 페이지의 갯수를 설정한다.

presentationIndex 메서드에서 시작할 페이지의 인덱스를 설정한다.

 

 

 

- UIContainerView

UIContainerView를 UIViewController에 추가하면 왼쪽과 같이 작은 View가 같이 생성된다.

 

 

ContainerView를 드래그해서 위에서 만든 PageViewController에 놓으면, 이렇게 화면 연결 옵션에 대한 창이 뜬다.

 

Embed를 선택하면 PageViewController와 연결된 뷰까지 작은 View 안에서 보여줄 수 있다.

 

 

 

 

 

 

 

#2. Assignment

- Access Control

- TMDB Project에 Access Conrol을 적용하여 코드의 인터페이스를 명확하게 지정하기

- TMDB Project에 Custom Framework를 추가하여 사용하기

 

프로젝트에서 사용하는 Access Control은 defualt인 internal 또는 가장 제한적인 private를 많이 쓰는 것 같다.

프로젝트 내의 다른 파일에서 접근할 코드 외, 애플이 제공하는 코드 외에는 전부 private로 제한했다.

 

 

 

 

- PageViewController

- TMDB Project에 인트로 화면을 PageViewController를 통해 구성하기

- UserDefaults를 활용해, 취초 앱 실행시에만 인트로 화면이 뜨게 설정하기

인트로 화면 마지막 페이지에서 startButton을 누르면 메인 화면으로 넘어가며, 유저디폴트와 조건문을 통해 두 번째 실행부터는 메인하면이 연결되도록 구현했다.