Skip to content

ujcheon/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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages