오늘은 런닝앱을 만들고 있는 부분에 대한 고민과 과정에 대한 기록을 하려고 한다! 현재 런닝앱을 만들고 있는데 내가 뛴 기록을 공유하고 기록을 차곡차곡 쌓아나갈 수 있는 앱을 만들어 보려고한다. 현재 런닝을 기록하는 부분은 데이터를 저장하는 로직을 제외하고 거의 구현이 완료되었고 현재 주, 월 별로 저장된 기록을 확인하는 Record를 구현하고 있는 중이다.먼저 런닝을 기록하는 부분을 살펴보면struct RunningSession { let id: UUID let date: Date let distance: BehaviorRelay let duration: BehaviorRelay let locations: BehaviorRelay init(id: UUID = UU..
Swift 5.5부터 도입된 async/await는 기존의 비동기 처리방식인 DispatchQueue나 completionHandler를 사용해 처리했지만 더욱 직관적이고 관리하기 쉽게 만들어 주는 기능이다. 기존의 비동기 처리 방식과 비교해 코드의 가독성과 유지보수성을 크게 향상시킬 수 있다는 장점을 가지고 있다.https://developer.apple.com/videos/play/wwdc2021/10132/ Meet async/await in Swift - WWDC21 - Videos - Apple DeveloperSwift now supports asynchronous functions — a pattern commonly known as async/await. Discover how the ne..
이전까지 PHAsset을 활용해 사진을 가져오고 가져온 사진을 Core Image를 활용해 필터를 적용하는 방식까지 알아봤다오늘은 이미지 편집 과정 중 크롭에 대해서 알아보려고 한다.먼저 EditCropViewModel을 만들어 VM에서 해야할 역할을 만들어 주었다. 이 VM은 이미지의 크롭을 관리하는 주요 속성과 메서드를 가지게 된다.@Published var cropRect: CGRect = .zero@Published var cropApplied: Bool = false@Published var isCropBoxVisible: Bool = true@Published var croppedImage: UIImage?var image: UIImage먼저 속성을 정의해야한다. cropRect는 크롭박스의 ..
오늘은 PHAsset에 이어 Core Image에 대해서 다뤄보려고 한다. 가져온 이미지를 바탕으로 효과를 넣어 사용할 수 있는 Core Image에는 정말 다양한 내용이 있다. 먼저 Core Image는 애플에서 제공하는 아주 강력한 이미지 처리 및 분석 프레임 워크이다. 다양한 이미지의 필터, 변형, 분석 기능을 제공한다. 이 프레임 워크는 GPU 가속을 활용해서 이미지에 효과를 적용할 수 있도록 하고 모든 iOS 버전에서 사용이 가능하다 🙂 여기서 이미지를 처리한다는 개념은 필터를 적용하는건데 input 이미지를 픽셀단위로 검토하고 이미지에 특정한 효과를 적용해서 output 이미지를 만들어내는 것 이다. Core Image 구성요소먼저 주요 구성 요소를 살펴보면CIImageCIImage는 이미지..
요즘 코어 이미지 활용해서 사진 라이브러리 동기화 한 후 편집하는 프로젝트를 진행하면서 가장 많이 공부 했던 PHAsset에 대해서 기록으로 남겨두려고 한다 🙂PHAsset란 무엇인가PHAsset는 iOS 장치 내 Photos 앱에서 관리하는 이미지, 비디오, 라이브 포토 등 데이터를 나타낸다고 생각하면 된다.사진, 비디오 뿐만 아니라 생성날짜, 위치, 미디어 등 여러가지 해당하는 데이터의 세부정보까지 가져올 수 있다. PHAsset 가져오기먼저 PHAsset를 사용하기 전에 이용자에게 사진 라이브러리에 접근할 수 있는 권한을 요청해야한다. 이 권한이 부여되어야 에셋에서 사진 정보를 가져올 수 있게 된다. infoplist에 사진 권한 추가는 여기서 따로 다루지는 않을 예정 그냥 권한 요청에 대한 내용..
오늘은 Combine을 사용하면서 assign과 sink의 차이가 흥미로워 기록으로 남겨두려고 한다. 먼저 Combine을 사용하면서 이전에 구현했던 방식이 이렇게 구현된다는게 너무 재밌다.. 뭔가 되게 살아있는 무언가를 키우는 느낌이랄까 이런 재미가 있다가 새로운걸 알게 되면 또 이런 재미가 있고.. 아무튼 두가지의 데이터 처리 방법에 대해서 알아보고 어떤 차이가 있는지 살펴보자! assignhttps://developer.apple.com/documentation/combine/publishers/comparison/assign(to:)/먼저 assign에 대해서 살펴보면 이 메서드를 통해 Publisher의 출력값을 직접 객체의 프로퍼티에 간단하고 직관적이게 할당할 수 있는 기능을 가지고 있다. 퍼..