분류 전체보기
-
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를 통해..
-
[WWDC20] AVAssetWriter를 이용한 fragmented MPEG-4 ContentiOS Swift 2023. 6. 8. 14:34
iOS14에 AVAssetWriter에 fragmented MPEG-4 파일 형식의 미디어 데이터를 출력할 수 있도록 기능이 추가되었습니다. Apple HLS는 MPEG-2 전송 스트림, ADTS 및 MPEG 오디오와 같은 형식을 지원하지만 이 기능은 Fragmented MP4에만 해당됩니다. 해당 강의에서 VOD 와 라이브 스트리밍에 어떻게 사용될 수 있는 예시를 보여줍니다. Fragmented MPEG-4(fMP4)는 ISO에 정한 미디어 파일 포맷으로 2016년 부터 Apple HTTP Live Streaming에서 지원되어왔습니다. 간단하게 전통적인 MP4 파일과 fMP4 파일을 살펴보면 다음과 같은 구조를 같습니다. MP4 파일에는 파일 타입, 모든 샘플 데이터에 대한 정보를 구성하는 Movie..
-
Creating images from a video assetiOS Swift/애플 문서 한글화 2023. 6. 7. 20:22
Article 애플 공식 문서 Creating images from a video asset을 한글화한 문서입니다. 비디오 에셋에서 이미지 생성 비디오 프레임에서 이미지를 생성하여 미디어 타임라인 내의 특정 시간에 대한 이미지를 표시합니다. Overview 일반적으로 동영상 앱을 만들 때 일반적인 요구 사항은 비디오 컨테츠의 이미지를 표시하는 것입니다. 비디오 목록에 단일 썸네일을 표시하거나 비디오 파일 로딩 중에 이미지를 보여주고 타임 라인 바를 선택했을 때 해당 지점의 이미지를 보여 주고 선택 시 해당 지점으로 이동 할 수 있도록 할 수 있습니다. AVFoundation을 사용하면 AVAssetImageGenerator를 사용하여 앱의 비디오 컨텐츠에서 이미지를 간단하게 생성할 수 있습니다. AVAs..
-
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..