Giter Site home page Giter Site logo

baseball's Introduction

Hi there 👋

baseball's People

Contributors

eeeesong avatar ehdrhelr avatar godrm avatar lia316 avatar

Forkers

eeeesong

baseball's Issues

Game DTO 형식 정하기

이슈를 파서 논의하면 더 수월할 것 같아서 하나 생성해보았습니다 :)

  • 참고로 swift는 카멜케이스(goodNight)가 기본인데, json에서는 스네이크케이스(good-night)가 국룰이라고 알고 있습니다!
  • 그래서 swift 변수명은 전부 카멜케이스로 되어있지만 json이나 java 사정을 고려하여 편하게 작성해주시면 될 것 같아요!!
  • 변수 이름 역시도 클라이언트에서 디코딩 시 코딩 키 설정해서 바꿔 들여올 수가 있어서, 제가 작성한 변수명이 백엔드 사정에 맞지 않는다면 마음껏 바꾸셔도 괜찮습니다

[iOS] iPad 이상 사이즈에서 일부 그래픽 깨지는 현상

버그 내용

스크린샷 2021-05-11 오후 8 00 18

  • CALayer로 그린 부분은 전부 깨짐
  • Core Graphics로 그린 부분은 깨지지 않음
  • (참고) modal presentation style은 추후 변경 예정! 현재 임시로 전환 구현한 것 -> Lia 구현부에 이미 구현되어 있는 것으로 예상

예상 이유

  • Core Graphics는 View가 다시 그려져야 할 때마다 draw 호출로 알아서 크기 조정되어 깨지지 않는 것으로 예상
  • 현재 CALayer는 ViewController의 ViewDidLoad 시 View init 메소드 부분에서 그려준 뒤, ViewAppear 시점 이후 다시 불리지 않아서 오토레이아웃이 적용된 크기만큼 늘어나지 않는 것으로 추정

=> ViewDidAppear에서 다시 그려주면 될 것이다!

[iOS] 게임 선택 로직 구현

작업 목록

  • OAuth 구현
  • 사용자 모델 구현 (?)
  • GET : 팀 목록 받기
  • POST : 팀 선택 시

초기 로드

  • 네트워크 구현 (combine)
  • GET : 팀 목록 받기
  • selected/unselected 에 따라 버튼 비활성화 로직 구현

cell의 button 입력 시

  • 셀과 뷰컨 사이 정보 전달 (유저 & 팀 정보) - delegate or notification
  • POST : 유저 & 팀
  • 다음 화면으로 이동 (delegate)
struct Info {
    let userID: String
    let game: Game
}
struct Game: Hashable, Decodable {
    let id: Int
    let home: Team
    let away: Team
}

struct Team: Hashable, Decodable {
    let team: String
    let status: String
}

예상 데이터 형태

GET

[{
   "away": { 
            "team":  "Captin",
            "status": "selected"
           },
   "home": { 
            "team":  "Marvel",
            "status": "unselected"
           }
},
{
   "away": { 
            "team":  "Twins",
            "status": "selected"
           },
   "home": { 
            "team":  "Tigers",
            "status": "unselected"
           }
}]

POST

{ 
    "userID": "user123",
    "game": {
        "away": { 
            "team":  "Captin",
            "status": "selected"},
       "home": { 
            "team":  "Marvel",
            "status": "unselected"}
            }
}

선택 방법

👉🏻 테이블뷰 안에 버튼 넣고 버튼 터치 시 액션 진행

  • button을 title 읽는 대신, 내부에 홈팀, 원정팀 데이터를 저장한다
  • POST 는 user 정보와 함께 전달해야하므로..
  1. button touched → noti 주기
  2. cell data fill → user 정보 함께 전달

[iOS] 야구장 그래픽 및 애니메이션

공격 / 수비 게임 애니메이션

일단 공부할 예정~

돌입 전 세팅

  • View 및 Layer 객체 단위 나눠보기
  • Color Asset 등록

그래픽 구현

  • S🟡 B🟢 O🔴 동그라미
  • 야구장 필드 뷰
  • 야구장 base 애니메이션
  • 주자 이동 애니메이션
  • S B O text를 layer로 추가

[iOS] pitch 결과로 화면 업데이트 시의 버그

  • 타자 교체 시 ball count가 리셋되지 않는 문제
  • base 여러 개에 선수가 있을 시 하나의 base에만 불이 들어오는 문제
  • 여러 Player가 base에 있을 때의 애니메이션 문제 -> 하나만 실행됨

[iOS] Memory Leak?

  • SelectionViewController에서 Memory Leak 발생

self가 가지고 있는 요소의 delegate를 self로 지정해서 강한 참조가 발생한 게 아닐까요..?
tableView의 dataSource나 delegate가 weak 으로 되어있으니 viewModel의 delegate도 weak하게 설정해주면 되는 것 같기도 하네요!!

    private func configureDataSource() {
        self.dataSource = UITableViewDiffableDataSource.init(tableView: self.gameListTableView) { (tableView, indexPath, game) -> UITableViewCell in
            
            let cell = self.gameListTableView.dequeueReusableCell(withIdentifier: GameCell.reuseIdentifier) as! GameCell

            self.viewModel.setCellInfo(with: game)
            self.viewModel.delegate = self // <- ? 
            
            cell.updateUI(with: self.viewModel)
            self.bindSelection(with: cell)
            
            return cell
        }
    }

다만 메모리 그래프가 여전히 안 열려서 확인은 전혀 못해봤어요
OS 업데이트 문젠가 싶어서 업데이트 데이터 다운로드 중입니다ㅎㅎ..

[iOS] 게임 진행 화면 View 구성

  • Score View
  • Ground 영역 View
    - Core Graphics 및 애니메이션은 추후 구현
  • Player Info View
    - 고민: tableView에 포함시킬 것인가? 따로 View를 만들 것인가?
    - 개별 View로 생성 (디자인 변경)
  • 진행상황 TableView

5월 4일 추가

  • 투수 선택 인터페이스 추가

[iOS] 게임 모델 구현

  • 게임 진행 화면의 게임 모델 구현
  • 모델의 효율적인 운용을 위한 수정
    • 바뀌는 시기에 따라 뭉쳐놓을 수 있도록
    • 역할에 따른 객체 생성
  • DTO 작성

[iOS] 게임 선택 → 게임 진행 화면 이동

작업 해야할 부분

  • 화면 넘기기
  • 정보 전달하기

문제 사항

  • 셀 안에서는 self.navigation 을 호출할 수 없음

고민 중인 해결 방법

  • 버튼 터치 시, 노티 주기 → 뷰컨에서 받아서 self.navigation 으로 화면 이동
    • 뷰컨에서 그런 일을 하도록 만들고 싶지 않음...ㅠㅠ
  • 셀 안에서 self.navigation 쓸 수 있는 방법 찾기
  • storyboard reference 를 써서 연결하기

[iOS] 네비게이션 컨트롤러로 애니메이션 없이 화면 전환 시 그래픽이 깨지는 현상

스크린샷 2021-05-13 오후 9 15 50

오늘 오후 iOS 회의 시 발견한 현상

-> selectionVC에서 gamePlayVC로 넘어갈 때 animated를 false -> true로 바꾸면 깨지지 않게 됨

    func didPressButton(with gameInfo: GameInfo) {
        let nextVC = ControllerFactory.instantiate(viewController: GamePlayViewController.self) as! GamePlayViewController
        nextVC.getInfo(with: gameInfo)
        
        self.navigationController?.pushViewController(nextVC, animated: true) // <- 
    }

스크린샷 2021-05-13 오후 9 13 58

  • viewDidAppear 시점에 view들을 configure 하는데,
  • animated false 설정 시, VC의 오토레이아웃이 화면 크기에 맞게 조정되는 시점이 다른 것으로 추정?

[iOS] home에 player 처음 생성 시 위치가 다른 버그

버그 내용

full animation

ezgif-4-7df92f5a9c2c

  • 홈 -> 1루 -> 2루 -> 3루 -> 홈 애니메이션을 연속적으로 실행시켜 놓은 상태

before

스크린샷 2021-05-11 오후 5 15 00

after

스크린샷 2021-05-11 오후 5 14 02

  • 뷰 로드 시 player를 home 위치에 생성하는데,
  • 위의 이미지처럼 이후 애니메이팅 되는 위치와 20쯤 다르게 나타남
    • before: (x = 188.37, y = 287.5)
    • after: (x = 207.87, y = 287.5)
  • 그러나 위치 설정의 기준이 되는 너비 값은 변하지 않아서 미스테리한 상황... (width = 19.5, height = 36.8)

예상 이유

  1. PlayerLayer 초기화 이후 너비가 달라졌다 -> 너비가 같게 나온다
  2. ....모르겠음 (과부화 돼서 떠오르지 않음)

만약 찾지 못할 경우 위치를 두번 설정해주면 되긴 하지만...
그러나 맑은 정신일 때 다시 보고 찾아보겠습니다!

[iOS] 게임 진행 화면 서버 통신 구현

  • 수비 턴 PITCH 버튼 누를 시 GET 요청 (all 로직 @서버)
  • 공격 턴 PITCH 후 게임 상황 변화 시 GET
  • 각 화면 업데이트
    • 5/4 회의: pitch 후 변경된 정보 일괄 전송
    • 5/7 회의: 변경 단위에 따라 전송
  • 턴 결과 사용자에게 노티
  • inning 정보 변경 시 공격/수비 side 전환

[iOS] pitch로 게임 진행하기

애니메이션 구현과 별개의 이슈로 다뤄야 할 것 같아서 하나 더 팠습니다!
Combine / Notification 등 객체 간 정보 이동 방식이 좀 더 명확해지고 나서,
game 객체의 정보 변화에 따라 특정 애니메이션을 어떻게 호출시킬 지 논의 + 구현하면 좋을 것 같습니다 :)
(대충 애니메이션 모양새 완성 + PR 수정 끝나면 지식을 합쳐서 구현하면 될 것 같다는 얘기)


To-do

  • pitch 버튼 누를 시 GET 보내기
  • 받은 데이터에 따라 모델 값 업데이트
  • 모델 업데이트에 따른 animation 연동

[iOS] PR review 반영

수정 사항

  • 코드형식 (공백)
  • 네이밍
  • cell identifier
  • enum vs boolean
  • ViewController Factory
  • 디미터 법칙
  • NetworkManager 의존성
  • MVVM
    • ViewController binding
    • GameCell binding
    • DiffableDataSource → DataSource

5월 12일 수요일 할 일

  • 롤로: static 질문 정리해서 올려주시기
  • 리아: MVVM 패턴대로 코드 정리해서 내부 PR 올리기
  • 롤로: 내부 PR 리뷰
  • 리아: Jason review 댓글 소통

[iOS] 게임 선택 view 구현

  • diffableDataSource 로 테이블뷰 구현
  • xib로 cell 구현
  • 모든 기기 화면 대응 (autoLayout) → 왜인지 성공..?
  • background 그라데이션

고민거리

  • 단순 cell 선택이라면 didSelect 를 쓰면 되겠지만 cell 안에서도 팀이 두 개로 나뉘어서 사용자 입력을 받는다..
  • responder 에 관해 학습하고 해결해야하는지 고민 중이다

=> 고민 중인 해결 방법

  1. 테이블뷰 안에 버튼을 넣고 버튼 터치 시 액션 진행
  2. diffableDataSource 로 콜렉션 뷰를 복잡하게 만들고 didSelect

선택 방법

👉🏻 테이블뷰 안에 버튼 넣고 버튼 터치 시 액션 진행

  • button을 title 읽는 대신, 내부에 홈팀, 원정팀 데이터를 저장한다
  • POST 는 user 정보와 함께 전달해야하므로..
  1. button touched → noti 주기
  2. cell data fill → user 정보 함께 전달

[iOS] 게임 선택 네트워크 디코딩 에러

Decoding Error

failure(Swift.DecodingError.dataCorrupted(Swift.DecodingError.Context(codingPath: [], 
debugDescription: "The given data was not valid JSON.", 
underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 
"No string key for value in object around character 178." 
UserInfo={NSDebugDescription=No string key for value in object around character 178.}))))
  • dataCorrupted 의 경우, 서버가 주는 JSON 데이터가 잘못된 경우가 많다고 한다
  • 근데 아무리 mock api 의 데이터를 살펴봐도 잘못된 게 안 보인다 => 내 문제인가.. ㅠㅠ

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.