Skip to content

TokDDak/TokDDak-iOS-Final-

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

87 Commits
 
 
 
 
 
 
 
 

Repository files navigation

TokDDak-iOS

Service Work Flow

  1. 홈 화면 입니다.

  2. 로그인 / 회원가입

  3. 여행 제목 및 일정 선택

  4. 나라 및 도시 선택

  5. 카테고리 선택

    • 숙박
    • > 호텔 종류 선택
    • 식사
    • > 음식 종류 선택
    • 주류 및 간식
    • > 주류 및 간시 종류 선택
    • 교통
    • > 교통 종류 선택
    • 쇼핑
    • > 쇼핑 종류 선택
    • 액티비티
    • > 액티비티 종류 선택
  6. 예산 선정 완료

    • 전체 일정

Launch Screen.

개발 환경 및 사용한 라이브러리

개발환경

  • Xcode 11.3
  • iOS 13.3
  • cocoapod

라이브러리

  • XLpagerTapStrip
  • TinyConstraints
  • Moya

기능소개

메인뷰 - 풀스크롤 화면 구현 완료 - 비행기 애니메이셔 완료

  • 스크롤뷰 구현
  • 비행기 날아가는 애니메이션 구현
  • 여행전/여행중으로 현재 상태 구별
  • 컬렉션뷰로 인기여행지 도시 구현

메인뷰 - 여행중 뷰 구현

  • 커스텀바를 이용해 여행전뷰에서 여행중 뷰로 바로 넘어가게 커스텀 구현
스크린샷 2020-01-03 오후 10 34 23 스크린샷 2020-01-03 오후 10 34 29 스크린샷 2020-01-03 오후 10 35 15

도시선택

  • Expandable cell 구현
  • Page좌우로 넘어가는 PageTapBarController 완성 (XLTapBar이용)
  • 셀 선택시 해당도시로 여행 출발
스크린샷 2020-01-03 오후 10 35 23 스크린샷 2020-01-03 오후 10 35 32

여행 시작

  • 데이트 피커를 통한 데이터 입력
  • 출발 날짜와 도작 날짜를 이용해서 , dateFormatter를 이용해서 날짜 사이의 days 기간을 구함.
스크린샷 2020-01-03 오후 10 35 44 스크린샷 2020-01-03 오후 10 36 02

카테고리 (숙박, 음식, 쇼핑, 교통, 주류 및 간식, 액티비티) 선택 화면

  • 숙박 카테고리, 팝업뷰 통신 구현
  • 식사 카테고리, 통신 구현
  • 주류 및 간식 카테고리, 통신 구현
  • 교통 카테고리(더미) 구현, 키패드 업다운
  • 쇼핑 카테고리(더미) 구현, 키패드 업다운
  • 액티비티 카테고리 , 테이블 뷰 셀, 통신 구현
스크린샷 2020-01-03 오후 10 36 31 스크린샷 2020-01-03 오후 10 36 40 스크린샷 2020-01-03 오후 10 36 46 스크린샷 2020-01-03 오후 10 36 59 스크린샷 2020-01-03 오후 10 37 07 스크린샷 2020-01-03 오후 10 37 17 스크린샷 2020-01-03 오후 10 37 27 스크린샷 2020-01-03 오후 10 37 41

전체일정 예산 보기

스크린샷 2020-01-03 오후 10 37 48
스크린샷 2020-01-03 오후 11 36 57
### 일정 등록 뷰 - 카테고리별 버튼 클릭시 컬렉션뷰 아이템 변경됨 - 컬렉션뷰 클릭시 데이별로 구조체 데이터 정리화되서 데이터 기능 구현 - 데이 좌우 버튼 터치시 데이별로 데이터 변경 및 정렬

지출 입력 뷰

  • 버튼 클릭 구현
스크린샷 2020-01-03 오후 10 34 49

미구현 기능

  • 예산 히스토리 기능 미구현 (작업중)
  • 여해 중 페이지에서 쓴 예산 넘기는 작업 (작업중)
  • 여행상세페이지 미구현 (작업중)

문제점과 해결 방법 report

  • delegate 을 이용한 data 전달 방식 종류
    • segue 를 안 이용한 방식 </li
    protocol PopUpViewControllerDelegate: class {
        func popUpViewController(_ viewController: PopUpViewController, didReceiveData data: String, hotelNumber: Int, day: Int)
    }
    weak var delegate: PopUpViewControllerDelegate?
    delegate?.popUpViewController(self, didReceiveData: String(totalP), hotelNumber: subCategory, day: Day)
    
    let vc = storyboard?.instantiateViewController(withIdentifier: "CategoryFoodViewController") as! CategoryFoodViewController
    
    
  • reusable cell 사용시 버튼 tag 사용
func activityCell(_ cell: ActivityCellTableViewCell, didTapSelectButton button: UIButton) {
let tag = button.tag
guard let model = responseModel?[button.tag] else { return }
if selectedIndex.contains(tag) { // 재사용된 셀이 이미 선택이되서 active된 상태이면, 선택 해제된 셀을 재사용셀로 사용한다.
  • xib로 뷰 구성후
let headerView = UIView.instantiate(CityChooseSection.self)
headerView.foldButton.tag = section

headerView.configure(with:  twoDimensionalArray[section].country)
headerView.delegate = self
return headerView
  • xib로 뷰 구성하 전 코드로 작성한 Section View
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.width, height: 50))
headerView.backgroundColor = .lightGray

let country = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
country.text = twoDimensionalArray[section].country
country.textAlignment = .center
country.backgroundColor = .cyan
country.width(100)


let button = UIButton(type: .system)
button.frame = CGRect(x: 0, y: 0, width: 100, height: 50)
button.setImage(UIImage(named: "naviBtnBackB"), for: .normal)
button.setImage(UIImage(named: "cursor"), for: .selected)
button.backgroundColor = .clear
button.tintColor = .black

button.width(50)
button.height(50)
button.addTarget(self, action: #selector(handleExpandClose), for: .touchUpInside)

button.tag = section

headerView.addSubview(country)
headerView.addSubview(button)
let underline = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.width, height: 1))
headerView.addSubview(underline)
underline.backgroundColor = .black
country.leadingToSuperview()
country.centerYToSuperview()
button.trailingToSuperview()
button.centerYToSuperview()
underline.height(1)
underline.trailingToSuperview()
underline.leadingToSuperview()
underline.bottomToSuperview()

return headerView 

struct DayPlanData {
    
    var day: Int = 0
    var array2: [(Int, Int)]
    var dayCost: Int = 0
   
}
데이별로 구조체 배열을 이용해 일별 데이터 관리

```swift
class TotalPlanData: CustomStringConvertible {

static let shared = TotalPlanData()
private init() {}

var startDate: String = ""
var endDate: String = ""
var travelDays: Int = 0
var cityName: String = ""
}

singleton patter을 이용한 전체 데이터 효율적 관리 private init(){} 을 통해 외부 참조 생성 방지

About

✈️ 2019 겨울 SOPT App Jam Project ✈️

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages