Day 05

모르는 점


  • Target-Action 디자인패턴
  • Gesture Recognizer 사용법

배운 점


  • 뷰의 상태변화와 뷰의 레이아웃 변화를 공부했다. viewDidLoad: 뷰가 메모리에 로드된 직후 호출되고, 1회 호출된다. viewWillAppear: 뷰가 표시되기 전에 호출된다. 다른 뷰로 이동했다가 다시 돌아올때도 호출된다. viewDidAppear: 뷰가 표시되고 나서 호출된다. viewWillDisappear: 뷰가 계층에서 사라지기 전에 호출된다. viewDidDisappear: 뷰가 계층에서 사라지고 호출된다. 레이아웃 변화 메서드는 레이아웃의 바운드나 위치등이 변경됐을 때 호출이 된다. viewWillLayoutSubviews: 서브뷰의 레이아웃을 변경하기 전에 호출된다. viewDidLayoutSubviews: 서브뷰의 레이아웃이 변경되고 호출된다.
  • UIImagePickerController에 대해서 공부했다. UIImagePickerController의 델리게이트는 필수는 아니지만 사진선택을 해서 가져오는 기능을 구현하기 위해서는 델리게이트를 사용해야 한다. ```swift class ViewController: UIViewController {

    lazy var imagePicker: UIImagePickerController = { let imagePicker = UIImagePickerController() imagePicker.delegate = self return imagePicker }()

    @IBAction func selectButton() { self.present(imagePicker, animated: true, completion: nil) }

    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() { super.viewDidLoad() imageView.contentMode = .scaleAspectFit }

}

extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { self.imageView.image = image }

    self.dismiss(animated: true, completion: nil)
} } ``` <br> - lazy는 프로퍼티가 바로 메모리에 로드되는 것이 아니라 사용하는 시점에 로드된다. 불필요한 메모리 낭비를 피할 수 있다. lazy는 var와 항상 같이 사용해야 하고 class와 struct에서 사용할 수 있다. 그리고 closure를 사용한다. <br> <br>