전체 글
-
이미지 포맷 요약 - 비트맵, 벡터 방식 / 손실 압축, 무손실 압축 / JPG, GIF, PNG, SVGiOS 2023. 2. 9. 15:40
비트맵/벡터 방식 손실/무손실 압축 포맷 특징 JPG(JPEG) 비트맵 손실 압축시 용량 줄일 수 있음 GIF 비트맵 무손실 색이 적어 품질 떨어질 수 있음 PNG 비트맵 무손실 투명도 표현 가능, 용량이 큼 SVG 벡터 무손실 확대,축소시 깨짐 없음, 애니메이션 가능 비트맵 방식 작은 픽셀이 모여 이미지를 만드는 형태. 확대하면 깨져보임 ex) JPG, GIF, PNG 벡터 방식 점과 선으로 이미지를 만드는 형태. 확대해도 깨지지 않음 ex) SVG 손실 압축 말 그대로 압축시 이미지 품질이 떨어지는 압축 방식 ex) JPG 무손실 압축 압축시 이미지 품질 손실이 없음 ex) GIF, PNG, SVG JPG(JPEG) 손실 압축 포맷 압축시 용량 줄일 수 있음 비트맵 방식 GIF 무손실 압축 포맷 색상..
-
PHCachingImageManager requestImage 이미지 중복 SWIFT TASK CONTINUATION MISUSEiOS 2023. 2. 7. 19:17
PHCachingImageManager.default().requestImage PHAsset 에서 이미지를 가져올 때 해당 메서드를 사용합니다. 무심코 아래와 같이 option 없이 사용할 수 있는데요 PHCachingImageManager.default().requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode: .aspectFit, options: nil) { image, info in if let image = image { continuation.resume(returning: image) } } 이럴 때 주의해야 할 점이 있습니다. 이 함수는 기본적으로 비동기적으로 동작합니다. 비동기적으로 사용했을 때 Photos..
-
[iOS] 이미지 권한 얻기iOS 2023. 2. 3. 10:35
iOS에서 사용자의 이미지를 가져오려면 권한이 필요합니다. Info.plist 에 아래 권한을 추가해주면 사용자의 사진에 접근하려고 할 때 권한을 요청합니다. (Privacy - Photo Library Additions Usage Description 이 아닙니다. =_= 혹 추가해도 안 되면 잘못 넣은 건 아닌지 확인해보시길..) 아래 방법으로 명시적으로 권한을 확인할 수도 있습니다. 한번 거부했다면 사용자가 설정에 들어가서 바꿔줘야 하므로 권한에 따라 추가 작업을 해줄 수 있습니다. PHPhotoLibrary.requestAuthorization(for: .readWrite) { [weak self] state in switch state { case .authorized: ... } } PH 코드..
-
task(priority:_:)SwiftUI 2023. 1. 28. 14:29
Adds an asynchronous task to perform before this view appears. 뷰가 나타나기 전에 비동기 작업을 추가한다. iOS 15 부터 지원하는 instance method 이다. 기존에는 비동기 작업을 하려면 아래와 같이 Task 를 사용해야했는데, ... var body: some View { aView { } .onAppear { Task { await load() } } } 아래와 같이 더 간편하게 사용할 수 있다. ... var body: some View { aView { } .task { await load() } }
-
StateObjectSwiftUI 2023. 1. 28. 14:01
ObservableObject를 인스턴스화 하는 프로퍼티 래퍼 SwiftUI 는 각 객체가 생성될 때 한 번만 새로운 객체를 생성하고, ObservableObject 의 @Published 프로퍼티가 바뀔 때 관련 뷰를 업데이트 합니다. 아래와 같이 사용할 수 있습니다. class Book: ObservableObject { @Published var title = "Great Expectations" } struct BookView: View { @StateObject var book: Book var body: some View { Text(book.title) } } state object를 ObservedObject attribute 를 갖는 프로퍼티로 넘길 수도 있지만, environmentOb..
-
ObservedObjectSwiftUI 2023. 1. 28. 13:31
A property wrapper type that subscribes to an observable object and invalidates a view whenever the observable object changes. ObservableObject 를 구독하고 ObservableObject 값이 바뀔 때마다 뷰를 무효화하고 새로 그리는 (invalidates a view) 객체 아래와 같이 사용할 수 있다. ObservableObject 객체를 @ObservedObject 프로퍼티 래퍼로 선언해두면, ObservableObject 의 @Published 값이 바뀔 때마다 뷰를 업데이트 한다. (새로 그린다.) class Book: ObservableObject { @Published var ti..
-
ObservableObjectSwiftUI 2023. 1. 28. 12:44
객체가 변경되기 전에 방출하는 퍼블리셔를 갖는 객체 타입 ObservableObject 는 objectWillChange 퍼블리셔와 동기화되어 있습니다. 이 objectWillChange 퍼블리셔는 @Published 프로퍼티가 변경되기 전에 값을 방출합니다. class Contact: ObservableObject { @Published var name: String @Published var age: Int init(name: String, age: Int) { self.name = name self.age = age } func haveBirthday() -> Int { age += 1 return age } } let john = Contact(name: "John Appleseed", age: ..
-
Swift Package 란Swift 2023. 1. 17. 15:45
Swift Package 란 재사용 가능한 코드 조각을 의미합니다. Swift, Objective-C, Objective-C++, C, or C++ 코드들이 올 수 있습니다. 번들 소스파일, 바이너리, 리소스 등을 앱에서 사용하기 쉽게 번들로 제공합니다. Xcode 12부터 (swift-tool-version: 5.3 이상) Swift Package Manager 를 사용해 Swift Package 를 만들고 배포하고 추가, 제거 뿐 아니라 의존성 관리도 할 수 있습니다. 참고 https://developer.apple.com/documentation/xcode/swift-packages Apple Developer Documentation developer.apple.com Swift Package M..