사용했던 UI요소
UITableView
UIImageView
이미지를 사이즈,위치에 맞춰 보여주는 것UIImage
는 픽셀을 포함하고 있습니다.@2x
, @3x
파일이름을 사용합니다.UIButton
: 탭하면 응답하므로 조취를 취할 수 있습니다.UIViewController
: 하나의 화면을 표시하는데 필요한 모든 기본 디스플레이 기술을 제공합니다.UIAlertViewController
: 경고를 보여주는 뷰컨트롤러 ( 사용자가 무언가를 확인하거나 선택해야 할 때 유용합니다.)UIBarButtonItem
: 탭바나 툴바에서 사용하는 버튼UIColor
UIActivityViewController
: 컨텐츠 공유, 인쇄, 이미지저장 등을 처리할 수 있는 클래스Bundle
: 프로젝트에서 빌드한 asset(자산)들을 사용할 수 있습니다.FileManager
: 파일시스템을 읽거나 쓸 수 있습니다.random(in:)
: 난수를 생성할 수 있는 메서드UIView와 CALayer의 차이 , UIColor와 CGColor의 차이
UIView를 상위수준, CALayer를 하위수준으로 본다면, CALayer처럼 하위수준 애플리케이션위에 UIView와 같은 상위수준이 구축됩니다.
CGColor
: 코어 그래픽스(Core Graphics)프레임워크의 데이터타입 중 하나
색상을 해석하는 방법이 명시되어있는 색상 공간(color space)이 있는 색상(color)을 정의하는 요소의 집합입니다
→ 즉, 코어 그래픽스와 관련된 색상은 모두 CGColor로 지정
UIColor
: 색상 데이터 및, 때로는 불투명도(알파값)를 저장하는 객체
UIColor는 NSObject를 상속받으며, UIKit 프레임워크와 연결되어있습니다.
UIKit은 매우 기본적인 색상에 대한 정의를 제공합니다.
UIKit을 사용할지, CALayer사용해야할지 정해야한다면 Xcode가 표시해줍니다.
UIKit는 UIColor , CALayer는 CGColor 사용
https://zeddios.tistory.com/239 - zedd 블로그
인터페이스빌더 특징
코드 리뷰
Project1에서 리소스 경로받아오는 코드
let items = try! fm.contentsOfDirectory(atPath: path)
path에서 리소스 경로에 대해 참조합니다.
만약 디렉토리가 실제로 존재하지 않았을 경우 contentsOfDirectory()호출이 실패하고 에러가 발생합니다.
하지만 경로를 직접 얻었기 때문에 이 코드가 작동할 것이라는 것을 강제언래핑을 사용합니다.
즉, 강제언래핑을 사용한다는 의미는 오류가 발생하지 않기 때문에 오류를 찾도록 하지 않는다는 의미입니다.
⚠️ 그러나 코드오타인 경우 앱이 충돌할 것입니다.
스토리보드와 코드를 연결하는 코드
let cell = tableView.dequeueReusableCell(withIdentifier: "Picture", for: indexPath)
if let vc = storyboard?.instantiateViewController(withIdentifier: "Detail") as? DetailViewController {
}
식별자를 통하여 스토리보드와 코드를 연결하는 코드입니다.
2번째 뷰컨트롤러객체를 생성하는 코드는 if let
과 as?
가 사용되었다는 의미는 DetailViewController에 selectedImage프로퍼티가 있기 때문에 일반적인 UIViewController에는 없으며, instantiateViewController()에서 반환한 값에만 있으므로 타입캐스팅을 통해 접근할 수 있습니다.
🌟 만약 커스텀셀에도 프로퍼티를 사용하고 싶은 경우 2번째 코드와 같이 타입캐스팅을 통해 접근합니다.
디스크로부터 이미지를 로드하기 위한 코드
let fm = FileManager.default
let path = Bundle.main.resourcePath!
let items = try! fm.contentsOfDirectory(atPath: path)
// 앱 번들에 있는 모든 항목의 배열을 제공하지만 원하는 것을 구분하기위해 hasSuffix()메서드사용