23.08.22 화

2023. 8. 31. 00:50·Study/🌱 SeSAC

 

💡 NSLayoutConstraints → addConstraints 사용하기

  1. isActive
  2. addConstraints

Untitled.png

constraints → 여러개 추가

constraint → 하나 추가

addConstraints로 레이아웃에 대한 항목을 한 눈에 볼 수 있다.

 

 

Untitled.png

 

✅ NSLayoutAnchor

Untitled.png

centerXAnchor → x축 중앙

Untitled.png

뷰 객체가 safeArea를 벗어난다.

 

 

Untitled.pngUntitled.png

safeArea 위로 constraints를 잡기 위해 view.safeAreaLayoutGuide.bottomAnchor 사용

 

🚨 view.addSubView를 작성하지 않는다면 런타임 오류 발생한다.

Untitled.png

레이아웃을 잘못 잡은 것 처럼 오류가 난다.

뷰가 올라와 있어야 레이아웃을 지정하는데 올라오지 않은 뷰를 레이아웃 잡으려 하니 레이아웃 관련한 오류 문구가 나타남

→ 레이아웃 오류가 발생할 때 addSubView와 translatesAutoresizingMaskIntoConstraints 설정 확인하기


💡SnapKit 사용하기

스토리 보드를 사용하지 않고 소스 코드로 레이아웃을 설정할 때, 간략하게 사용할 수 있는 라이브러리

 

✔️ package 가져오기

Untitled.png

위에서 생성한 버튼 클릭 시 화면 전환이 되도록 구현

 

✔️ SnapViewController 생성

Untitled.png

 

✔️ SnapViewController로 화면 전환하기

Untitled.png

SnapViewController에 대한 인스턴스를 생성하여 넘겨주면 된다!

let sb = UIStoryboard 어쩌구 코드 없이 가능함 → 뷰컨 생성을 하지 않았기 때문에 스토리 보드 연결 코드가 불가능하다.

 

 

Untitled.png

SnapKit의 LayoutConstraintItem에서 내부적으로 translatesAutoresizingMaskIntoConstraints가 호출되고 있기 때문에, 프로젝트에 명시적으로 작성하지 않아도 된다.

 

✅ makeConstraints

Untitled.png

레이아웃 제약 조건을 설정할 때 사용

Untitled.pngUntitled.png

 

 

 

Untitled.png

같은 크기의 조건을 준다면 나열하여 한 줄로 사용해도 됨

Untitled.png

같은 지점이라면 center, size 등으로 한번에 설정 가능 → 코드 간결화

// make.leading.equalTo(view.safeAreaLayoutGuide)
// make.trailing.equalTo(view.safeAreaLayoutGuide)
// make.leading.trailing.equalTo(view.safeAreaLayoutGuide)
make.horizontalEdges.equalTo(view.safeAreaLayoutGuide)

→ 모두 같은 코드

trailing, leading → horizontalEdges

 

✅ addSubView의 순서

addSubView를 선언하는 순서대로 뷰가 추가가 된다.

뷰가 나타나지 않는다면 addSubView 선언 위치를 확인해 볼 필요가 있다.

Untitled.pngUntitled.png

✅ superView

뷰를 어디에 추가하냐에 따라 해당 뷰의 super view가 달라진다.

yellowView를 redView에 추가하면 위와 같이 redView의 조건 내에 들어간다.

 

✅ offset inset

Untitled.pngUntitled.pngUntitled.pngUntitled.png

 

✅ RTL (Right To Left): leading / trailing vs left / right

보통 leading / trailing으로 레이아웃을 설정하는 이유는 Localization 때문이다.

leading / trailing 으로 설정하면 RTL 지역에서는 화면이 뒤집힌 형태로 표시가 된다.

left / right로 설정하면 Localization과 상관없이 같은 방향으로 나온다.

 

 

✅ 익명함수를 이용하여 뷰의 고정적인 속성 지정하기

Untitled.pngUntitled.pngUntitled.png

뷰의 여러 속성을 지정할 때 변경이 되지 않을 속성들은 함수를 만들어 관리한다.

매번 뷰 마다 구현하고 선언해야 하며 함수 명 정하는 귀찮음도 존재하기 때문에 익명함수를 사용한다.

 

multipliedBy()

Untitled.png

높이를 비율로 잡기

 

Untitled.png

→ addSubview 코드 줄이기

[photoImageView, titleTextField].forEach { item in
    view.addSubview(item)
}

[photoImageView, titleTextField].forEach {
    view.addSubview($0)
}

→ forEach를 사용해보기


💡 Privacy & Authorization

어떻게 하면 사용자 경험을 방해하지 않고 더 많은 통제권을 줄 수 있을까

사용자에게 data privacy에 대해 더 많은 통제권을 준다

필요 이상의 정보를 요청하지 않음으로써 사용자와의 신뢰 구축

원하는 것을 최소화 함으로써 더 나은 사용자 환경을 제공

사용자를 귀찮게 하면 안됨

💡 위치 서비스

iOS14 precise: On → 정확한 위치를 알려줄지 말지

위치 권한 진행 방법을 결정 하려면 권한 부여 상태와 정확도 값을 모두 확인해야 한다.

위치서비스

  • o 권한 요청
    • 권한 허용
      • 사용자 정보 접근 가능
      • 추후 거부 (설정 → 옵션 끄기)
        • ios 시스템 설정 유도
    • 권한 거부
      • ios 시스템 설정 유도
  • x 권한 없음
    • alert → ios 시스템 설정 유도

하드웨어 관련 코드는 잘 바뀌지 않음

 

✅ 위치 서비스 구현

1. 위치 import

import CoreLocation 

2. 위치 매니저 생성: 위치에 대한 대부분을 담당

let locationManager = CLLocationManager() 

3. 위치 프로토콜 연결

locationManager.delegate = self 

4. 프로토콜 선언

Untitled.png

 

5. 사용자의 위치를 성공적으로 가지고 온 경우

Untitled.pngUntitled.png

 

권한 요청 메세지 띄우기

Untitled.png

 

value → 권한 목적에 대해 상세 명시

Untitled.pngUntitled.pngUntitled.png

설정 → privacy에서 설정할 수 있는 권한 내용

 

✔️ 사용자의 위치 서비스는 메인스레드에서 요청하지 말라는 문구 → 글로벌에서 요청

Untitled.pngUntitled.png

 

 

 

 

Untitled.png

권한을 체크하는 코드

권한을 체크한 후 요청을 보내야 함

 

 

Untitled.pngUntitled.png

 

매개변수에 들어온 내용의 case들이 자동 완성 됨

Untitled.png

 

Untitled.png

 

권한 요청 과정 한 단계 마다 사용자 권한을 체크해야 한다.

Untitled.pngUntitled.pngUntitled.png

 

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

23.08.24 목  (0) 2023.08.31
23.08.23 수  (1) 2023.08.31
23.08.21 월  (1) 2023.08.27
23.08.18 금  (0) 2023.08.27
23.08.14 월  (0) 2023.08.27
'Study/🌱 SeSAC' 카테고리의 다른 글
  • 23.08.24 목
  • 23.08.23 수
  • 23.08.21 월
  • 23.08.18 금
김졀니
김졀니
🍎 iOS 개발
  • 김졀니
    졀니의 개발 공부✨
    김졀니
  • 전체
    오늘
    어제
    • 분류 전체보기
      • iOS
        • Swift
        • UIKit&SwiftUI
        • RxSwift&Combine
        • WWDC
      • Study
        • 🚨 TroubleShooting
        • 🌱 SeSAC
  • 블로그 메뉴

    • 홈
    • Github
  • 인기 글

  • 최근 글

  • 태그

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

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

티스토리툴바