3 분 소요

🫵🏻 [1주차] 회의

첫번째 OT를 진행했다.

2월달까지의 일정과 서로 간단한 자기소개를 끝으로 간략하게 진행했다.

첫번째 주는 UI 준비와 디자이너 이오의 GUI 완료 작업

두번째 주는 나머지 UI 설계와 이오는 각종 로고와 이미지 나머지 GUI 제작, 서버팀은 API와 DB 설계 시작

세번째 주는 서버팀 API 제작완료 그리고 API 연결

네번째 주에 데모데이 준비와 출시 준비

조금 조급하게 플랜을 짜면 이렇게 나오지만, 실상 2월 첫번째 주가 데모데이 신청일이고 2월 중순에 데모데이를 진행하기 때문에 이 플랜이 조금씩 뒤로 밀려도 괜찮을 것 같다. 일단은 조급하게 잡아놓고 시작하면 안정적으로 끝낼 수 있지 않을까 생각한다…

[1주차 작업] 기본 UI 만들기

PM 말고도 iOS 리드도 맡고 있어서 화면 제작을 해야 했다.

iOS 팀은 피치, 도비(나), 잭잭 이렇게 구성되어있는데

각각 로그인과 회원가입 / 설정 / 세부 목표 리스트 화면을 담당하기로 했다.

1

2

최대한 GUI 대로 만들어보려고 노력했다!

문제는 이오가 제작한 첫번째 설정화면에서 하나의 뷰컨트롤러에 여러 셀을 넣으려는 부분이었다.

각각을 스토리보드 상에서 서로 다른 테이블 뷰로 구성해보았지만 역시나 예상했던대로 실제 시뮬레이터 구동시 제대로 나타나지 않았다.

두 번째 방법은 전부 코드로 구성하는 것이었다.

각 테이블 뷰를 변수로 구성하고

제약을 거는 함수를 작성한 다음

제일 어려웠던 테이블 뷰가 속한 뷰 컨트롤러의 delegate 와 dataSource에 테이블 뷰에 따라 셀을 리턴해줬다.

화면이 정상적으로 구동되었는데, 문제는 그 다음 발생했다.

화면 전환이 정상적으로 작동하지 않았다.

게다가 다음 화면으로 이동했을 때 뭐가 문제인지 마찬가지로 셀로 구현한 다음 화면이 제대로 나타나지 않았다.

한참을 고민하다 이걸 굳이 셀로 만들어야하나 라는 생각이 들었다.

어차피 셀을 재사용 할 필요도 없는 화면이고

그냥 뷰로 구현해도 되지 않을까…

라는 생각이 들어 간단하게 해결할 수 있었다.

여기서 발견한 간단한 해결방안 [뷰를 클릭했을 때 화면전환 시키기]

해결책은 뷰를 눌렀을 때 뷰에 gestureRecognizer를 등록해서 이벤트를 알아챌 수 있도록 하는 것!

class WholeSettingViewController: UIViewController {

    @IBOutlet weak var ProfileView: UIView!
    
    @IBOutlet weak var AlertSwitch: UISwitch!
    
    @IBOutlet weak var QuestionView: UIView!
    
    @IBOutlet weak var PrivateInfView: UIView!
    
    @IBOutlet weak var LogoutView: UIView!
    
    @IBOutlet weak var WithDrawalView: UIView!
    
    override func viewDidLoad() {
    super.viewDidLoad()
        let gesture1 = UITapGestureRecognizer(target: self, action: #selector(WholeSettingViewController.goProfileEdit(sender:)))
    self.ProfileView.addGestureRecognizer(gesture1)
        let gesture4 = UITapGestureRecognizer(target: self, action: #selector(WholeSettingViewController.goQuestion(sender:)))
        self.QuestionView.addGestureRecognizer(gesture4)
        let gesturealert1 = UITapGestureRecognizer(target: self, action: #selector(WholeSettingViewController.showSIAlert(sender:)))
        self.PrivateInfView.addGestureRecognizer(gesturealert1)
        let gesturealert2 = UITapGestureRecognizer(target: self, action: #selector(WholeSettingViewController.showLogoutAlert(sender:)))
        self.LogoutView.addGestureRecognizer(gesturealert2)
        let gesturealert3 = UITapGestureRecognizer(target: self, action: #selector(WholeSettingViewController.showWDAlert(sender:)))
        self.WithDrawalView.addGestureRecognizer(gesturealert3)
    }
    
    
    @objc func goProfileEdit(sender:UIGestureRecognizer){
           let storyboard  = UIStoryboard(name: "Main", bundle: nil)
           let profileEditViewController = storyboard.instantiateViewController(withIdentifier:"ProfileEditViewController")
           self.navigationController!.pushViewController(profileEditViewController, animated: true)
       }
 
    @objc func goQuestion(sender:UIGestureRecognizer){
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let QuestionViewController = storyboard.instantiateViewController(withIdentifier: "QuestionViewController")
        self.navigationController!.pushViewController(QuestionViewController, animated: true)
        
    }
    
    @objc func showSIAlert(sender:UIGestureRecognizer){
        let alert = UIAlertController(title: "개인정보 처리방침", message: "동의서 열람", preferredStyle: .alert)
        alert.addTextField { textField in
            let heightConstraint = NSLayoutConstraint(item: textField, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 500)
            textField.addConstraint(heightConstraint)
            textField.text = "여기에 개인정보 동의서 열람과 내용이 표시됩니다.\n 상당히 길 것으로 예측되는데 스크롤도 넣어야 할까요 아니면 그정도면 괜찮을까요"
            textField.isUserInteractionEnabled = false
        }
        
        let confirm = UIAlertAction(title: "확인", style: .default, handler: nil)
        let close = UIAlertAction(title: "닫기", style: .destructive, handler: nil)
        alert.addAction(confirm)
        alert.addAction(close)
        present(alert, animated: true, completion: nil)
    }
    
    @objc func showLogoutAlert(sender:UIGestureRecognizer){
        let alert = UIAlertController(title: "로그아웃", message: "로그아웃 하시겠습니까?", preferredStyle: .alert)
        let confirm = UIAlertAction(title: "로그아웃", style: .default, handler: nil)
        let close = UIAlertAction(title: "안나갈래요", style: .destructive, handler: nil)
        alert.addAction(confirm)
        alert.addAction(close)
        present(alert, animated: true, completion: nil)
    }
    
    @objc func showWDAlert(sender:UIGestureRecognizer){
        let alert = UIAlertController(title: "회원탈퇴", message: "탈퇴하시는 이유가 무엇인가요?", preferredStyle: .alert)
        alert.addTextField { textField in
            let heightConstraint = NSLayoutConstraint(item: textField, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 200)
            textField.addConstraint(heightConstraint)
        }
        
        let confirm = UIAlertAction(title: "탈퇴", style: .default, handler: nil)
        let close = UIAlertAction(title: "안할래요", style: .destructive, handler: nil)
        alert.addAction(confirm)
        alert.addAction(close)
        present(alert, animated: true, completion: nil)
    }
  }

위에 코드에서 보면 각각 전환이 필요한 뷰에 제스쳐 인식자를 등록해주고 그에 필요한 selector 메소드를 정의해준 것을 볼 수 있다!!

나머지 화면 들은 그리 어려운 것이 없어서 쉽게 구현할 수 있었다.

그렇게 구현한 첫 주차의 화면들 3 내 자식이지만 자랑스럽다.

🦾 1주차에서 배운 점

프로젝트를 가동하는 첫 번째 주차라 이것 저것 많이 헷갈리고 혼란스러웠다.

팀원들을 모으기 위해 디스코드 서버를 파는 것 부터 4 협업용 깃허브 organization을 파고

이걸 clone해서 내 로컬 저장소를 만들고

이 로컬 저장소를 이용해 pull과 push 하여 내 작업물을 통합시키는 방법까지

# 변경 사항 확인
git status

# 변경 내용 스테이징
git add .

# 커밋 메시지 작성
git commit -m "~~~"

# 원격 저장소(Github)에 변경사항 업로드
git push origin main // 여기서 자주 Readme. 때문에 문제가 발생했다!!
// ! [rejected]    main -> main (fetch first)
// 이 문제가 발생하면 git push origin +main 하여 강제로 push해주기!! (이걸 배웠다)

프로젝트의 기반을 만드는 주라 당연히 힘들 건 예상했던 바였다.

첫주차에 이렇게 고생한 만큼 앞으로 우리 프로젝트가 꼭 순항하고 바라는 목적지에 도달하길 바란다!!

댓글남기기