23.11.03 금
·
iOS/🌱 SeSAC
💡 Tableview ✅ itemSelected vs modelSelected tableview의 didSelectRowAt 역할 itemSelected → 인덱스 데이터 modelSelected → 셀 데이터 두 기능이 따로 작동해서 TableView Delegate의 didSelectRowAt 메서드처럼 한 번에 두 데이터를 받고싶으면 결합을 해야한다. ✅ Operator - Observable.zip tableview는 didselectRowAt 기능을 사용하려면 zip을 사용하여 itemSelected와 modelSelected를 결합하여 사용해야 한다. ✔️ combineLatest vs zip 2개 이상의 Observable을 결합하여 하나의 Observable을 만든다는 점에서는 비슷하다. ..
23.11.02 목
·
iOS/🌱 SeSAC
💡 Disposable dispose를 호출하지 않으면 발생하는 경고 subscribe의 반환 값이 Disposable이다. 언젠가는 리소스가 정리되어야 한다는 의미 때문에 dispose를 호출하지 않으면 경고 문구가 나타나는 것이다. next 이벤트가 방출되면, completed와 disposed가 순서대로 실행되고 리소스를 정리한다. BehaviorSubject는 observable과 observer 역할을 모두 하기 때문에 언제 어떤 이벤트가 올지 모른다. 언제든 이벤트가 emit될 수 있는 상황이기 때문에 disposed 되지 않고, 메모리 상에 남아있게 된다. error 이벤트를 만나게 되면 바로 리소스 정리를 시작한다. 때문에 error 이벤트 전달 이후의 next 이벤트는 동작하지 않는다. ..
23.11.01 수
·
iOS/🌱 SeSAC
✅ 15 버전 업데이트 사항 에셋에 있는 리소스 사용 시 .이름 으로 사용할 수 있다. 편해짐! ui 프리뷰 💡 RxSwift ✅ UISwitch 구현하기 UIKit 방식 구현 RxSwift로 구현 observable이 bool 상태를 전달하여 Observer가 스위치 상태를 변경 → Observable 값을 생성하고, 전달한다. → Observer 받은 데이터를 기반으로 상태를 변경한다. 만약, 2초 후에 데이터를 변경하고 싶다면? isOn 값을 바꿔주면 변경된 값이 반영되게 해야한다. observable은 데이터를 전달하는 것만 가능하고, 이벤트를 받아 처리할 수는 없다. ✅ Observable과 Observer 이벤트를 전달하는 observable과 이벤트를 처리하는 observer Observab..
23.10.31 화
·
iOS/🌱 SeSAC
💡 알고리즘 ✅ 그래프 노드와 간선으로 구성된 자료구조 이를 통해 연결된 노드간의 관계를 표현할 수 있다. 노드(정점) ✔️ 인접행렬 장점: 노드의 연결 상태를 바로 알 수 있음 단점: 노드의 개수가 N이라고 하면 이 배열의 크기는 N*N이 된다. 특정 노드에 연결된 노드를 찾으려면 N번만큼 확인해줘야 한다. ✔️ 인접 리스트 노드별로 연결된 노드를 기록 장점: 실제로 연결된 노드의 정보만 알면 된다. 단점: i와 j 노드의 연결 상태를 바로알 수 없다. ✅ 트리 사이클이 없고 방향이 없는 그래프 특징: 두 점을 연결하는 경로는 유일하다. 루트 노드 - 부모가 없는 최상위 노드 부모 노드 - 루트노드 방향으로 직접 연결된 노드 자식 노드 형제 노드 - 같은 부모를 갖는 노드 리프 노드 - 자식이 없는 노..
[iOS/Swift] MapKit Annotation displayPriority 지정하기
·
iOS/🔎 swift 정리하기
같은 장소에 어노테이션이 두개가 표시될 때 나는 고정으로 있는 어노테이션 보다 검색 결과 어노테이션이 더 상단으로 보이게 하고싶었다. 이전까지 나의 결과는 검색 결과 어노테이션이 가장 뒤로 가버리는 맘에 안드는 결과가 나왔다. 이 문제를 해결하기 위한 방법이 displayPriority이다! annotation view의 우선순위를 지정해주는 프로퍼티이다. MKMapViewDelegate의 viewFor에서 어노테이션을 등록할 때 우선순위를 지정해줬다. 기본으로 나타나 있는 어노테이션에는 .defaultLow 값을, 검색 결과로 위에 보여줄 annotation에는 .defaultHigh 값을 주었더니 원하는 결과가 나왔다! .defaultHigh가 아니어도 디폴트 값인 .required 여도 같은 결과가..
MapKit CustomAnnotation
·
iOS/🔎 swift 정리하기
플젝 진행하면서 정리한 내용입니다! 틀린 내용이 있을 수도 허접 할 수도 있습니다.. 지적 대 환영, 꿀팁 대 환영 맵킷에 대한 정보는 정말이지 별로 없다.. 정리하고 보니 별거 아닌 내용을 얼마나 붙잡고 있던걸까 흑흑 1. 커스텀 어노테이션 등록하기 (viewFor) 2. 어노테이션 선택에 따라 디자인 변경하기 (didSelect, didDeSelect) 3. 식별자가 다른 어노테이션을 만들어 서로 다른 기능을 하도록 구현하기 💡 커스텀 어노테이션 등록하기 해당 부분은 검색하면 정보가 꽤나 많이 나온다. 때문에 어렵지 않다. mapkit delegate는 연결되어 있을 것이고, delegate를 채택한 후 진행한다. MKMapViewDelegate에 구현된 viewFor 매개변수가 있는 메서드를 사용한..
[iOS/Swift] search bar 에 테두리와 그림자 동시 적용하기 - clipsToBounds
·
iOS/🚨 오류 그리고 해결
search bar의 cornerRadius를 적용하고, 그림자도 적용하려 하였다. cornerRadius는 clipsToBounds를 사용하여 layer 바깥을 잘라내어 적용이 되는데, 그림자는 layer 바깥에 적용하는 것이라 clipsToBounds값을 설정하는 데에 문제가 생긴다. clipsToBounds를 true로 설정하여 테두리 조건만 적용이 된 모습이다. 그림자를 적용하였지만 반영이 되지 않는다. 두가지 조건을 모두 적용하려면 어떻게 해야할까? 💡 그림자를 적용할 UIView를 만들자 파란색 uiview를 만들어 바깥에 배치할 uiview는 그림자를 적용하고, 내부에 들어갈 뷰는 corner radius를 적용시키면 된다. UIView의 위에 searchBar를 올린 후 각각 디자인을 적용..
[iOS/Swift] MapKit - 원하는 곳에 어노테이션을 찍어보자
·
iOS/🔎 swift 정리하기
맵뷰에서 선택하는 곳에 어노테이션을 찍어보자 1. 맵뷰에 탭 제스쳐를 추가한다. let tapGesture = UITapGestureRecognizer(target: self, action: #selector(mapViewTapped(_ :))) mapView.addGestureRecognizer(tapGesture) 2. sender.location(in: )을 통해 임의로 탭한 위치를 가져온다. @objc private func mapViewTapped(_ sender: UITapGestureRecognizer) { let location: CGPoint = sender.location(in: mainView.mapView) let mapPoint: CLLocationCoordinate2D = mai..
[iOS/Swift] MapKit - 위치 권한 설정을 구현해보자!
·
iOS/💻 iOS Study
위치 권한 진행 방법을 결정 하려면 권한 부여 상태와 정확도 값을 모두 확인해야 한다. 위치서비스 o 권한 요청 권한 허용 사용자 정보 접근 가능 추후 거부 (설정 → 옵션 끄기) ios 시스템 설정 유도 권한 거부 ios 시스템 설정 유도 x 권한 없음 alert → ios 시스템 설정 유도 CoreLocation import import CoreLocation 위치 매니저 인스턴스 생성 private let locationManager = CLLocationManager() delegate 연결 locationManager.delegate = self 프로토콜 연결해주기 extension MainMapViewController: CLLocationManagerDelegate { // 사용자의 위치를 ..
[iOS/Swift] Realm - 백업 및 복구 구현하기
·
iOS/🔎 swift 정리하기
💡 백업 / 복구 개인 앱의 경우 개개인에게 백업 복구의 책임을 넘긴다. 개발자 → 기능만 제공, 백업 알아서,, 구글 드라이브, 드랍박스로 백업하기 → 써드파티 프로그램의 정책으로 유지보수 비용이 높다 아이폰 파일 앱 사용하여 백업 복구하도록 하기 1. realm 파일 자체를 압축 마이그레이션 대응이 잘 되어야 한다. 사용자가 백업해두고 한참 뒤에 복구할 수 있기 때문 realm 파일을 복구할 때는 복구 완료 후 앱을 껐다 켜야 함 2. json으로 압축하기 다른 sql을 쓰더라도 대응하기 좋음 🔎 realm 파일 압축하기 백업하고자 하는 파일들의 경로 배열 생성 var urlPaths = [URL]() 도큐먼트 위치 guard let path = documentDirectoryPath() else {..