Pay Road는 당신의 소중한 여행을 기록하는 여행 가계부 앱입니다.

Pay Road를 통해 여행 중에 지출한 내역을 쉽게 정리하세요.
여행이 끝난 후에는 지도를 활용하여 지출 내역을 한 눈에 파악할 수 있습니다.

Team Introduction

Refuel 팀을 소개합니다.

Frdy

손동찬

가계부의 계산 및 지도 기능을 주로 개발

Nois

김유석

앱의 재사용성을 높이는 유틸을 주로 개발

Brix

구찬우

앱 디자인 및 Custom View를 주로 개발

Demo

Demo를 통해 PayRoad를 알아보세요!

여행 목록 및 여행 추가

사용자는 여행 명을 작성하고 캘린더 뷰를 통해 여행 날짜를 지정하여 여행을 생성합니다. 기본으로 제공하는 배경 사진이나 나만의 사진을 여행 배경으로 등록할 수 있습니다.

Reusable View

여행 생성에 사용되는 뷰/뷰컨트롤러는 여행 수정에서도 재사용됩니다. 이렇게 같은 뷰/뷰컨트롤러를 재사용하여, 중복되는 코드를 최소화 하기위해 노력했습니다.

Custom View - Calendar

Custom Calendar View는 CollectionView와 (NS)Calendar를 이용하여 구현하였으며, 이를 이용하여 여행일을 간편하게 입력할 수 있습니다.

통화 및 예산

사용자는 원하는 통화를 검색하여 추가할 수 있습니다. 통화의 환율은 API 통신을 통해 현재 환율 정보를 사용할 수도 있고, 사용자가 직접 입력한 값을 사용할 수도 있습니다. 또한 각 통화에 따라 예산을 설정할 수 있습니다.

Locale

현재 지역에 따라 기준 통화가 설정되며, 다른 통화의 환율은 기준 통화에 대한 비율로 표기됩니다.
ex) 1 EUR당, 1,350원

Search Bar

UISearchBar, UITableView를 이용하여 원하는 통화를 검색하는 기능을 구현하였습니다. 이미 추가된 통화는 다시 검색되지 않습니다.

Currency API

URLSession을 이용, API 서버와 통신하여 통화의 환율 정보를 받아올 수 있습니다.

날짜 및 통화별 지출내역

여행 기간동안 각 통화별 지출 금액과 남은 예산을 쉽게 확인할 수 있습니다. 상단의 한 줄 달력에서 날짜를 선택하면 해당 날짜의 지출 내역 또한 손쉽게 파악할 수 있습니다.

Custom View - Daily

한 줄 달력은 Collection View를 통해 구현되었습니다. 사용자는 cell을 선택하여 해당하는 날짜의 지출 내역을 손쉽게 확인할 수 있습니다.

Budget View

아래의 지출 내역은 화폐의 종류 혹은 결제 수단에 따라서 쓴 돈과 남은 돈을 각각 확인할 수 있습니다. Tap Gesture를 통해 다른 결제수단 및 화폐를 선택할 수 있고 그에 따른 지출 내역은 Progress View를 사용하여 시각적으로 표현했습니다.

지출 목록 추가

지출에 대한 정보를 작성할 수 있습니다 기본적으로는 지출 항목, 금액, 결제수단, 카테고리 등을 입력할 수 있으며 추가적으로 간단한 설명이나 사진들을 추가할 수도 있습니다. 더 나아가 위치를 자동으로 저장하거나 장소를 직접 선택하여 돈을 어디서 사용했는지 확인할 수 있습니다.

Custom UX

당기는 UX를 통해 여행 중에도 빠르고 간편하게 지출을 추가할 수 있습니다.

TextView Extension

Extension을 이용해 TextView의 Placeholder를 구현하였습니다.

Location

Google Places API를 통해 장소를 입력하거나, Reverse GeoCoding을 이용하여 현재 위도, 경도를 유저가 이해할 수 있는 주소로 변환합니다.

Multi Image Picker

Multi Image Picker를 구현하여 여러 장의 이미지를 선택할 수 있습니다. 선택한 이미지는 순서가 보장되며, 첫 번째로 선택한 이미지는 대표 이미지로 등록됩니다.

가계부 지도

내가 등록한 지출 내역을 지도에서 한 눈에 확인할 수 있습니다. 하단에는 지출에 대한 간략한 정보를 보여주고, 순차적으로 지출이 어디서 어떻게 발생했는지 추적할 수 있습니다.

Map

Google Maps SDK를 사용하여 지출 금액을 나타내는 Marker View를 만들어 시간 순서로 경로를 보여주었습니다.

Marker Detail View

부족한 정보를 보충하기 위해, 하단에는 Collection View를 사용하여 Marker와 CollectionView가 함께 움직이도록 하였습니다.

Realm Cascade Delete

Realm에서는 기본적으로 Cascade delete를 지원하지 않습니다. PayRoad에서는 여행이나 통화 등의 모델에서 하위 오브젝트를 함께 삭제하는 것이 필요하여 Protocol과 Extension을 이용하여 Cascade delete를 구현하였습니다.

Photo Detail

사진을 확대해서 상세하게 볼 수 있는 뷰를 ScrollView 통해 구현하였으며 여러장의 사진을 좌우로 넘기며 볼 수 있습니다. 또한 Pan Gesture을 통해 내려서 사진을 닫는 기능을 구현했습니다.

3D touch

홈 스크린에서 3D touch를 이용하여 사용 내역을 쉽고 빠르게 추가할 수 있습니다.