iyOmSd/Title: SwiftUI 23

[SwiftUI] Highlight Text만들기(일치하는 텍스트 강조 뷰)

이런 뷰를 만들어볼거에요검색하는 기능이라던가텍스트를 강조를 하고싶은 뷰에서 많이 사용하죠! 2가지 방법으로 만들어보려고해요AttributedString과 Text의 조합으로 만들어 볼겁니다 어렵지않기때문에 코드로 같이 봐볼게요!  방법1. Text의 조합으로 구현하기핵심코드부터 먼저 봐볼게요private var highlightingText: Text { guard !highlightString.isEmpty, let matchIndex = text.range(of: highlightString) else { return Text(text) .font(font) .foregroundColor(textColor) } ..

[SwiftUI] NavigationStack 화면전환 방법 고민정리 (feat. Router 구현)

안녕하세요~iOS16+부터 사용할 수 있는 NavigationStack을 이용한 라우터 로직을 만들었는데요그 과정에서 생각한 방법과 겪은 고민을 정리해보려합니다! 네비게이션 스택이뭐야? 하시는분들은https://nsios.tistory.com/199 [SwiftUI] NavigationStack안녕하세요! SwiftUI에서 항상 느꼇던 불편한점중 하나가 네비게이션이였는데요 이를 해결해주는게 나온지 좀 됐지만 이제 해보려합니다! (진작에 나왔을 녀석이여야 했는데...) iOS16 타겟을 쓸일nsios.tistory.com쓰윽 훑고오셔도 좋을것같습니다!우선 제일 간단한 방법부터 시작해보겠습니다~! 아! 그전에이 모든 라우팅 로직들은 모듈화를 했다는 가정하에 이뤄졌습니다.예제에서는 아주 간단한 구조로 사용했어..

[SwiftUI] ChipView(iOS16+, iOS16-) tag view 구현하기

2023.09.30 - [iyOmSd/Title: Swift] - [Swift] Multi Line Tag View 그리기 [Swift] Multi Line Tag View 그리기SwiftUI만 하다가 UIKit을 하게될 일이 생겼는데 요구사항중하나가 뷰를 크기에 맞게 여러줄로 표현해주는 뷰에요 테그를 표현하는 뷰같은 곳에 많이 쓰이는 UI로 알고있어요 결과물 부터 보시죠!nsios.tistory.comUIKit을 사용하는경우는 여기서 확인가능합니다!!저 글을 쓸땐 이 레이아웃을 chip이라고 부르는지 몰랐어요 ㅎ 간단하게 ChipView란?균등한 너비를 가지는게아니라 컨텐츠의 크기에 fit하게 정렬되고 그 사이즈를 넘어간다면 아래로 이동되는 그러한 뷰입니다! 아래처럼요 이런 뷰가 ChipView입니다~..

[SwiftUI] WWDC23 Demystify SwiftUI Performance

SwiftUI에 대한 성능적인 측면을 좀더 알아보고싶어서 찾아본 세션이에요 성능문제는 증상에서 부터 시작됩니다. 네비게이션 푸시가 느리거나 애니메이션이 끊기는현상이 보이거나 로딩 인디케이터가 뜨거나 등 현상이 일어날 때 증상을 보고 파악하게됩니다. 성능 문제가 있다는것을 파악하면 문제를 해결하는 첫단계는 측정이고 증상이 있음을 입증하고 증상의 원인을 파악합니다. 근본 원인을 파악한 후에는 최적화해서 문제를 해결합니다. 고친내용을 다시측정하고 입증하고 문제가 해결됬는지 확인합니다. 이를 반복하게 됩니다. 이 세션을 듣기위해서는 SwiftUI의 identity를 이해하고있어야하고 암시적, 명시적 identity가 어떻게다른지 view lifetime과 identity의 차이를 알고있어야한다고 하네요! 자세한..

[SwiftUI] StateObject init 생성자

이글을 쓰게된 동기는... 정말 아무렇지않게 습관처럼 코드를 작성하다가 겪은 이슈를 공유하려 합니다! StateObject를 사용할 때 어떻게 알고 사용하시나요? 보통은 ObservedObject랑 비교를 하면서 ownership이 다르다 뷰의 생명주기와 별개다 별도로 저장돼서 사용된다 뷰의 수명동안 새로운 인스턴스를 한번만 생성한다 정도로 알고 사용하는거라고 생각해요 그래서 ObservedObject와 차이를 두며 사용을 하곤하는것 같아요! (저도 이랬던거같네요... ㅎ) 이렇게 사용하다보면 간혹 만나는 문제점이 생겨요 struct StartView: View { @State private var selectedNum: Int = 10 var body: some View { ScrollView { La..

[SwiftUI] Charts 실전편 (feat. iOS16+ apple framework)

2023.06.29 - [iyOmSd/Title: SwiftUI] - [SwiftUI] Charts 이론편 (feat. iOS16+ apple framework) [SwiftUI] Charts 이론편 (feat. iOS16+ apple framework) 슬슬 미니멈버전이 16이 되는 시대가 다가오고 있는 만큼 iOS16 부터 사용할 수 있는 내장 프레임워크인 Charts 를 알아보려고 합니다! 간단하게 이론적인 부분위주로 어떻게 쓰이고 사용할 수 있는 nsios.tistory.com 을 통해서 기본적인 사용법을 익혔으니 이젠 직접 구현해보면서 다양한 케이스를 확인하려고해요! 기본적인것들만 알아볼게요 BarMark 간단한 BarChart부터 뜯어볼까요 struct Case1: Identifiable { ..

[SwiftUI] Charts 이론편 (feat. iOS16+ apple framework)

슬슬 미니멈버전이 16이 되는 시대가 다가오고 있는 만큼 iOS16 부터 사용할 수 있는 내장 프레임워크인 Charts 를 알아보려고 합니다! 간단하게 이론적인 부분위주로 어떻게 쓰이고 사용할 수 있는지 쓰윽 볼까요? 웅장합니다 이런 모든 차트를 구현할 수 있다고 하네요 차트프레임워크는 SwiftUI와 동일한 선언적 구문을 사용하여 차트를 시각화합니다 Mark와 Property의 조합으로 다양한 차트를 구현할 수 있다고 하네요 이처럼 어떤 Mark를 고르는지, 어떤 프로퍼티를 고르는지에 따라 정말 많은 차트가 생길 것 같네요 Marks and composition 차트에서 여섯개의 파란색 직사각형을 Mark라고합니다 Mark는 데이터를 나타내는 그래픽요소이고 각각 하나의 막대는 Bar Mark입니다. 이..

[SwiftUI] NavigationStack

안녕하세요! SwiftUI에서 항상 느꼇던 불편한점중 하나가 네비게이션이였는데요 이를 해결해주는게 나온지 좀 됐지만 이제 해보려합니다! (진작에 나왔을 녀석이여야 했는데...) iOS16 타겟을 쓸일이 없지만... 곧 쓸 지도 모르니까요! 😁 타입은 새롭지만 저희한텐 익숙합니다 push pop되는 그런 인터페이스를 나타내기때문이죠! 이것말고도 NavigationSplitView 타입도 있어요 mac이나 iPad에서 사용하는 다중열을 보여줄 때 사용하는 타입이죠 NavigationSplitView은 스킵하고 오늘은 NavigationStack을 알아보려합니다 이전에는 NavigationLink를 이용한 방식으로 var body: some View { NavigationView { NavigationLink..

[SwiftUI] 분리된 프레임워크(모듈) 리소스(Font, Color, Image)접근

개발하면서 경험했던 이슈를 공유겸 기록하려고합니다 Tuist를 사용해서 개발하면서 UI모듈을 나누게됬어요 UI가 분리되었으니 리소스에 해당하는 이미지, 컬러, 폰트같은 요소들이 UI모듈에 정의되고 다른곳에서 꺼내쓰는 방식으로 사용하죠 위의 그림기준으로 Feature에서 평소와같이 UI를 import해서 사용하게된다면 실행에 오류는없지만 원하는 리소스를 가져올 수 없는걸 확인할 수 있어요 이유는 프레임워크를 분리했기때문에 번들이 분리되어있기때문이에요 먼저 컬러와 이미지에 대해서 정리할게요 결론부터 말하자면 컬러와 이미지는 해결방법이 동일해요 Bundle을 정하고 가져오는 방식이에요 우선 일반적으로 UI모듈에 정의된 컬러에 접근하게된다면 아래와 같은 로그를 만날 수 있습니다. No color named 'n..

[SwiftUI] Widget LiveActivity (feat. Dynamic Island) 잠금화면 기능

LiveActivity가 무엇이냐..? 잠금화면에서 확인할 수 있는 실시간 액션같은 기능이에요 대표적인 예로 배달의 민족에서 사용하고있어요 배달 시키면 이런거 잠금화면에서 볼수있죠? 네 이런겁니다~! 이걸 오늘 해보려고 합니다! ActivityKit 을 사용해요 iOS16.1+ 부터 사용가능하구요! 위젯과 같이 만들어줘야하는 녀석이에요 프로젝트를 만들고 File > New > Target 에 widget을 선택하면 아래와같은 창이뜨는데 Include Live Activity 체크박스를 클릭해줘야합니다! 그러면 관련된 기본 템플릿이 쫙해서나올거에요 plist에가서 Supports Live Activities값을 YES로 권한 설정해줘야 사용가능합니다! 여기까지 셋팅을 끝냈으면 코딩만 남았네요 struct ..