DailyPin - 출시 프로젝트 회고
·
iOS/🌱 SeSAC
새싹에 합격하고 힘차게 달려오다보니 출시 프로젝트를 결국엔 마주하게 되었고, 결국 출시까지 완료하게 되었다!! https://apps.apple.com/kr/app/dailypin-장소일기/id6470025950 ‎DailyPin - 장소일기 ‎매일 내가 다녀온 장소에 핀을 찍어 기록을 해보세요! 장소 기록을 통해 무엇을 했는지 돌아볼 수 있습니다. 장소를 검색하여 찾을 수도 있고, 원하는 장소를 지도에서 길게 눌러 선택할 수도 apps.apple.com 💡 기획 어떠한 앱을 만들면 좋을까.. 루틴 관리 어플을 만들까 고민도 해봤지만, API 통신 기능을 사용하고 싶었기 때문에 다른 주제를 고민하게 되었다. 평소 나의 추억들을 기록하는 것을 좋아한다. 여행을 다녀오거나 한 달 동안 다녀온 곳, 먹은 것 ..
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 importimport CoreLocation 위치 매니저 인스턴스 생성private let locationManager = CLLocationManager() delegate 연결locationManager.delegate = self 프로토콜 연결해주기extension MainMapViewController: CLLocationManagerDelegate { // 사용자의 위치를 성공적..