본문 바로가기

전체 글

(85)
visionOS를 위한 User Interactions visionOS는 눈과 손의 움직임을 통해 앱을 제어할 수 있다. Direct Input 3D 공간에서 물리적으로 터치하는 동작으로 버튼을 클릭할 수 있다. Gestures 제스처에는 탭(Taps), 길게 누르기(Long presses), 드래그(drags), 회전(lotation), 줌(zooms) 등이 있다. RealityKit은 이러한 상호작용 기능을 쉽게 제공한다. Skeletal Hand Tracking 큐브를 쌓아올리는 동작을 할 때 손가락 관절의 움직임을 추적하여 동작이 인식된다. 앱에 특정한 동작을 추가하고 싶을 때 유용하다. Wireless devices 기존에 데스크톱이나 랩탑에서 사용하던 터치패드, 키보드 등을 사용하여 상호작용을 할 수 있다. Get started with build..
visionOS를 위한 공간 컴퓨팅 개념 visionOS는 공간 컴퓨팅(Spatial Computing) 운영체제다. 공간 컴퓨팅에는 기존에 iOS나 macOS에서 경험했던 것들과 비슷한 요소도 있지만, 새로운 개념들이 존재한다. 공간 컴퓨팅의 기본이 되는 요소들을 살펴보자. Shared Space 앱은 기본적으로 공유 공간(Shared Space)이라는 곳에서 시작한다. 이 공유 공간에 앱들은 나란히 양옆에 위치해 있다. macOS에 띄워진 여러 앱들을 떠올려보면 된다. Windows 하나의 앱은 하나 이상의 Window를 갖는다. Window는 사파리 웹 브라우저와 같은 2D 컨텐츠를 띄우는데 적합하다. views와 controls등 모두 macOS와 ios에서 보았던 것과 동일하다. Volumes volume은 앱이 체스 보드와 같은 3D..
CLI에서 Swift 패키지 매니저 사용하여 swift 빌드하기 CLI에서 Swift 패키지 매니저 사용하여 swift 빌드하기 iOS개발을 하다가도 swift 언어로 라이브러리를 만들어서 배포해야할 경우가 종종 있습니다. swift 패키지 매니저는 라이브러리를 빌드하고 실행할 수 있는 파일을 만들어주는 기능을 가지고 있습니다. 먼저 스위프트 패키지 잘 설치되어 있는지 확인해보겠습니다. $ swift package --help OVERVIEW: Perform operations on Swift packages SEE ALSO: swift build, swift run, swift test USAGE: swift package ... 패키지 만들기 새로운 패키지를 만들어서 뼈대(skeletal) 파일들을 생성할 수 있습니다. 여기서는 Hello 라는 프로젝트 이름으로 ..
visionOS 시작하기 애플이 wwdc2023에서 선보인 Apple Vision Pro의 핵심은 무한한 공간 캔버스이다. 이 광활한 캔버스 위에 간단한 웹사이트 부터 3D 오브젝트까지 모든 것을 보여줄 수 있다. 사용자는 보이는 모든 공간위에서 모든 것을 자유롭게 조작할 수 있으니 사용자 경험이 더욱 유연해진다. 애플은 모바일 환경을 새롭게 열었던 것과 같이, 공간 컴퓨팅(Spatial Computing)이라는 새로운 지평을 열어가려고 한다. Vision Pro의 운영체제인 VisionOS의 근본을 이루는 3가지 요소는 Windows, Volumes, Spaces 다. Windows 하나 이상의 windows 를 생성할 수 있다. SwiftUI의 기존 Windows와 개념은 동일해보인다. Volumes VisionOS의 앱은 ..
Graph 탐색, Depth First Search Graph 깊이 우선 탐색(Depth First Search, DFS)을 stack을 이용하여 풀 수 있다. 가장 중요한 부분은 노드 방문 여부(marked)를 확인하는 부분이다. 위와 같은 그래프가 있을 때, 탐색 순서는 다음과 같다. 노드 0을 방문, 노드 0의 이웃인 1,2,3을 스택에 푸시함 스택에 가장 위에 있는 노드 3을 방문함 그 다음 스택에 가장 위에 있는 노드인 2를 방문함, 노드 2의 이웃인 5,4를 푸시함 노드 4를 방문함 노드 5를 방문함, 노드 5의 이웃인 1을 방문함 스택에는 1이 남아 있지만, 이미 방문하였으므로 방문하지 않음 Swift 풀이 // MARK: - Graph Definition class Node { var val: Int var marked: Bool = fal..
LeetCode: Valid Sudoku 문제설명 9 X 9 크기의 스도쿠 보드가 유효한지 판단하라. 다음 규칙에 따라 보드의 칸이 채워져야 유효하다고 판정한다 각 행은 1-9까지의 숫자를 중복 없이 갖는다. 각 열은 1-9까지의 숫자를 중복 없이 갖는다. 3 x 3 의 작은 박스에서 1-9까지의 숫자를 중복 없이 갖는다. 문제풀이 func isValidSudoku(_ board: [[Character]]) -> Bool { var rows = Array.init(repeating: [Int: Int](), count: 9) var columns = Array.init(repeating: [Int: Int](), count: 9) var boxes = Array.init(repeating: [Int: Int](), count: 9) for i ..
LeetCode: Largest Unique Number 문제설명 정수형 배열 A가 주어졌을 때, 단 하나만 존재하는 정수중 가장 큰 값을 반환하라. 존재하지 않는다면, -1을 반환하라. 1
LeetCode: MoveZeroes 문제설명 정수 배열이 주어졌을 때, 배열의 원소가 0인 정수를 모두 배열의 끝으로 옮겨라. 0을 제외한 정수의 순서는 유지되어야 한다. 배열을 카피하지 않고 in-place로 배열을 수정하라. 문제풀이 배열을 뒤에서부터 순회하여 0이 발견되면 뒤에 넘기는 방식으로 계산할 수도 있다. 이 보다는, 배열을 앞에서부터 순회하여 0이 아닌 것들을 앞으로 밀어주는 방식이 더 깔끔하다. func moveZeroes(_ nums: inout [Int]) { let size = nums.count var j = 0 for i in 0..