[iOS] UIkit 프레임워크 클래스

JJOOEE__·2024년 6월 21일
0

iOS_UI_CodeBase

목록 보기
1/3
post-thumbnail

🍎 UIkit 프레임워크 클래스

🍏 UIView

◻️ 주요 기능과 역할

  • 시각적 요소의 구성

    • UIView은 다양한 UI 요소들을 표현합니다.
    • 버튼, 레이블, 이미지, 텍스트 필드 등 모든 시각적 요소는 UIView를 상속받아 구현됩니다.
  • 컨테이너 및 레이아웃 관리

    • 다른 UIView 인스턴스를 자식으로 추가하여 계층적 구조를 형성할 수 있습니다. 이를 통해 복잡한 UI를 구성할 수 있으며, 자식 뷰의 배치와 크기를 관리할 수 있습니다.
  • 그리기 및 애니메이션

    • draw(:), draw(:rect:) 메서드를 사용하여 직접 커스텀 그래픽을 그릴 수 있습니다
    • 애니메이션 API를 사용하여 다양한 애니메이션 효과를 쉽게 추가할 수 있습니다.
  • 이벤트 처리:

    • 사용자의 터치 및 제스처 이벤트를 받아 처리할 수 있습니다.
    • UITapGestureRecognizer,UISwipeGestureRecognizer 등의 제스처 인식기를 사용하여 특정 동작을 감지하고 반응할 수 있습니다.
  • 뷰의 레이아웃 업데이트

    • layoutSubviews() 메서드를 오버라이드하여 뷰의 하위 뷰들의 레이아웃을 업데이트
    • 부모 뷰의 크기나 경계가 변경되었을 때 자동으로 호출됩니다.
  • 애니메이션 및 상태 관리

    • setNeedsLayout(), layoutIfNeeded() 메서드를 사용하여 레이아웃 업데이트가 필요하다고 시스템에 표시하고, 현재 레이아웃 패스에서 레이아웃을 즉시 업데이트
    • setNeedsDisplay() 메서드를 사용하여 뷰의 컨텐츠가 변경되었음을 시스템에 표시하여 즉시 다시 그릴 수 있습니다.
  • 제스처 인식기 관리

    • gestureRecognizers 속성을 사용하여 UIView에 연결된 제스처 인식기 배열을 설정하거나 가져올 수 있음
    • 이를 통해 다양한 제스처 동작을 인식하고 사용자 입력을 처리할 수 있음

◻️ 주요 메서드

🍀 viewDidLoad()

override func viewDidLoad() {
    super.viewDidLoad()
    // 화면이 처음 로드될 때 호출됩니다. 
    초기화 코드를 작성하는 데 사용됩니다.
    setupUI()
}

🍀 addSubview(_:)

  • 다른 UIView를 현재 UIView의 하위 뷰로 추가
let subview = UIView(frame: CGRect(x: 20, y: 20, width: 100, height: 100))
subview.backgroundColor = .blue
self.view.addSubview(subview)

🍀 removeFromSuperview()

  • 현재 UIView를 부모 뷰에서 제거
self.view.removeFromSuperview()

🍀 setNeedsLayout()

  • 레이아웃 업데이트가 필요함을 시스템에 알림
self.view.setNeedsLayout()

🍀 setNeedsDisplay()

  • 뷰의 컨텐츠가 변경되었으며, 즉시 다시 그리도록 시스템에 표시
self.view.setNeedsDisplay()

🍀 layoutIfNeeded()

  • 현재 레이아웃 패스에서 즉시 레이아웃을 업데이트
self.view.layoutIfNeeded()

🍀 layoutSubviews()

  • 하위 뷰들의 레이아웃을 업데이트하는 메서드로, 오버라이드하여 사용자 정의 레이아웃 로직을 추가
override func layoutSubviews() {
    super.layoutSubviews()
    // 사용자 정의 레이아웃 로직 추가
}

🍀 gestureRecognizers

  • UIView에 연결된 제스처 인식기 배열을 설정하거나 가져오는 속성
// gestureRecognizers 배열을 설정하거나 가져올 수 있습니다.
self.view.gestureRecognizers = [tapGesture, swipeGesture]

🍏 UIViewController

◻️ 주요 기능과 역할

  • 화면관리

    • 애플리케이션의 각 화면(또는 뷰 컨트롤러)을 관리하고, 화면 전환을 처리
    • 다른 뷰 컨트롤러로의 전환, 모달로 표시되는 뷰 컨트롤러 관리 등을 담당
  • 사용자 인터페이스 관리

    • UIView와 그 서브 클래스들을 사용하여 화면의 구성 요소들을 관리하고 배치
    • 버튼, 레이블, 텍스트 필드 등의 UI 요소를 추가하고 커스터마이즈
  • 데이터 관리

    • 데이터 모델과 뷰 사이의 상호 작용을 관리, 데이터의 변화에 따라 화면을 업데이트
    • UITableViewDataSource, UITableViewDelegate 등의 프로토콜을 구현하여 테이블 뷰의 데이터 소스를 관리
  • 라이프사이클 관리

    • UIViewController은 여러 라이프사이클 메서드들을 통해 생명 주기 이벤트를 관리
      • 예시 ) viewDidLoad(), viewWillAppear(:), viewDidAppear(:), viewWillDisappear(:), viewDidDisappear(:) 등의 메서드
  • 상태 관리

    • 화면 상태의 변화에 따라 상태를 저장하고 복원하는 메서드들을 제공
      • encodeRestorableState(with:)와 decodeRestorableState(with:) 메서드
  • 사용자 입력 처리

    • 제스처 인식기(GestureRecognizer)를 사용하여 사용자의 입력을 감지하고 처리
    • 탭, 스와이프, 터치 등의 다양한 제스처를 인식하여 그에 따른 액션을 수행

◻️ 라이프사이클 관련 메서드

🍀 viewDidLoad()

override func viewDidLoad() {
    super.viewDidLoad()
    // 화면이 처음 로드될 때 호출됩니다. 
    일반적으로 초기화 코드를 작성하는 데 사용됩니다.
}

🍀 viewWillAppear(:), viewDidAppear(:)

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // 화면이 나타나기 직전에 호출됩니다. 
    화면이 표시되기 전에 필요한 작업을 수행할 수 있습니다.
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    // 화면이 완전히 나타난 후 호출됩니다. 화면이 사용자에게 보여지고 나서 추가적인 작업을 수행할 수 있습니다.
}

🍀 viewWillDisappear(:), viewDidDisappear(:)

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // 화면이 사라지기 직전에 호출됩니다. 
    다른 화면으로 전환되기 전에 필요한 정리 작업을 수행할 수 있습니다.
}

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    // 화면이 완전히 사라진 후 호출됩니다. 
    화면이 완전히 사라진 후 추가적인 정리 작업을 수행할 수 있습니다.
}

◻️ 화면관리 및 전환 메서드

🍀 present(_:animated:completion:)

  • 다른 뷰 컨트롤러를 모달로 표시함
present(viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)?)

🍀 dismiss(animated:completion:)

  • 현재 모달로 표시된 뷰 컨트롤러를 닫음
dismiss(animated: Bool, completion: (() -> Void)?)

🍀 addChild(_:) / removeFromParent()

  • 다른 뷰 컨트롤러를 자식으로 추가 / 부모 뷰 컨트롤러에서 제거
addChild(childController: UIViewController)
removeFromParent()

◻️ 데이터 및 상태 관리 메서드

🍀 encodeRestorableState(with:) / decodeRestorableState(with:)

  • 뷰 컨트롤러의 상태를 저장하고 복원하는 데 사용
override func encodeRestorableState(with coder: NSCoder)
override func decodeRestorableState(with coder: NSCoder)

🍀 viewWillTransition(to:with:)

  • 화면이 회전할 때 호출되며, 회전 전 후의 크기를 파라미터로 전달받음
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)

◻️ 데이터 및 상태 관리 메서드

🍀 touchesBegan(:with:) / touchesMoved(:with:) / touchesEnded(:with:) / touchesCancelled(:with:):

  • 터치 이벤트를 처리합니다.
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?)
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)
override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?)

🍏 UITableView

◻️ 주요 기능과 역할

  • 데이터 표시

    • 테이블 뷰는 단일 열의 데이터 목록을 표시
    • 각 행은 섹션으로 그룹화되고, 섹션 내의 각 행은 셀로 구성
  • 유연한 레이아웃 관리

    • 각 섹션과 행의 배치 및 크기를 자동으로 관리
    • 다양한 레이아웃 옵션과 함께 수동으로 설정
  • 셀 커스터마이징

    • UITableViewCell 클래스를 사용하여 각 행의 모양과 동작을 정의
    • 텍스트, 이미지, 버튼 등 다양한 컨텐츠를 셀에 추가
  • 데이터 소스 및 델리게이트 패턴

    • UITableViewDataSource 프로토콜과 UITableViewDelegate 프로토콜을 통해 데이터를 제공
    • 사용자 인터랙션 및 UI 동작을 처리
  • 다양한 스타일 및 편집 모드

    • 단일 열 표시 외에도 그룹화 된 스타일, 인덱스 목록, 세부 정보 뷰 등 다양한 스타일을 지원
    • 편집 모드를 통해 행을 추가하거나 삭제
  • 스크롤 및 선택 관리

    • 많은 양의 데이터를 효율적으로 처리하기 위한 스크롤 및 선택 관리 기능을 제공
    • 대규모 데이터 세트의 경우 레이지 로딩을 통해 성능을 최적화

◻️ 주요 메서드

🍀 reloadData()

  • 테이블 뷰의 데이터를 다시 로드하고 새로운 데이터로 업데이트
tableView.reloadData()

🍀 indexPathForSelectedRow

  • 현재 선택된 행의 인덱스 경로를 가져옴
if let indexPath = tableView.indexPathForSelectedRow {
    // indexPath를 이용하여 선택된 행의 정보를 얻을 수 있음
}

🍀 dequeueReusableCell(withIdentifier:for:)

  • 재사용 가능한 셀을 가져오거나 새로 생성
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
// "Cell"은 셀의 재사용 식별자로, cellForRowAt 메서드에서 사용됩니다.

🍀 beginUpdates() / endUpdates()

  • 여러 행을 한 번에 삽입, 삭제, 리로드할 때 사용하여 애니메이션을 적용
tableView.beginUpdates()
// 여기에 삽입, 삭제, 리로드 등의 변경 작업을 수행합니다.
tableView.endUpdates()
// 애니메이션과 함께 변경 사항을 테이블 뷰에 적용합니다.

🍀 deleteRows(at:with:) / insertRows(at:with:) / reloadRows(at:with:)

  • 특정 위치의 행을 삭제, 삽입, 리로드
tableView.deleteRows(at: [indexPath], with: .automatic)
// indexPath는 삭제할 행의 인덱스 경로입니다. 다수의 행을 처리할 때에도 배열 형태로 전달됩니다.

tableView.insertRows(at: [indexPath], with: .fade)
// 새로운 행을 삽입할 때 사용됩니다. indexPath는 삽입할 위치의 인덱스 경로입니다.

tableView.reloadRows(at: [indexPath], with: .none)
// 특정 행의 내용을 다시 로드할 때 사용됩니다. indexPath는 리로드할 행의 인덱스 경로입니다.

🍏 UICollectionView

◻️ 주요 기능과 역할

  • 다양한 레이아웃 지원

    • 그리드 레이아웃, 플로우 레이아웃 등 다양한 레이아웃을 제공하여 데이터를 다양한 방식으로 표시
  • 셀 커스터마이징

    • UICollectionViewCell 클래스를 사용하여 각 셀의 모양과 동작을 정의
    • 다양한 컨텐츠 유형을 셀에 표시
  • 데이터 소스 및 델리게이트 패턴

    • UICollectionViewDataSource 프로토콜과 UICollectionViewDelegate 프로토콜을 통해 데이터를 제공하고
    • 셀의 선택 및 인터랙션을 처리 가능
  • 셀 재사용

    • dequeueReusableCell(withReuseIdentifier:for:)
      메서드를 사용하여 재사용 가능한 셀을 가져오거나 새로 생성하여 효율적인 메모리 관리가능
  • 셀의 크기와 위치 제어

    • UICollectionViewDelegateFlowLayout 프로토콜을 사용하여 각 셀의 크기와 위치를 동적으로 제어
    • 사용자 정의 레이아웃 클래스를 통해 더 복잡한 레이아웃도 구현 가능
  • 애니메이션 및 선택 관리

    • 셀 삽입, 삭제, 재배치 등의 작업에 애니메이션을 적용
    • 선택된 셀의 관리도 가능

◻️ 주요 메서드와 속성

🍀reloadData()

  • 컬렉션 뷰의 데이터를 다시 로드하고 새로운 데이터로 업데이트
collectionView.reloadData()

🍀 indexPathsForSelectedItems

  • 현재 선택된 셀의 인덱스 경로들을 배열로 가져옴
if let selectedIndexPaths = collectionView.indexPathsForSelectedItems {
    // selectedIndexPaths 배열을 통해 현재 선택된 셀들의 인덱스 경로들을 사용할 수 있음
}

🍀 dequeueReusableCell(withReuseIdentifier:for:)

  • 재사용 가능한 셀을 가져오거나 새로 생성
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
// "Cell"은 셀의 재사용 식별자로, cellForItemAt 메서드에서 사용됩니다.

🍀 performBatchUpdates(_:completion:)

  • 여러 셀을 한 번에 삽입, 삭제, 리로드할 때 사용하여 애니메이션을 적용
collectionView.performBatchUpdates({
    // 여기에 삽입, 삭제, 리로드 등의 변경 작업을 수행합니다.
}, completion: { finished in
    // 애니메이션과 함께 변경 사항을 적용한 후 호출되는 완료 핸들러
})

🍀deleteItems(at:) / insertItems(at:) / reloadItems(at:)

  • 특정 위치의 셀을 삭제, 삽입, 리로드
collectionView.performBatchUpdates({
    // 여기에 삽입, 삭제, 리로드 등의 변경 작업을 수행합니다.
}, completion: { finished in
    // 애니메이션과 함께 변경 사항을 적용한 후 호출되는 완료 핸들러
})

🍏 UIControl

◻️ 주요 기능과 역할

  • 이벤트 처리:

    • 사용자의 터치 이벤트와 관련하여 액션을 수행할 수 있는 기능을 제공
    • 사용자가 제스처를 수행하면 UIControl 객체는 해당 액션을 호출
  • 액션과 타겟 메커니즘

    • addTarget(_:action:for:) 메서드를 사용하여 이벤트가 발생했을 때 호출할 메서드(액션)와 타겟 객체를 설정 가능
  • 다양한 하위 클래스:

    • 버튼, 슬라이더, 스위치 등 여러 하위 클래스를 제공하여 다양한 사용자 인터페이스 요소를 구현
  • 상태 관리

    • isEnabled, isSelected, isHighlighted 등의 프로퍼티를 통해 객체의 상태를 관리
    • 사용자 인터랙션을 제어 가능
  • 커스텀 컨트롤

    • 필요에 따라 UIControl을 직접 하위 클래스화하여 사용자 정의 컨트롤을 생성할 수 있음
    • 터치 이벤트에 반응하는 특수한 동작을 구현가능

◻️ 주요 메서드와 속성

🍀 addTarget(_:action:for:)

  • 특정 이벤트(예: .touchUpInside)가 발생했을 때 호출할 메서드(액션)와 타겟 객체를 설정
let button = UIButton(type: .system)
button.setTitle("Tap me!", for: .normal)
button.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
view.addSubview(button)

🍀 sendActions(for:)

  • 지정된 이벤트에 대해 해당 컨트롤의 액션을 호출
button.sendActions(for: .touchUpInside)

🍀 isEnabled

  • 컨트롤이 사용 가능한지 여부를 나타내는 불리언 값
button.isEnabled = false

🍀 isSelected

  • 컨트롤의 선택 여부를 나타내는 불리언 값
button.isSelected = true

🍀 isHighlighted

  • 컨트롤이 강조 표시되는지 여부를 나타내는 불리언 값
button.isHighlighted = true
profile
개발이 어려운 나를 위한... 개발노트

0개의 댓글