[프로그래머스/레벨1] 최소직사각형 (Swift)

최소직사각형 코딩테스트 연습 – 최소직사각형 (프로그래머스)   문제 요약 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 모든 명함의 가로 길이와 세로 길이를 조사했습니다. 아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다. 가장 긴 가로 길이와 세로 길이 더보기…

Swift+AudioKit: SF2 형식의 사운드폰트 추가

소개 AudioKit에서 sf2 확장자 형식의 MIDI 사운드폰트를 프로젝트에 추가하고 연결하는 방법입니다. Swift(스위프트): 오디오 라이브러리 AudioKit 프레임워크 소개   방법 1) Capabilities > Background Modes에서 Audio 추가   2) 사운드폰트 파일을 프로젝트 내에 추가   3) 사운드 컨덕터(ObservableObject) 생성 class InstrumentSFZConductor: ObservableObject, HasAudioEngine { let engine = AudioEngine() var instrument = 더보기…

Swift: Combine 개요

개요 Combine 프레임워크는 시간 경과에 따라 값을 처리하기 위한 선언적(declarative)인 명령을 제공하는 Swift의 API입니다. 이러한 값은 다양한 종류의 비동기 이벤트(asynchronous event)를 나타낼 수 있습니다.   Publisher와 Subscriber Publisher(공표자, 게시자): 시간이 지남에 따라 일련의 값을 전달할 수 있는 타입이라는 것을 선언하는 프로토콜 operator: 상류에서 흐르는 퍼블리셔(upstream publisher)로부터 받은 값으로 특정 작업을을 더보기…

SwiftUI 예제: 아이폰 손전등(Flashlight) 만들기 (카메라 플래시 + 화면 밝기 강제 조정 및 복구)

소개 아이폰 손전등에는 다음 3가지 기능이 필요합니다. 아이폰 후면 카메라에 달려있는 플래시(Swift에서는 torch라고 함)의 밝기 조절 (옵션) 디스플레이 전면의 화면 밝기 조정 (옵션) scenePhase를 통한 백그라운드 시 화면 밝기 원래대로 돌려놓기   모든 기능은 실제 아이폰 기기에서만 실행할 수 있습니다. 참고) 손전등 앱(정확히 말하면 손전등 기능만 있는 앱)은 최신 앱 스토어 더보기…

SwitfUI: LazyVGrid의 GridItem…flexible()을 사용할 때 각 셀 간의 여백을 일정하게 지정하는 방법

요약 세로 간의 여백은 LazyVGrid의 spacing 파라미터에서 지정합니다. 가로 간의 여백은 GridItem의 spacing에서 지정합니다. 이미지(Imaage)가 셀을 구성하는 경우, 반드시 .resizable()을 추가해야 이미지 크기가 컬럼 크기에 맞게 조정됩니다.   코드 import SwiftUI struct AlbumListView: View { let MARGIN: CGFloat = 10 @State private var columnCount = 3.0 // 화면을 그리드형식으로 꽉채워줌 더보기…

Swift: iOS에서 커스텀 카메라 만들기 (2) – AVCapturePhotoOutput으로 고화질 사진 찍기

소개 이전에도 한 차례 커스텀 카메라에 대해 다룬적이 있는데 해당 방식은 비디오의 프레임을 캡처해서 저장하는 방식이었습니다. Swift: iOS에서 커스텀 카메라 만들기 (1) – 비디오 캡처 방식 활용 이러한 방식에 대한 장점도 많이 있지만, 해상도가 상대적으로 낮은 단점도 있어서 다른 방식인 AVCapturePhotoOutput을 이용해 고화질의 사진을 얻는 방법에 대해 알아보겠습니다. 스토리보드(UIKit) 기준으로 더보기…

Swift: async/await 키워드를 이용한 동기적 실행 보장 함수 작성

소개 이른바 ‘콜백 지옥’을 해결하기 위해 Swift 5.5 버전부터 등장한 키워드입니다. 자바스크립트 ES6에서 도입된 async및 await와 목적이 거의 같습니다. 자바스크립트: 콜백, Promise, async – await 기초 콜백 지옥(Callback Hell) 콜백 지옥은 JavaScript를 이용한 비동기 프로그래밍시 발생하는 문제로서, 함수의 매개 변수로 넘겨지는 콜백 함수가 반복되어 코드의 들여쓰기 수준이 감당하기 힘들 정도로 더보기…

Swift: iOS에서 커스텀 카메라 만들기 (1) – 비디오 캡처 방식 활용

iOS에서 커스텀 카메라 만들기 원문 Making A Custom Camera In iOS 우리는 iOS에서 어떤 형태로든 커스텀 카메라를 봐왔습니다만, 어떻게 직접 카메라를 커스텀할 수 있을까요? 이 튜토리얼에서는 기본 사항을 다루면서 동시에 고급 구현 및 옵션에 대해 설명합니다. 곧 알게 되겠지만 iOS 기기에서 오디오/비디오 하드웨어 상호 작용에 관한 옵션은 많습니다! 항상 그렇듯이 더보기…

Swift: RealityKit 프로젝트에 .rcproject(Reality Composer 프로젝트 파일) 추가하고 앱에 통합하기

소개 Reality Composer 앱으로 만든 프로젝트를 Swift iOS 프로젝트에 추가하고 앱에 연동(통합)시키는 방법입니다.   방법 1) 프로젝트 생성 Augmented Reality App Content Technology를 RealityKit으로 설정 이 상태에서 프로젝트를 실행하면 Experience.rcproject라는 프로젝트 파일이 이미 존재하며 앱을 실제 기기에서 실행하면 박스가 하나 표시될 것이지만, 이 포스트에서는 해당 기본 파일을 사용하지 않고 다른 더보기…

Swift: UIKit 프로젝트 안에 SwiftUI 뷰 삽입하기 (UIHostingController 이용)

소개 SwiftUI: Representable을 이용해서 UIViewController 띄우기 SwiftUI: 하드웨어 키보드 입력 받기 (Representable 사용) SwiftUI: 웹 뷰(WKWebView) 추가하기 및 자바스크립트 실행 (Representable 사용)   이전에 SwiftUI 프로젝트 안에 UIKit 기반으로 만들어진 뷰 컨트롤러나 뷰를 집어넣는 방법에 대해 여러 차례 포스팅한적이 있었는데, 그 반대의 경우도 가능합니다. UIKit 프로젝트에서 SwiftUI로 만든 View를 삽입하는 더보기…