💡 NSLayoutConstraints → addConstraints 사용하기
- isActive
- addConstraints
constraints → 여러개 추가
constraint → 하나 추가
addConstraints로 레이아웃에 대한 항목을 한 눈에 볼 수 있다.
✅ NSLayoutAnchor
centerXAnchor → x축 중앙
뷰 객체가 safeArea를 벗어난다.
safeArea 위로 constraints를 잡기 위해 view.safeAreaLayoutGuide.bottomAnchor 사용
🚨 view.addSubView를 작성하지 않는다면 런타임 오류 발생한다.
레이아웃을 잘못 잡은 것 처럼 오류가 난다.
뷰가 올라와 있어야 레이아웃을 지정하는데 올라오지 않은 뷰를 레이아웃 잡으려 하니 레이아웃 관련한 오류 문구가 나타남
→ 레이아웃 오류가 발생할 때 addSubView와 translatesAutoresizingMaskIntoConstraints 설정 확인하기
💡SnapKit 사용하기
스토리 보드를 사용하지 않고 소스 코드로 레이아웃을 설정할 때, 간략하게 사용할 수 있는 라이브러리
✔️ package 가져오기
위에서 생성한 버튼 클릭 시 화면 전환이 되도록 구현
✔️ SnapViewController 생성
✔️ SnapViewController로 화면 전환하기
SnapViewController에 대한 인스턴스를 생성하여 넘겨주면 된다!
let sb = UIStoryboard 어쩌구 코드 없이 가능함 → 뷰컨 생성을 하지 않았기 때문에 스토리 보드 연결 코드가 불가능하다.
SnapKit의 LayoutConstraintItem에서 내부적으로 translatesAutoresizingMaskIntoConstraints가 호출되고 있기 때문에, 프로젝트에 명시적으로 작성하지 않아도 된다.
✅ makeConstraints
레이아웃 제약 조건을 설정할 때 사용
같은 크기의 조건을 준다면 나열하여 한 줄로 사용해도 됨
같은 지점이라면 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 선언 위치를 확인해 볼 필요가 있다.
✅ superView
뷰를 어디에 추가하냐에 따라 해당 뷰의 super view가 달라진다.
yellowView를 redView에 추가하면 위와 같이 redView의 조건 내에 들어간다.
✅ offset inset
✅ RTL (Right To Left): leading / trailing vs left / right
보통 leading / trailing으로 레이아웃을 설정하는 이유는 Localization 때문이다.
leading / trailing 으로 설정하면 RTL 지역에서는 화면이 뒤집힌 형태로 표시가 된다.
left / right로 설정하면 Localization과 상관없이 같은 방향으로 나온다.
✅ 익명함수를 이용하여 뷰의 고정적인 속성 지정하기
뷰의 여러 속성을 지정할 때 변경이 되지 않을 속성들은 함수를 만들어 관리한다.
매번 뷰 마다 구현하고 선언해야 하며 함수 명 정하는 귀찮음도 존재하기 때문에 익명함수를 사용한다.
multipliedBy()
높이를 비율로 잡기
→ 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. 프로토콜 선언
5. 사용자의 위치를 성공적으로 가지고 온 경우
권한 요청 메세지 띄우기
value → 권한 목적에 대해 상세 명시
설정 → privacy에서 설정할 수 있는 권한 내용
✔️ 사용자의 위치 서비스는 메인스레드에서 요청하지 말라는 문구 → 글로벌에서 요청
권한을 체크하는 코드
권한을 체크한 후 요청을 보내야 함
매개변수에 들어온 내용의 case들이 자동 완성 됨
권한 요청 과정 한 단계 마다 사용자 권한을 체크해야 한다.
'iOS > 🌱 SeSAC' 카테고리의 다른 글
23.08.24 목 (0) | 2023.08.31 |
---|---|
23.08.23 수 (0) | 2023.08.31 |
23.08.21 월 (1) | 2023.08.27 |
23.08.18 금 (0) | 2023.08.27 |
23.08.14 월 (0) | 2023.08.27 |