6축 데이터(acc 3축 + gyro 3축)를 실시간으로 측정하는 앱
프로젝트 기간: 2023.06.12 - 2023.06.18
- 실행 화면
- 앱 기능
- 적용 기술
- 추가구현
RPReplay_Final1687062766.mp4
- 측정 버튼을 눌러 Acc, Gyro 타입의 데이터를 선택하여 측정
- Swipe하여 delete 또는 play
- play 버튼 클릭시 저장된 데이터 실시간으로 화면에 그리기
- 저장된 List 클릭시 view 모드로 저장된 데이터 띄우기
메인 화면 |
삭제 |
측정 화면 |
play 모드 |
view 모드 |
![](https://camo.githubusercontent.com/522ffa291354d0cb8b67644e5c94bc2780d05613eb18d7b1f8264beffea05ce3/68747470733a2f2f6861636b6d642e696f2f5f75706c6f6164732f53314650695a3250322e676966) |
![](https://camo.githubusercontent.com/0edda14f3d9bef8afcb44fff5cf4a9ab7353f70dd16b4eba66e91da47fe8821e/68747470733a2f2f6861636b6d642e696f2f5f75706c6f6164732f4879665973626e76682e676966) |
![](https://camo.githubusercontent.com/2f9134f20df708b9c5299707c4a36f2be0ceee756e65be337f31d7d1a9d02593/68747470733a2f2f6861636b6d642e696f2f5f75706c6f6164732f7279696f6a2d3376332e676966) |
![](https://camo.githubusercontent.com/39c9832346122237796a7998edf54344cbc50fa779019c84900bf9b04f33fa2b/68747470733a2f2f6861636b6d642e696f2f5f75706c6f6164732f486b3268735a6877322e676966) |
![](https://camo.githubusercontent.com/2b9bdaf4d99571c80bc5b62a0e6cb9b91a3d5d46419b24f1dcddae98a15c19e3/68747470733a2f2f6861636b6d642e696f2f5f75706c6f6164732f484a33526f623276322e676966) |
UI |
Local DB |
Reactive |
Architecture |
UIKit |
CoreData, FileManager |
Combine |
MVVM |
- UIKit을 사용하여 코드베이스로 UI를 구성하였습니다.
- 총 3개의 화면으로 구성되어 있습니다.
- GyroDataList 화면
- Measurement 화면
- Detail (view 모드, play 모드) 화면
GyroDataList
화면은 UITableView
를 활용하였습니다.
- 데이터 구성은
DiffableDataSource
, NSDiffableDataSourceSnapshot
를 사용하였습니다.
Measurement
화면은 segmentedControl, 그래프 view, 버튼 2개로 구현되어 있어 값을 측정할 수 있습니다.
Detail
화면은 2가지 모드가 있어 cell
을 선택하면 view
모드가 선택되어 저장된 값을 화면에 보여주고, Swipe action
을 통해 play
버튼을 선택하면 play
모드가 선택되어 실시간으로 그래프를 그려줍니다.
- 측정한 값은 CoreData와 FileManager로 저장되고 CoreData에는 날짜, 제목, 측정시간이 저장되고 FileManager에는 측정한 값을 JSON 파일로 encoding하여 저장됩니다.
- List 화면에 띄우는 정보는 CoreData에서 가져옵니다.
- 그래프 화면에 띄우는 정보는 FileManager에 저장된 JSON 파일을 Decoding하여 가져옵니다.
- ViewController의 역할을 분리하고자 MVVM 패턴을 사용하였습니다.
- View - ViewModel간 바인딩시 Apple에서 제공하는 Combine 프레임워크를 사용하였습니다.
- 디자인 패턴중
Builder
패턴을 활용하여 AlertBuilder
를 구현하였습니다.
private func showAlert(_ title: String, _ message: String) {
let okSign = "확인"
AlertBuilder(viewController: self)
.withTitle(title)
.andMessage(message)
.preferredStyle(.alert)
.onSuccessAction(title: okSign) { _ in }
.showAlert()
}