목록SwiftUI (25)
HIT해

https://100percent-me.tistory.com/entry/%EC%8A%A4-%EB%85%B8%EC%9A%B0%EB%A7%A8-%EC%95%B1%EC%8A%A4%ED%86%A0%EC%96%B4-%EB%B0%B0%ED%8F%AC-%ED%9B%84%EA%B8%B0 [스-노우맨] 앱스토어 배포 후기안녕하세요! 제 첫 개인 프로젝트 '스-노우맨'이 드디어 앱스토어에 배포되었습니다. 프로젝트 소개스-노우맨은 사용자의 걸음 수에 따라 눈사람이 성장하는 AR 기반 헬스케어 앱입니다. 걸100percent-me.tistory.com 이전 포스팅에서 계획했던 기능들을 모두 완성해서 업데이트했다! 주요 업데이트 사항눈사람 크게에 따른 카메라 시점 변경걸음수 설정 변경아이템 획득 방식 변경 ( 걸을때 마다가 ..

SwiftUI에서 UIKit를 함께 사용하는 UIViewRepresentable 프로토콜은 iOS 개발자라면 절대 피해갈 수 없는 관문이라 생각한다. 왜 자주 사용하는 걸까. SwiftUI는 선언적이고 상태 관리가 쉬운 이점을 가진 반면 UIKit만큼 다양한 라이브러리가 없고 TextField 만 만들어봐도 제약이 많다는 것을 알 수 있다. 그럼 SwiftUI에서 UIKit 기능을 사용할 수 있게 해주는 UIViewRepresentable 프로토콜에 대해서 알아보자.UIViewRepresentable이란?UIKit뷰를 SwiftUI에서 사용할 수 있게 해주는 프로토콜이다. 두가지 메서드가 필요한데makeUIView(context:): UIKit뷰 생성updateUIView(_:context:): Swif..

개발 배경 및 문제 상황SwiftUI와 SceneKit을 사용하여 3D 오브젝트(돌)의 애니메이션을 구현했습니다. 기존에는 사용자가 화면에서 돌을 직접 터치했을 때만 애니메이션이 동작했지만, 돌 프로필 조회와 애니메이션 액션이 겹치는 문제가 발생했습니다. 이로 인해 외부 UI 버튼으로도 동일한 애니메이션을 제어할 필요성이 생겼습니다. 문제는 기존 코드에서 3D 오브젝트 애니메이션이 UIKit의 터치 이벤트에만 연결되어 있어 SwiftUI의 버튼 등 다른 UI 요소에서 같은 애니메이션을 트리거하기 어려웠다는 점입니다. 이를 해결하기위해 Delegate 패턴을 활용했습니다. Delegate 패턴이란?Delegate 패턴은 객체 간의 통신을 위한 디자인 패턴으로, 한 객체가 특정 작업을 다른 객체에게 위임하는..

카카오톡 처럼 동적으로 변경되는 텍스트 입력창을 만들어야했고같이 프로젝트를 진행하는 동료가 이를 구현하고자 3일동안 텍스트필드에 메달렸다. 밤낮으로 힘들어하는 동료를 돕고자 코드를 천천히 뜯어보았다. UIViewRepresentable 안에서 TextField를 반환하고 updateUIView에서 입력된 텍스트를 기반으로 텍스트 필드의 frame을 변경하도록 만들었다. makeUIView와 updateUIView에서 frame으로 높이조절을 하더라도 SwiftUI 코드에서 해당 TextField를 불러왔을때 조정된 크기가 아닌 고정 크기를 가진채 나왔다. 그 이유는 SwiftUI에서는 UIViewRepresntable 안에서 지정한 크기는 적용되지 않고 SwiftUI 코드에서 frame을 지정해야만 ..

줄바꿈을 하는데 분명 자리가 남는데도 줄바꿈이 되는 상황이 발생했다. UIKit에서는 아래와 같이 fixedSize로 문제를 해결할 수 있다고 한다 .fixedSize(horizontal: false, vertical: true) 하지만 여전히 해결되지 않았고, 어절로 인식하지 않게 하는 과정이 필요했다. extension String { func splitWord() -> String { return self.split(separator: "").joined(separator: "\u{200B}") }} "\u{200B}" - 제로 폭 공백(zero-width space)을 사이사이에 추가해주어서 해결했다.제로 폭 공백은 실제로 보이지 않는 공백 문자라 모든 글자 하나..

이전 포스팅 영상을 본 사람이 있다면 궁금했을 수도 있다. 3D 펫말에 어떻게 텍스트를 집어넣지??? 나도 어떻게 집어넣을까 많은 고민을 했다.. ZStack에 2D 텍스트를 기울여지게 띄워놓을까..? -> 회전했을때 텍스트가 붕 뜨게 될 것이다. 찾아보니 SceneKit에 3D Text를 출력하는 기능이 있었다. ( 아니 이런건 왜 있는거야.. ) 두가지 방법이 있었다.CATextLayer로 구현하기SCNText로 구현하기SCNText가 더 최신 기술이고 메서드 사용도 더 용이해보여 SCNText로 해결해보기로 했다. https://developer.apple.com/documentation/scenekit/scntext SCNText | Apple Developer DocumentationA geom..

https://developer.apple.com/documentation/scenekit/scnaction SCNAction | Apple Developer DocumentationA simple, reusable animation that changes attributes of any node you attach it to.developer.apple.com SceneView에서 보여주고 있는 모델 안의 노드들중 특정 노드를 클릭했을때 다른 반응을 연출해야하는 상황이 있었다. 이를 해결하기위해 두가지 방법을 생각했다.모델별 SceneView를 불라와서 ZStack으로 감싼다.하나의 SceneView를 불러오고 모델속 노드 터치를 감지한다. 1의 방법이 구현은 더 쉽겠지만 ZStack으로 감쌋을때 뒤에..

ifLet 어디서 많이 보지 않았는가 바로 if let 이랑 비슷한 역할을 한다. 주로 상태가 존재하는 경우에만 특정 뷰의 Modifier를 적용하려고 할때 사용된다.상태의 값이 존재할때만 활성화되고 그렇지 않다면 무시된다. 예시 코드를 보자 1. Reducer@Reducerstruct AlertAndConfirmationDialog { @ObservableState struct State: Equatable { @Presents var alert: AlertState? @Presents var confirmationDialog: ConfirmationDialogState? var count = 0 } enum Action { case alert(PresentationActi..