View의 Drawing Cycle
·
iOS/UIKit&SwiftUI
출시 프로젝트를 하면서 compositional layout을 사용하며 만난 오류를 해결하며 알게 된 내용을 정리해보고자 한다!Issue셀에 들어갈 데이터에 맞게 동적으로 높이를 지정해야 했는데, 레이아웃 구성 시 아무리 estimated를 지정해줘도 높이가 처음부터 알맞게 들어가지 않았다.여러 방법을 사용했지만 오른쪽 하단 날짜 레이블의 높이가 처음엔 맞지 않았고, 다른 날짜를 탭 후 다시 돌아오면 높이가 알맞게 들어오는 것을 알 수 있다.해결!layoutIfNeeded() 를 호출하여 문제를 해결하였다.추정치는 말 그대로 추정하여 높이를 설정하는 것이기 때문에 처음에 정확하게 들어갈 수 없었고, 셀에 데이터가 삽입 된 이후에 레이아웃 업데이트 요청을 해야했던 것이다..View의 Drawing Cycl..
RxSwift 정리하기
·
iOS/RxSwift&Combine
💡 RxSwift관찰 가능한 순차적 형태와 함수 형태의 연산자를 통해 비동기 이벤트를 위한 코드사용자가 언제 어떠한 버튼을 누를지 알 수 없기 때문에 비동기 처리가 필요하다.비동기 방식으로 이벤트를 전달하고 전달 받기 위해 RxSwift를 사용하는 것이다.이벤트를 생성하고 전달하는 Observable이벤트를 받아 처리하는 ObserverSubscribe를 하여 Observer가 이벤트를 받는다. 💡 Observable과 Observer이벤트 시퀀스를 비동기적으로 생성한다.Observable을 통해 이벤트를 방출(emit)할 수 있다.Observable과 Observer를 통해 Stream(데이터의 흐름)을 통제하고, Operator(just, of, take..)를 통해 ㄴㄴStream을 변경, 조작..
DailyPin - 출시 프로젝트 회고
·
Study/🌱 SeSAC
새싹에 합격하고 힘차게 달려오다보니 출시 프로젝트를 결국엔 마주하게 되었고, 결국 출시까지 완료하게 되었다!! https://apps.apple.com/kr/app/dailypin-장소일기/id6470025950 ‎DailyPin - 장소일기 ‎매일 내가 다녀온 장소에 핀을 찍어 기록을 해보세요! 장소 기록을 통해 무엇을 했는지 돌아볼 수 있습니다. 장소를 검색하여 찾을 수도 있고, 원하는 장소를 지도에서 길게 눌러 선택할 수도 apps.apple.com 💡 기획 어떠한 앱을 만들면 좋을까.. 루틴 관리 어플을 만들까 고민도 해봤지만, API 통신 기능을 사용하고 싶었기 때문에 다른 주제를 고민하게 되었다. 평소 나의 추억들을 기록하는 것을 좋아한다. 여행을 다녀오거나 한 달 동안 다녀온 곳, 먹은 것 ..
23.11.03 금
·
Study/🌱 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 목
·
Study/🌱 SeSAC
💡 Disposable dispose를 호출하지 않으면 발생하는 경고 subscribe의 반환 값이 Disposable이다. 언젠가는 리소스가 정리되어야 한다는 의미 때문에 dispose를 호출하지 않으면 경고 문구가 나타나는 것이다. next 이벤트가 방출되면, completed와 disposed가 순서대로 실행되고 리소스를 정리한다. BehaviorSubject는 observable과 observer 역할을 모두 하기 때문에 언제 어떤 이벤트가 올지 모른다. 언제든 이벤트가 emit될 수 있는 상황이기 때문에 disposed 되지 않고, 메모리 상에 남아있게 된다. error 이벤트를 만나게 되면 바로 리소스 정리를 시작한다. 때문에 error 이벤트 전달 이후의 next 이벤트는 동작하지 않는다. ..
23.11.01 수
·
Study/🌱 SeSAC
✅ 15 버전 업데이트 사항 에셋에 있는 리소스 사용 시 .이름 으로 사용할 수 있다. 편해짐! ui 프리뷰 💡 RxSwift ✅ UISwitch 구현하기 UIKit 방식 구현 RxSwift로 구현 observable이 bool 상태를 전달하여 Observer가 스위치 상태를 변경 → Observable 값을 생성하고, 전달한다. → Observer 받은 데이터를 기반으로 상태를 변경한다. 만약, 2초 후에 데이터를 변경하고 싶다면? isOn 값을 바꿔주면 변경된 값이 반영되게 해야한다. observable은 데이터를 전달하는 것만 가능하고, 이벤트를 받아 처리할 수는 없다. ✅ Observable과 Observer 이벤트를 전달하는 observable과 이벤트를 처리하는 observer Observab..
23.10.31 화
·
Study/🌱 SeSAC
💡 알고리즘 ✅ 그래프 노드와 간선으로 구성된 자료구조 이를 통해 연결된 노드간의 관계를 표현할 수 있다. 노드(정점) ✔️ 인접행렬 장점: 노드의 연결 상태를 바로 알 수 있음 단점: 노드의 개수가 N이라고 하면 이 배열의 크기는 N*N이 된다. 특정 노드에 연결된 노드를 찾으려면 N번만큼 확인해줘야 한다. ✔️ 인접 리스트 노드별로 연결된 노드를 기록 장점: 실제로 연결된 노드의 정보만 알면 된다. 단점: i와 j 노드의 연결 상태를 바로알 수 없다. ✅ 트리 사이클이 없고 방향이 없는 그래프 특징: 두 점을 연결하는 경로는 유일하다. 루트 노드 - 부모가 없는 최상위 노드 부모 노드 - 루트노드 방향으로 직접 연결된 노드 자식 노드 형제 노드 - 같은 부모를 갖는 노드 리프 노드 - 자식이 없는 노..
[iOS/Swift] MapKit Annotation displayPriority 지정하기
·
iOS/UIKit&SwiftUI
같은 장소에 어노테이션이 두개가 표시될 때 나는 고정으로 있는 어노테이션 보다 검색 결과 어노테이션이 더 상단으로 보이게 하고싶었다.이전까지 나의 결과는검색 결과 어노테이션이 가장 뒤로 가버리는 맘에 안드는 결과가 나왔다.이 문제를 해결하기 위한 방법이 displayPriority이다!annotation view의 우선순위를 지정해주는 프로퍼티이다.MKMapViewDelegate의 viewFor에서 어노테이션을 등록할 때 우선순위를 지정해줬다.기본으로 나타나 있는 어노테이션에는 .defaultLow 값을, 검색 결과로 위에 보여줄 annotation에는 .defaultHigh 값을 주었더니 원하는 결과가 나왔다!.defaultHigh가 아니어도 디폴트 값인 .required 여도 같은 결과가 나온다. 사..
MapKit CustomAnnotation
·
iOS/UIKit&SwiftUI
플젝 진행하면서 정리한 내용입니다! 틀린 내용이 있을 수도 허접 할 수도 있습니다.. 지적 대 환영, 꿀팁 대 환영  맵킷에 대한 정보는 정말이지 별로 없다..정리하고 보니 별거 아닌 내용을 얼마나 붙잡고 있던걸까 흑흑 1. 커스텀 어노테이션 등록하기 (viewFor)2. 어노테이션 선택에 따라 디자인 변경하기 (didSelect, didDeSelect)3. 식별자가 다른 어노테이션을 만들어 서로 다른 기능을 하도록 구현하기  💡 커스텀 어노테이션 등록하기해당 부분은 검색하면 정보가 꽤나 많이 나온다. 때문에 어렵지 않다.mapkit delegate는 연결되어 있을 것이고, delegate를 채택한 후 진행한다.MKMapViewDelegate에 구현된 viewFor 매개변수가 있는 메서드를 사용한다.해..
[iOS/Swift] search bar 에 테두리와 그림자 동시 적용하기 - clipsToBounds
·
iOS/UIKit&SwiftUI
search bar의 cornerRadius를 적용하고, 그림자도 적용하려 하였다.cornerRadius는 clipsToBounds를 사용하여 layer 바깥을 잘라내어 적용이 되는데, 그림자는 layer 바깥에 적용하는 것이라 clipsToBounds값을 설정하는 데에 문제가 생긴다. clipsToBounds를 true로 설정하여 테두리 조건만 적용이 된 모습이다. 그림자를 적용하였지만 반영이 되지 않는다.두가지 조건을 모두 적용하려면 어떻게 해야할까? 💡 그림자를 적용할 UIView를 만들자파란색 uiview를 만들어 바깥에 배치할 uiview는 그림자를 적용하고, 내부에 들어갈 뷰는 corner radius를 적용시키면 된다.   UIView의 위에 searchBar를 올린 후 각각 디자인을 적용..