23.08.24 목

2023. 8. 31. 01:39·Study/🌱 SeSAC
목차
  1. 💡 카메라
  2. 🔎 갤러리에 접근하기
  3. ✅ 사진을 선택하여 뷰에 띄우기
  4. 🔎 카메라
  5. 💡 Generic
  6. ✅ T (Type Parameters)
  7. ✅ Type Constraints
  8. 💡 화면 전환코드 제네릭으로 구현하기
  9. 💡 메인 스토리보드 없이 실행하기
  10. ✅ 메인 스토리보드 삭제
  11. ✅ 스토리보드 관련 내용 삭제하기
  12. ✅ SceneDelegate에서 시작 화면 지정하기
  13. 💡 init ( override / required)
  14. ✅ override init
  15. ✅ required init
  16. 💡 SnapKit TableView
  17. 시스템 셀 사용하기
  18. 🤦‍♀️

💡 카메라

권한: 촬영, 갤러리, 마이크

ImagePickerControlller → deprecated 예정

⇒ PHPicker

🔎 갤러리에 접근하기

  1. 인스턴스 가져오기
let picker = UIImagePickerController() 

Untitled.pngUntitled.png

photoLibrary, savedPhotosAlbum → will be deprecated

camera는 아직 사용 가능

  1. available - 갤러리에 접근할 수 있는지 권한

Untitled.png

단독으로 사진만 가져오고 싶다 → 권한 안물어봐도 됨

민감한 데이터 혹은 정보 사용 등 경우 권한 물어봐야 함

⇒ 갤러리를 가지고 오는 권한과 갤러리 내 데이터 사용하는 권한은 다름!

Untitled.png

UIImagePickerController는 navigationController를 상속받아 사용한다.

Untitled.png

✅ 사진을 선택하여 뷰에 띄우기

취소 버튼과 사진 선택 구현

Untitled.pngUntitled.png

미디어에 대한 정보 선택이 끝났을 때 해줘야하는 내용 작성

Untitled.pngUntitled.png

InfoKey로 다양한 타입의 사진 접근이 가능함

여러 사진을 선택해야 한다면 PHPicker 사용하는 것이 좋음

🔎 카메라

Untitled.png

카메라는 민감한 정보를 다루는 것이기 때문에 권한 체크가 필요함

Untitled.pngUntitled.png

시뮬에서는 카메라 작동이 안된다.

Untitled.pngUntitled.png

originalImage로 설정했기 때문에 편집 사진이 적용 안된다

→ editedImage로 설정 바꾸기

✔️ UIFontPickerViewController / UIColorPickerViewController

Untitled.pngUntitled.png


💡 Generic

Generic: 타입에 유연하게 대응하기 위한 요소

제네릭으로 구현한 타입과 기능은 재사용 하기도 쉽고, 코드의 중복도 줄일 수 있기 때문에 깔끔하고 추상적인 표현이 가능하다.

Untitled.png

같은 기능의 함수지만 타입 때문에 여러번 구현해야 하는 불편함

Jack이라는 제네릭 타입으로 선언

Untitled.pngUntitled.png

매개변수 값이 bool 값과 같이 연산이 불가능 할 수도 있다

Untitled.png

연산이 가능한 타입이 들어와야 함을 지정해줌

Untitled.png

UIView 타입이 들어와야 함을 명시

Untitled.png

✅ T (Type Parameters)

제네릭 타입은 대체로 “T”를 사용

타입의 종류를 알려주지 않지만, 모두 같은 타입이 들어갈 것을 암시한다. 플레이스 홀더와 같은 역할을 한다.

타입 파라미터를 여러 개 쓸 경우 그 다음 많이 사용하는 이름

“U” → UpperCased

✅ Type Constraints

Untitled.png

타입에 제약을 설정할 수 있다

클래스 제약이나 프로토콜 제약으로 type constraints를 지정

💡 화면 전환코드 제네릭으로 구현하기

Untitled.pngUntitled.png

⇒ T를 함수 내에서 사용하지 않아서 뜨는 문구임!

메타 타입으로 확장

“고래밥” > String

String.self > String.Type

메타 타입 정의

Untitled.pngUntitled.pngUntitled.png

클래스의 인스턴스를 넘기는 것이 아니라 클래스 자체를 넘겨주기

💡 메인 스토리보드 없이 실행하기

✅ 메인 스토리보드 삭제

Untitled.png

✅ 스토리보드 관련 내용 삭제하기

info.plist

Untitled.png

Target - Build Settings

Untitled.png

✅ SceneDelegate에서 시작 화면 지정하기

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {                  guard let scene = (scene as? UIWindowScene) else { return }         window = UIWindow(windowScene: scene)         let vc = CustomViewController()         window?.rootViewController = vc         window?.makeKeyAndVisible()     } 

💡 init ( override / required)

✅ override init

Untitled.png

init → UIView에 정의됨

Interface Builder를 사용하지 않고, UIView를 상속 받은 Custom Class를 코드를 구성할 때 사용되는 초기화 구문

✅ required init

required Initializer: 프로토콜에서 생성한 초기화 구문이라는 것을 나타내기 위한 키워드

Untitled.png

NSCoder에 정의 된 init

Untitled.pngUntitled.pngUntitled.png

  • 스토리 보드와 같이 쓸 때는 uinib을 변환하여 사용하기 때문에 required init이 사용되고,

코드 베이스로 UI를 구성할 때는 override init을 사용한다.

  • XIB → NIB 변환 과정에서 객체 생성 시 필요한 init 구문(storyboard)
  • NSCoder가 담당함
  • Interface Builder에서 생성된 view들이 초기화 될 때 실행되는 구문

📍 required init은 코드베이스로 사용할 때도 필수적으로 코드를 작성해야 하는 것이 디폴트

하지만 실행되면 안됨

Untitled.png

‘?’로 실패할 수 있는 생성자임을 명시해준다.

💡 SnapKit TableView

시스템 셀 사용하기

Untitled.png

UITableViewCell MetaType을 이용하여 등록

셀 높이 유동적으로 쓰기

  1. automaticDimension

Untitled.png

  1. numberOfLines

Untitled.png

  1. Layout

고정높이 x, 상하좌우 오토레이아웃

셀이 컨텐츠 크기에 따라 높이가 늘어난 것을 확인한 후 구현

var isExpand = false

Untitled.pngUntitled.png

각 셀 마다 isExpand 값을 가지고 있어야 함

구조체 내에 isExpand 저장 프로퍼티를 만들어서 선택한 셀만 갱신하기

테이블 뷰 전체 갱신이 아닌 테이블 뷰 셀만 갱신하기

Untitled.png

tableView.reloadRows(at: IndexPath(row: 3, section: 0), with: .automatic) 

section과 row를 특정하여 해당 셀만 갱신할 수 있다.

🤦‍♀️

Untitled.png

더보기가 잘 안되었던 이유가 아니었을까..

'Study > 🌱 SeSAC' 카테고리의 다른 글

23.08.28 월  (0) 2023.08.31
23.08.25 금  (0) 2023.08.31
23.08.23 수  (2) 2023.08.31
23.08.22 화  (0) 2023.08.31
23.08.21 월  (1) 2023.08.27
  1. 💡 카메라
  2. 🔎 갤러리에 접근하기
  3. ✅ 사진을 선택하여 뷰에 띄우기
  4. 🔎 카메라
  5. 💡 Generic
  6. ✅ T (Type Parameters)
  7. ✅ Type Constraints
  8. 💡 화면 전환코드 제네릭으로 구현하기
  9. 💡 메인 스토리보드 없이 실행하기
  10. ✅ 메인 스토리보드 삭제
  11. ✅ 스토리보드 관련 내용 삭제하기
  12. ✅ SceneDelegate에서 시작 화면 지정하기
  13. 💡 init ( override / required)
  14. ✅ override init
  15. ✅ required init
  16. 💡 SnapKit TableView
  17. 시스템 셀 사용하기
  18. 🤦‍♀️
'Study/🌱 SeSAC' 카테고리의 다른 글
  • 23.08.28 월
  • 23.08.25 금
  • 23.08.23 수
  • 23.08.22 화
김졀니
김졀니
🍎 iOS 개발
  • 김졀니
    졀니의 개발 공부✨
    김졀니
  • 전체
    오늘
    어제
    • 분류 전체보기
      • iOS
        • Swift
        • UIKit&SwiftUI
        • RxSwift&Combine
        • WWDC
      • Study
        • 🚨 TroubleShooting
        • 🌱 SeSAC
  • 블로그 메뉴

    • 홈
    • Github
  • 인기 글

  • 최근 글

  • 태그

    CLLocation
    swiftdata
    pointfree
    위치 권한
    wwdc23
    clipstobounds
    Realm
    이미지 캐싱
    concurrency
    actor
    kingfisher header
    Swift
    동시성프로그래밍
    인앱리뷰
    mapkit
    FileManager
    traits
    observable
    displayPriority
    @PropertyWrapper
    Drawing Cycle
    RxSwift
    OperationQueue
    layoutIfNeeded
    의존성 주입
    mainactor
    swift concurrency
    Sendable
    ReactorKit
    ios
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
김졀니
23.08.24 목
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.