시각적 요소의 구성
컨테이너 및 레이아웃 관리
그리기 및 애니메이션
이벤트 처리:
뷰의 레이아웃 업데이트
애니메이션 및 상태 관리
제스처 인식기 관리
override func viewDidLoad() {
super.viewDidLoad()
// 화면이 처음 로드될 때 호출됩니다.
초기화 코드를 작성하는 데 사용됩니다.
setupUI()
}
let subview = UIView(frame: CGRect(x: 20, y: 20, width: 100, height: 100))
subview.backgroundColor = .blue
self.view.addSubview(subview)
self.view.removeFromSuperview()
self.view.setNeedsLayout()
self.view.setNeedsDisplay()
self.view.layoutIfNeeded()
override func layoutSubviews() {
super.layoutSubviews()
// 사용자 정의 레이아웃 로직 추가
}
// gestureRecognizers 배열을 설정하거나 가져올 수 있습니다.
self.view.gestureRecognizers = [tapGesture, swipeGesture]
화면관리
사용자 인터페이스 관리
데이터 관리
라이프사이클 관리
상태 관리
사용자 입력 처리
override func viewDidLoad() {
super.viewDidLoad()
// 화면이 처음 로드될 때 호출됩니다.
일반적으로 초기화 코드를 작성하는 데 사용됩니다.
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// 화면이 나타나기 직전에 호출됩니다.
화면이 표시되기 전에 필요한 작업을 수행할 수 있습니다.
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// 화면이 완전히 나타난 후 호출됩니다. 화면이 사용자에게 보여지고 나서 추가적인 작업을 수행할 수 있습니다.
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// 화면이 사라지기 직전에 호출됩니다.
다른 화면으로 전환되기 전에 필요한 정리 작업을 수행할 수 있습니다.
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// 화면이 완전히 사라진 후 호출됩니다.
화면이 완전히 사라진 후 추가적인 정리 작업을 수행할 수 있습니다.
}
present(viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)?)
dismiss(animated: Bool, completion: (() -> Void)?)
addChild(childController: UIViewController)
removeFromParent()
override func encodeRestorableState(with coder: NSCoder)
override func decodeRestorableState(with coder: NSCoder)
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
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?)
데이터 표시
유연한 레이아웃 관리
셀 커스터마이징
데이터 소스 및 델리게이트 패턴
다양한 스타일 및 편집 모드
스크롤 및 선택 관리
tableView.reloadData()
if let indexPath = tableView.indexPathForSelectedRow {
// indexPath를 이용하여 선택된 행의 정보를 얻을 수 있음
}
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
// "Cell"은 셀의 재사용 식별자로, cellForRowAt 메서드에서 사용됩니다.
tableView.beginUpdates()
// 여기에 삽입, 삭제, 리로드 등의 변경 작업을 수행합니다.
tableView.endUpdates()
// 애니메이션과 함께 변경 사항을 테이블 뷰에 적용합니다.
tableView.deleteRows(at: [indexPath], with: .automatic)
// indexPath는 삭제할 행의 인덱스 경로입니다. 다수의 행을 처리할 때에도 배열 형태로 전달됩니다.
tableView.insertRows(at: [indexPath], with: .fade)
// 새로운 행을 삽입할 때 사용됩니다. indexPath는 삽입할 위치의 인덱스 경로입니다.
tableView.reloadRows(at: [indexPath], with: .none)
// 특정 행의 내용을 다시 로드할 때 사용됩니다. indexPath는 리로드할 행의 인덱스 경로입니다.
다양한 레이아웃 지원
셀 커스터마이징
데이터 소스 및 델리게이트 패턴
셀 재사용
셀의 크기와 위치 제어
애니메이션 및 선택 관리
collectionView.reloadData()
if let selectedIndexPaths = collectionView.indexPathsForSelectedItems {
// selectedIndexPaths 배열을 통해 현재 선택된 셀들의 인덱스 경로들을 사용할 수 있음
}
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
// "Cell"은 셀의 재사용 식별자로, cellForItemAt 메서드에서 사용됩니다.
collectionView.performBatchUpdates({
// 여기에 삽입, 삭제, 리로드 등의 변경 작업을 수행합니다.
}, completion: { finished in
// 애니메이션과 함께 변경 사항을 적용한 후 호출되는 완료 핸들러
})
collectionView.performBatchUpdates({
// 여기에 삽입, 삭제, 리로드 등의 변경 작업을 수행합니다.
}, completion: { finished in
// 애니메이션과 함께 변경 사항을 적용한 후 호출되는 완료 핸들러
})
이벤트 처리:
액션과 타겟 메커니즘
다양한 하위 클래스:
상태 관리
커스텀 컨트롤
let button = UIButton(type: .system)
button.setTitle("Tap me!", for: .normal)
button.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
view.addSubview(button)
button.sendActions(for: .touchUpInside)
button.isEnabled = false
button.isSelected = true
button.isHighlighted = true