Skip to content

TeamMoBo/plot-iOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽฌ ์˜ํ™”๊ด€์—์„œ์˜ ์ฒซ ๋ง›๋‚จ , ์˜ํ™” ๋ฐ์ดํŠธ ๋งค์นญ ์„œ๋น„์Šค , Plot ๐Ÿฟ

Plot [์ค„๊ฑฐ๋ฆฌ] ๋‹น์‹ ์˜ ๋งŒ๋‚จ์ด ๊ฐ€์žฅ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋„๋ก, Plot์€ ๋‹น์‹ ์„ ์œ„ํ•œ ์ค„๊ฑฐ๋ฆฌ๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

์–ธ์ œ๊นŒ์ง€ ๋‹ต์žฅ์—†๋Š” ์†Œ๊ฐœํŒ… ์•ฑ์— ๋งค๋‹ฌ๋ฆด๊ฑฐ์•ผ?

์ค€๋น„๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋‹ค ํ• ๊ฒŒ. ๋„ˆ๋Š” ๋”ฐ๋ผ์˜ค๊ธฐ๋งŒ ํ•ด !

10๋ถ„ ๋งŒ์— ๋Œ€ํ™”๋ถ€ํ„ฐ ์˜ˆ๋งค๊นŒ์ง€ ์ „๋ถ€ ๋๋‚˜๋Š” ์˜ํ™” ๋ฐ์ดํŠธ ๋งค์นญ.

์Šคํฌ๋ฆฐ์ƒท 2019-10-22 ์˜คํ›„ 2 37 38

SwiftBadge XcodeBadge iOS

๊ฐœ๋ฐœ ๊ธฐ๊ฐ„: 2019.12.21 ~ 2020.01.03

iOS : chokyungjin , ujcheon


๐Ÿ‘ Application Service Work flow

์›Œํฌํ”Œ๋กœ์šฐ


๐Ÿ‘ Development Environment and Using Library

  • Alamofire 4.7 [Connection Library]
  • FloatRatingView 4 [Rating Library]
  • Pageboy 3.2 [Top Tabbar]
  • Lottie [JSON Animation IMG]
  • Tabman 2.6 [Top Tabbar]
  • Firebase/Database [FirebaseDatase]
  • Firebase/Auth [FirebaseCRUD]
  • Firebase/Storage [FirebaseDB]
  • Firebase/Analytics [FirebaseDB]
  • Firebase/RemoteConfig [FirebaseDB]
  • SnapKit 5.0.0 [AutoLayout]
  • TextFieldEffects [TextField]
  • ObjectMapper 3.4 [JSON Package]

๐Ÿ‘ Function Introduction

Function Implemention Etc , Part Priority
SignIn / SignUp โ–ณ Implementing ujcheon 1
Rating โญ•๏ธ Completed , chokyungjin 2
Tabbar On Top โญ•๏ธ Completed, chokyungjin 1
GradientLayer โญ•๏ธ Completed, chokyungjin 2
MultiInteraction โญ•๏ธ Completed, chokyungjin 1
Firebase_Chatting โญ•๏ธ Completed, chokyungjin 1
Custom PopUp โญ•๏ธ Completed , ujcheon 1
Custom PickerView โญ•๏ธ Completed, chokyungjin 1
RadioButton , Photo Iibrary โญ•๏ธ Completed , ujcheon 1
CustomNavigationBar โญ•๏ธ Completed, chokyungjin 1
Thread Sleep โญ•๏ธ Completed, chokyungjin 1
IBCollection โญ•๏ธ Completed, chokyungjin 1
KeyboardConstraint โญ•๏ธ Completed, chokyungjin 1
SplashLaunScreen โญ•๏ธ Completed, chokyungjin 1
HashTag โญ•๏ธ Canceled , ujcheon 3
MyPageView โญ•๏ธ Completed , ujcheon 2
urlLinkOpen โญ•๏ธ Completed, chokyungjin 2
MatchingSuggestionView โญ•๏ธ Completed, ujcheon 2
ChattingWaitingView โญ•๏ธ Completed, ujcheon 2
PaySystem In App โŒ Canceled 3
CustomStepper โŒ Canceled 3

๐Ÿ‘ Screenshots

์ดˆ๊ธฐ ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…



์ดˆ๊ธฐ ํ™ˆ ํ™”๋ฉด์€ ํ……๋นˆ ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ , ํ˜„์žฌ ์ƒ์˜์ž‘ ํ˜น์€ ๊ฐœ๋ด‰ ์˜ˆ์ •์ž‘์œผ๋กœ ์˜ํ™” ์„ ํƒ๊ณผ ์‹œ๊ฐ„ ์„ ํƒ ๊ฒฐ์ •



๋งค์นญ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•œ ์ฑ„ํŒ… ํŒŒํŠธ๋„ˆ ๊ฒฐ์ •



๋งค์นญ ์„ ํƒ ํŒ์—… , ์ฑ„ํŒ… ๋ทฐ



๋งค์นญ ์„ฑ๊ณต , ์‹คํŒจ ํŒ์—…



์‹œ๊ฐ„ ์ˆ˜์ • ํŽ˜์ด์ง€(Implementing)



๋งค์นญ ์ด๋ ฅ

์Šคํฌ๋ฆฐ์ƒท 2020-01-03 ์˜คํ›„ 11 39 34์Šคํฌ๋ฆฐ์ƒท 2020-01-03 ์˜คํ›„ 11 52 10


๐ŸŽฏ Issue and Bug Report

  • Issue 1

    • Git ์„ ํ†ตํ•œ ํ˜‘์—… ๊ฒฝํ—˜์˜ ๋ถ€์žฌ๋กœ ์ธํ•œ Branch ๊ฒฝํ—˜ ๋ถ€์กฑ
    • Master ์—์„œ์˜ Commit ์„ ํ”ผํ•˜๊ณ  Develop ๋ธŒ๋žœ์น˜๋ฅผ ํ•˜๋‚˜ ๋” ์ƒ์„ฑํ•˜์—ฌ ์ถฉ๋Œ Handling

    ์Šคํฌ๋ฆฐ์ƒท 2020-01-03 ์˜คํ›„ 7 28 17์Šคํฌ๋ฆฐ์ƒท 2020-01-03 ์˜คํ›„ 7 53 25

  • Issue 2

    • ์ด๋ฏธ์ง€๋ฅผ ์บ์‰ฌ๋กœ ๋ฐ›์ง€์•Š๊ณ  ์‚ฌ์šฉํ•œ ์  , ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ†ต์‹ ํ•  ๋•Œ Cache๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ.
    OperationQueue().addOperation {
                    let thumnailImage = self.getThumnailImage(withURL: movie.thumnailImageURL)
                    DispatchQueue.main.async {
                        cell.imageThumbnail.contentMode = .scaleAspectFill
                        cell.imageThumbnail.image = thumnailImage
                        
                    }
                }
  • Issue 3

    • ์œ ์—ฐํ•œ AutoLayout Setting ๋ถ€์กฑ.
    • Scroll view ์˜ ์˜คํ† ๋ ˆ์ด์•„์›ƒ์„ ์žก๋Š”๋ฐ view์˜ height ๋ฅผ ๊ณ ์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ scroll view์˜ height ๋ฅผ ๊ณ ์ •ํ•ด์„œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ์—ˆ๋‹ค. view์˜ height๋ฅผ ๊ณ ์ •ํ•˜๊ณ  ๋“ค์–ด๊ฐ€๋Š” image ์— ์˜คํ† ๋ ˆ์ด์•„์›ƒ์„ ์ฃผ๋‹ˆ ํ•ด๊ฒฐ.
  • Issue 4

    • ์„œ๋ฒ„ ํ†ต์‹  ๊ฒฝํ—˜ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ ์ €์žฅ , ์ด๋ฏธ์ง€ URL ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” KingFisher ๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๊ธฐ๋กœ ํ•จ.
    func getMovieList(completion: @escaping (ListResponse?) -> Void) {
            guard let finalURL = URL(string: appUrl) else {
                return
            }
            let session = URLSession(configuration: .default)
            var request = URLRequest(url: finalURL)
            request.addValue("application/x-www-form-urlencoded" , forHTTPHeaderField: "Content-Type")
            request.httpMethod = "GET"
            let task = session.dataTask(with: request) { (data, response, error) in
                if let error = error {
                    print(error.localizedDescription)
                    return
                }
                guard let resultData = data else {
                    return
                }
                do {
                    let movieLists: ListResponse  = try JSONDecoder().decode(ListResponse.self, from: resultData)
                    self.dataManager.setMovieList(list: movieLists.results.randMovie)
                    self.dataManager.setReserveMovieList(list: movieLists.results.reserveMovie)
                    self.dataManager.setReserveDateList(list: movieLists.results.reserveDate)
                    self.dataManager.setDidOrderTypeChangedAndDownloaded(true)
                    self.reloadMovieLists()
                    completion(movieLists)
                }
                catch let error {
                    print(error.localizedDescription)
                }
            }
            task.resume()
        }
  • Issue 5

    • UIPickerView 2๊ฐœ๋ฅผ ํ•œ ๋ทฐ์—์„œ ์“ฐ๋Š”๋ฐ ํ•˜๋‚˜์˜ Picker view์—์„œ ์ž…๋ ฅ๊ฐ’์ด(titles.count) ๋‹ค๋ฅธ picker view์— ์˜ฎ๊ฒจ์กŒ๋˜ ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ๊ณ  func pickerView ๋ฅผ ๋‘๊ฐœ๋กœ ๋‚˜๋ˆด๋˜ ๊ฑธ ํ•œ๊ฐœ๋กœ ํ•ฉ์น˜๊ณ  delegate๋ฅผ 2๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์จ์„œ ํ•ด๊ฒฐ.
extension SignUpSecondVC: ToolbarPickerViewDelegate, ToolbarPickerViewDelegate2 {
    
    func didTapDone() {
        let row = self.pickerView.selectedRow(inComponent: 0)
        self.pickerView.selectRow(row, inComponent: 0, animated: false)
        self.minAgeField.text = self.titles[row]
        self.minAgeField.resignFirstResponder()
    }
    
    func didTapDone2() {
        let row = self.pickerView2.selectedRow(inComponent: 0)
        self.pickerView2.selectRow(row, inComponent: 0, animated: false)
        self.maxAgeField.text = self.titles[row]
        self.maxAgeField.resignFirstResponder()
    }
  
...
  
extension SignUpSecondVC: UIPickerViewDataSource, UIPickerViewDelegate {
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return self.titles.count
    }
    
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return self.titles[row]
        
    }

๐Ÿ‘ Contributor

  • ์กฐ๊ฒฝ์ง„

    ์•ˆ๋…•ํ•˜์„ธ์š”!! Sopt 25๊ธฐ iOS ํŒŒํŠธ ์กฐ๊ฒฝ์ง„์ž…๋‹ˆ๋‹ค! ์ด๋ฒˆ ์•ฑ์žผ์œผ๋กœ ๋”์šฑ ๋” ์‹ค๋ ฅ์ด ์ƒ์Šนํ•˜๊ณ  ๋””ํ…Œ์ผํ•œ UX์— ๋Œ€ํ•ด ๊ณ ๋ คํ•ด๋ณด๋Š” ์‹œ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค!

  • ์ฒœ์œ ์ •

    ์•ˆ๋…•ํ•˜์„ธ์š”! Sopt 25๊ธฐ iOS ํŒŒํŠธ ์กฐ๊ฒฝ์ง„์˜ ๋…ธ์˜ˆ ์ฒœ์œ ์ •์ž…๋‹ˆ๋‹ค! ์ €๋Š” ์ด๋ฒˆ ์•ฑ์žผ์„ ํ†ตํ•ด ๋ทฐ์งœ๊ฐœ์˜ ์‚ถ์„ ๋‹คํ•˜๊ณ  ์ฝ”๋”ฉ์˜ ์‹ ์œผ๋กœ ๊ฑฐ๋“ญ๋‚  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ‘ Other Part

๐Ÿ‘จโ€๐Ÿ’ป Planner

  • ์‹ ๊ฐ€์ธ
  • ๊น€์ˆ˜๋นˆ

๐Ÿ‘ฉโ€๐Ÿ’ป Designer

  • ์•ˆํ˜•๋ฏผ
  • ์ •ํ˜„๊ฐ•
  • ์กฐ์ˆ˜๋ฏผ

๐Ÿ‘จโ€๐Ÿ’ป Server

  • ์ด์ƒ์œค
  • ์–‘ํฌ์—ฐ
  • ์ด๋‹คํ˜„
  • ์ด์žฌ์šฉ

๐Ÿ‘ฉโ€๐Ÿ’ป Android

  • ํ™ฉ์ง€ํ˜œ
  • ๊น€๋ฏผ์ง„
  • ๊ฐ•์ˆ˜๋นˆ
  • ๋ฐ•๊ธธํ˜„

๐Ÿ‘จโ€๐Ÿ’ป iOS ๐Ÿ’ป

  • ์กฐ๊ฒฝ์ง„
  • ์ฒœ์œ ์ •

๐Ÿ‘ Report

Please file issues to send feedback or report a bug. Thank you ! btnSend@3x


๐Ÿ‘ References

How to Use Chatting in iOS

ColectionView in TableView

How to Use Lottie

Releases

No releases published

Packages

No packages published

Languages