저번 포스팅에는 face tracking을 해보았는데요, 이어서 eye tracking을 해보겠습니다. 이렇게 제가 눈을 깜박일때마다 로봇박스 눈도 따라오게 해주겠습니다. [1] eyeLeftNode, eyeRightNode를 가져오기 robotHead.scn 파일을 들어가보면 eyeLeft랑 eyeRight 라는 childNode가 있습니다. 이런식으로 가져올 수 있습니다. let resourceName = "robotHead" let contentNode = SCNReferenceNode(named: resourceName) let eyeLeftNode = contentNode.childNode(withName: "eyeLeft", recursively: true) let eyeRightNode = ..
[1] 얼굴의 포지션과 방향을 tracking하기 face tracking이 active되면 ARKit은 자동으로 ARFaceAnchor을 돌아가고 있는 AR session에 add합니다. ARFaceAnchor는 ARAnchor의 서브클래스로, 사용자의 face position and orientation에 관련된 정보를 포함하고 있어요 SceneKit-based AR에서는 3D content를 face anchor에 붙일수있어요 renderer(_:nodeFor:) 또는 renderer(_:didAdd:for:) 라는 delegate method를 통해서요..! (이 두 함수는 ARSCNViewDelegate 에 있습니다) 정확히 말하면 3D Content를 SceneKit node에 붙이고 Scen..
애플의 고퀄리티 예제 앱 Tracking and Visualizing Faces 를 따라해본 기록 ✏️ [1] 프로젝트 생성 Augmented Realtiy App 을 체크 content technology를 SceneKit 으로 설정 자동으로 만들어진 파일과 코드들을 삭제해주기 ViewController도 sceneView만 남기고 일단 다 삭제! (이 상태에서는 session을 설정안해줬기 때문에 돌리면 크래쉬납니다) [2] ARConfiguration 종류 정하기 + isSupported 이용하여 지원하지 않는 기기 안내하기 ARConfiguration은 현재 session에서 ARKit 기능 중 어떤 것을 쓸 건지를 정의해놓은 객체 라고 하는데, ARConfiguration을 상속하는 여러 친구들..
ZStack은 Stack안에 있는 자식 뷰들을 z축으로 중첩시켜주는 view 입니다. 실제 쓰이는 경우들을 알게 되어서 정리합니다-! [1] 카메라와 컨트롤 이런 카메라 앱을 만든다고 할때, 카메라뷰랑 컨트롤 버튼들(파란네모친 영역)를 zstack을 이용하여 동시에 띄울 수 있습니다. 더불어 컨트롤뷰의 HStack(갤러리 열기, 촬영, 필터 버튼들이 있음)를 bottom에서부터 height 200으로 위치잡아주고 싶다면 Spacer를 활용할수있습니다. (신기) [2] SwiftUI의 Fullscreen Modal을 띄울때 SwiftUI에서는 현재 fullscreen 모달을 띄울 수 있는 설정이 없습니다..😭 그래서 zstack을 활용해서 fullscreen presentation을 한 것 처럼 보이게 하..
UIKeyCommand 는 하드웨어 키보드에서 수행되는 키 누름과 그에 따른 동작을 지정하는 객체라고 합니다. 이것을 통해서 키보드의 방향키를 인지하게 할 수 도 있고 원하는 단축어를 만들 수도 있는 것 같아요 다양하게 많이 할 수 있지만, 우선 오늘 알게 된 키보드 화살표 키를 인지하는 것을 간단히 정리-!! 1. keyCommands를 오버라이딩 하기 keycommands를 오버라이딩 하여서 원하는 keyCommand와 동작을 지정해줄 수 있습니다. 2. addKeyCommand 하기 UIViewController의 addKeyCommand 함수를 이용해서 원하는 keyCommand와 동작을 지정해줄 수 있습니다. [다른 키 + 방향키를 인지하고 싶다면] 그럴땐 modifierFlags를 이용해주면 ..
이렇게 titleView를 넣으면 left, right 간격이 알아서 적당히 잡힙니다 . 하지만, 이렇게 left, right spacing을 내가 원하는 만큼 지정해주고 싶으면 어떻게 해야할까요...?!? 저는 100씩 지정해주고 싶습니다..! titleView의 width를 "화면의 width값 - 100 *2" 로 지정해줄 수 있겠습니다. 하지만 멀티태스킹 모드에서 뷰사이즈가 계속 변하는 것을 고려해볼때, 위와 값이 고정된 width값을 넣어주면 left, right spacing은 고정이고 flexible하게 네비게이션 타이틀뷰 사이즈가 변하는 효과를 기대할 수 없습니다. 그럴땐 아래와 같이 해줄 수 있습니다. window가 생기는 시점인 layoutSubview 함수에서 titleview의 wi..
Clean Swift 아키텍쳐에 대해 알아보겠습니다. Clean Swift HandBook 의 내용을 간단 정리해보려고 합니다. [1] Clean Swift가 나오게 된 배경 너는 MVC 패턴의 문제점을 인식하고(방대한 뷰컨트롤러) MVVM나 VIPER를 사용하려고 했을 것이다. 하지만 우리가 봤을 때 이 아키텍쳐들도 부족하다(??) 1. MVVM 단순히 massiveness가 viewController에서 viewModel로 이동한다. 너는 massive view controllers 대신 massive view models를 얻게 되는 것이다. MVVM는 RxSwift와 함께 쓰면서 인기가 늘었다. 하지만 대부분 너는 reactiveness가 필요하지 않다. (실시간 채팅을 만들지 않는 이상.) =>..
[1] 프로젝트 세팅 app target의 General settings 으로 가서 Supports multiple windows를 체크해주세요 이 옵션을 체크하면 XCode는 info.plist파일에서 Application Scene Manifest > Enable Multiple Windows를 yes로 바꿔줍니다. 이 key가 system에게 나의 앱이 multiple simultaneous scenes을 지원해!! 라고 알려주는 역할을 합니다. [2] 실험 이제 돌려보겠습니다. 1. 앱을 처음 런치할때, AppDelegate.swift > application(_:didFinishLaunchingWithOptions:) SceneDelegate.swift > scene(_:willConnectTo..
iOS13에서 Scene이라는 개념과 SceneDelegate가 등장하면서 Managing Your App's Life Cycle 문서에서 App-Based Life-Cycle Events 와 Scene-Based Life-Cycle를 나눠놓았습니다. 앱 생명주기와 관련 delegate 함수들에 대해 적으면서 정리합니다. 사실 완벽하게 이해는 못했지만ㅠㅠ (그래서 잘못된 설명일 수 있습니다..!!) "개발 공부는 나선형을 그리며 앞으로 나아가는 것이다. (이해가 안되는듯 되는 듯하면서 빙빙 돌지만 앞으로 나아가고 있는것이다!!!)" 라고 과동아리 선배가 말씀하신 것을 위안삼아봅니당.. 😭 [1] App's Life Cycle (앱 생명주기) 1. App-Based Life-Cycle Events (iOS..
iOS13부터 멀티 윈도우가 가능해지면서 UI Structure에 UIWindowScene이라는 개념이 등장했습니다. UISceneSession이라는 개념도 함께요..!! 그럼 UIScene, UIWindowScene, UISceneSession에 대해 간단히 살펴보겠습니다 [1] UIScene - 앱 UI의 하나의 instance 또는 복사본을 의미합니다. - 아래와 같은 상황에서는 세개의 scene이 있다 라고 말할 수 있습니다. - 특정한 session과 connection 정보들로 Scene을 만듭니다. - UISceneDelegate를 이용하여 Scene의 life-cycle events을 매니징할 수 있습니다. UISceneDelegate에는 아래와 같은 라이프사이클 관련 함수들이 있습니다. ..
- Total
- Today
- Yesterday
- github actions
- DRF APIException
- Flutter Text Gradient
- Flutter getter setter
- Dart Factory
- Flutter Clipboard
- flutter build mode
- Django FCM
- 플러터 싱글톤
- Django Heroku Scheduler
- flutter dynamic link
- drf custom error
- SerializerMethodField
- ipad multitasking
- Django Firebase Cloud Messaging
- Python Type Hint
- Flutter Spacer
- Sketch 누끼
- ribs
- flutter 앱 출시
- METAL
- cocoapod
- flutter deep link
- 장고 Custom Management Command
- 구글 Geocoding API
- Flutter 로딩
- 플러터 얼럿
- Watch App for iOS App vs Watch App
- 장고 URL querystring
- PencilKit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |