[UMC] 3주차 워크북

nini·2022년 6월 15일

UMC

목록 보기
3/13
post-thumbnail

UIImageView.contentMode

: UIImageView에 UIImage를 채우고 해당 이미지가 어떤 비율로 들어갈지를 정할 때 ContentMode 사용
ContentMode


textField.placeholder

  • Text Field에 사용자가 어떤 데이터(텍스트)를 입력해야 하는지 알 수 있도록 해 주는 역할
  • 미리 특정 내용이 보여질 수 있게 해주는 것
    예) 앱에서 리뷰를 작성한다고 했을 때 해당 부분에 회색 글씨로 써 있는 "리뷰를 작성해주세요"
    → 실제 입력된 내용은 아니지만, 미리 그 위치에 보여줌으로써 유저의 사용성을 개선하는 역할을 해줌
    placeholder

layer

layer

  • UIView : UIKit 에서 제공하는 클래스
    CALayer : Core Animation 에서 제공하는 클래스
  • CALayer 가 UIKit 보다 한 단계 낮은 수준의 인터페이스를 제공하기 때문에 UIKit 보다 많은 기능을 제공하지만 몇가지 기능에 대해서는 직접 구현해하는 번거로움이 있다.

IBAction

  • Event가 일어난 경우 호출되는 Action을 정의해둔 것
    • @IBAction func hello() {}

    • @는 컴파일러에게 어떤 속성을 가지고 있다고 전하는 역할을 하는 예약어이다. 컴파일러에게 @가 붙은 명령어에 대해 어떤 attribute가 부여되었음을 말한다. 아래의 예시처럼 속성이 부여된다.

      @IBAction // Interface Builder와 연결된 Action이다.

      @UIApplicationMain // App의 Main이 여기에 있다.

      따라서 @IBAction 의 속성이 func의 정의 앞에 붙어있다면, 이 함수는 Interface Builder에서 사용될 수 있고 UI로 연결이 가능하다는 의미를 가진다.

  • Interface Builder를 통해 받아온 정보로 Action을 수행하겠다는 의미
    • Action은 입력이 들어왔을 때 어떤 행동을 할지를 나타냄
    • IB는 Interface Builder의 약자

IBOutlet

  • 값에 접근하기 위한 변수
    • @IBOutlet weak var textField : TextField?
  • Outlet은 데이터를 가져오는 것

Gesture

  • 단순한 화면 터치, 길게 누르기, 두 손가락으로 확대하기, 화면 넘기기 등 제스처로 이런 다양한 기능들을 할 수 있다.

    • 제스처를 구현하는 두 가지 방법
    1. touchesBegan/Ended/Moved/Cancell
      			override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
          print("touchesBegan is called")
          }
    2. Tap Gesture Recognizer을 포함한 다양한 제스처
  • (실습을 통해 확인해 본) 백 스와이프 제스처

// 네비게이션 백 스와이프 모션으로도 뒤로 가기가 가능하도록 만들어줌
self.navigationController?.interactivePopGestureRecognizer?.delegate = nil

; navigationController의 interactivePopGestureRecognizer의 대리인을 nil로 지정해주기


화면 전환

iOS 화면 전환 방법 4가지

  1. 뷰 컨트롤러의 뷰 위에 다른 뷰를 가져와 바꿔치기
  2. 뷰 컨트롤러에서 다른 뷰 컨트롤러를 호출
  3. 네비게이션 컨트롤러를 사용하여 화면 전환
  4. 화면 전환용 객체 세그웨이를 사용하여 화면 전환

UINavigationController

  • 계층구조로 구성된 content를 순차적으로 보여주는 container view controller

Navigation Controller는 Container View Controller이므로 내부적으로 다른 컨트롤러를 포함하고 있다. Controller끼리의 화면 이동을 처리해 주고, 현재 위치에 대한 내비게이션 역할을 한다.

따로 View를 포함하고 있지 않으므로 하나의 페이지를 담당하지는 않는다. 다른 Controller와 결합하여 부분적으로 화면을 구성한다. StoryBoard에 2개의 화면으로 구성되어 있으나 실제로는 하나의 화면으로 나타나는 이유도 여기에 있다.
UINavigationController

@MainActor class UINavigationController : UIViewController
import UIKit

class RootViewController: UIViewController {
    ...
    
    func showNavigationController() {
    	// 선언
        let firstVC = UIViewController()
        let naviC = UINavigationController(rootViewController: firstVC)
        
        // 화면 띄우기
        self.present(naviC, animated: true)
    }
    
    ...
}

화면 생명 주기

: View Controller의 생명주기(Life-Cycle)

  • iOS는 Navigation Controller를 사용해 화면을 전환할 때 LIFO(Last In First Out) 방식으로 관리한다. 스택 구조와 동일하므로 마지막으로 push 된 화면을 표시하고 제거(pop)한다.

이는 화면이 표시되기 전부터 제거된 후까지의 생명주기를 의미한다.
화면생명주기


StackView

: 열 또는 행에 뷰 집합을 배치하기 위한 간소화된 인터페이스

  • UIStackView는 수평(horizontal) 또는 수직(vertical) 뷰의 스택을 만드는데 필요한 제약조건(constraint)를 만들거나 관리함
  • 이는 동적으로 제약조건이 제거되거나 추가될 때 뷰의 스택에서 제거되거나 추가됨 → 커스터마이징을 하면 주변의 layout에 반응하고 영향을 줄 수 있음
profile
사용자를 고려한 디자인과 UX에 관심있는 개발자

0개의 댓글