ios
-
PhotoPicker를 구현해 ProfileImage 뷰 구현하기SwiftUI 2023. 6. 10. 20:21
iOS 14.0 에서 PHPickerViewController 가 추가되었습니다. 해당 ViewController를 이용해서 SwiftUI에서 사용할 수 있는 PhotoPicker를 구현하고 이를 이용해 프로파일 이미지 뷰를 구현해 보겠습니다. 기본적으로 ViewController를 SwiftUI에서 사용하기 위해서는 UIViewControllerRepresentable 프로토콜을 구현해 주어야 합니다. 해당 프로토콜은 아래의 두 함수를 구현하도록 하고 있습니다. PHPickerViewController 를 이용해 PhotoPicker 구현하기 func makeUIViewController(context: Self.Context) -> Self.UIViewControllerType func updateU..
-
LibraryContentProvider 로 XCode 라이브러리에 뷰 추가하기SwiftUI 2023. 6. 10. 14:03
iOS 14.0 이상에서 XCode에 새로 만든 커스텀 뷰들을 라이브러리에 추가해서 라이브러리에서 자신의 뷰를 가져올 수 있는 방법을 제공하고 있습니다. 이전에 생성한 CachedAsyncImage를 아래와 같이 라이브러리에 추가하는 거죠. 방법은 간단합니다. LibraryContentProvider 프로토콜을 준수하는 구조체를 아래와 같이 작성만 해주면 끝입니다. import SwiftUI struct LibraryViewContent: LibraryContentProvider { let url = URL(string: "http://placehold.it/120×120&text=image4") var views: [LibraryItem] { LibraryItem(CachedAsyncImage(url:..
-
AsyncImage 구현하기(2)SwiftUI 2023. 6. 9. 23:25
여기에서는 URLCache 를 이용해 CachedAsyncImage에 캐시기능을 추가하겠습니다. 우선 CachedAsyncImage에서만 사용하기 위해 해당 파일을 CachedAsyncImageViewModel에 fileprivate로 ImageCache 클래스를 구현합니다. fileprivate final class ImageCache { static let shared = ImageCache() let cache: URLCache private init() { self.cache = URLCache(memoryCapacity: 32*1000*1000, diskCapacity: 100*1000*1000) } //캐시에 UIImage가 있는 경우 이미지를 반환하고 없는 경우 nil을 반환 func loa..
-
AsyncImage 구현하기(1)SwiftUI 2023. 6. 9. 16:25
iOS15에 추가된 AsyncImage가 추가되었습니다. 이제 URL만 입력해 주면 알아서 해당 위치의 AsyncImage에 url 위치의 이미지를 다운로드 해줍니다. 해당 AnyncImage는 SwiftUI 특성 상 화면에 사라지면 소멸되고 다시 화면에 표시되려면 재 생성해야 하는데 캐시 기능이 없는 AsyncImage는 네트워크에서 이미지를 다시 다운로드 해야하는 단점이 있습니다. 또한 iOS15 이전에서는 사용할 수 없습니다. 그래서 여기에서는 AsyncImage 정의를 이용해서 동일한 타입의 CachedAsyncImage 를 구현 해 보도록 하겠습니다. 먼저 AsyncImage의 아래와 같은 세개의 초기화 함수가 있습니다. public init(url: URL?, scale: CGFloat = 1..
-
[WWDC20] AVAssetWriter fmp4writer 소스 분석iOS Swift 2023. 6. 9. 11:20
코드 리뷰 이 문서는 WWDC20 Author fragmented MPEG-4 content with AVAssetWriter 세션의 샘플 예제에 대한 코드를 리뷰합니다. 여기서는 해당 프로그램의 구조를 먼저 살펴보겠습니다. Overview 해당 예제는 기본적으로 Combine 을 이용해 파이프라인 형태의 구조를 채택하고 있습니다. Segment Generator는 ReaderWriter에서 세그먼트를 만들어 send(_)를 통해 해당 세그먼트를 퍼블리시합니다. 해당 세그먼트는 Segment File Writer에서 세그먼트를 수신할 때마다 해당 세그먼트를 설정된 출력 디렉토리에 세그먼트 파일을 생성합니다. 그 와 함꼐 Reduce 에서 세그먼트와 함께 수신된 AVAssetSegmentReport를 통해..
-
Recording movies in alternative formatsiOS Swift/애플 문서 한글화 2023. 6. 7. 19:28
Article 이 문서는 애플의 공식 문서 Recording movies in alternative formats 을 한글화한 문서입니다. 레코딩 영상의 포맷 변경 캡쳐링하는 동영상 파일의 기본 포맷 변경 Overview AVCaptureMovieFileOutput을 사용하여 QuickTime 동영상 파일을 캡처하면 프레임워크는 대부분의 iPhone 및 iPad 모델에서 기본적으로 HEVC 형식을 선택합니다. 그러나 다른 형식이 필요한 경우 기본 형식을 미리 변경할 수 있습니다. 앱이 System Share Sheet를 사용하여 캡처한 비디오를 공유하면 시스템이 자동으로 비디오를 대상 장치와 호환되는 형식으로 변환합니다. 그러나 앱이 캡처한 비디오를 내부적으로 저장하거나 공유하는 경우 System Sha..
-
Exporting video to alternative formatsiOS Swift/애플 문서 한글화 2023. 6. 7. 19:16
Article 비디오를 다른 포맷으로 내보내기 기존동영상 파일을 다른 형식으로 변환 Overview 기존 동영상 파일을 다른 장치와 호환되는 형식으로 변환하려면 기존 파일의 내용을 기반으로 새 동영상 파일을 생성해야 합니다. 저장된 비디오의 형식을 변경할 수는 없지만 이 문서에 설명된 단계에 따라 원하는 형식으로 새 파일을 만들 수 있습니다. Tip 앱이 비디오 캡처에서 직접 동영상을 저장할 수 있는 경우 Recording movies in alternative formats를 참조하여 기본 포맷을 수정하는 게 더 효율적입니다. 요청된 포맷으로 새 비디오 내보내기 비디오를 다른 형식으로 내보내려면 AVAset 동영상 파일로 다음 단계의 작업을 수행해야 합니다. Export Presets 리스트에서 내보낼..
-
Loading media data asynchronouslyiOS Swift/애플 문서 한글화 2023. 6. 7. 18:47
Article 이 문서는 Loding media data asynchronously 애플 문서를 한글화 합니다. 비동기적인 미디어 데이터 로딩 언어 수준의 동시성 기능을 사용하여 미디어 데이터를 효율적으로 로드하는 반응형 앱 빌드 Overview AVFoundation은 AVAsset 클래스를 사용하여 동영상을 모델링합니다. 에셋 생성은 데이터가 필요할 때까지 미디어 로드를 연기하기 때문에 가벼운 작업입니다. 에셋이 데이터를 로드하는 데 걸리는 시간은 미디어 크기, 로컬 장치 기능 및 원격 네트워크 조건을 비롯한 요인에 따라 다릅니다. 호출 스레드를 차단하지 않으려면 미디어 데이터를 비동기적으로 로드해야 합니다. important iOS 16, tvOS 16, MacCatalyst 16 및 macOS 1..