-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feat/#70] 목표설정시간 알림창 구현 #73
base: develop
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생많으셨습니다.. 저도 정신차리고 제 할일을 하겠습니다 .. ! 이래저래 죄송한 마음이 너무 많네요 . .
@@ -9,6 +9,7 @@ | |||
import UIKit | |||
|
|||
import ReactorKit | |||
import RxSwift |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p4; 음 .. AlertViewController에 로직이 추가되다보니 복잡해지네요, BottomSheet 구현한 것 처럼 Alert도 부모를 상속받아서 구현하는 구조로 작성하는 건 어떨까요 .. ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게 되면 고칠거는 조금 많아져보이네요.. 애초에 Alert 뷰컨 코드 고민할때 타입이 몇개 인지 정해놓고 작성을 시작했었네여, 아무튼 리펙토링을 한다면, 상속으로 작성하면 좋아보여요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
알림창 내에 로직이 필요한 경우만 따로 빼도 좋을 것 같아 보입니다.
이건 추후에 다시 고민해보겠습니다 ~!
var selectedHour = BehaviorRelay<String>(value: "0시간") | ||
var selectedMinute = BehaviorRelay<String>(value: "10분") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p4; 이부분에서 저는 의존성이 생겼다고 생각해요, 이렇게 하면 기존에 reactor로 부모 자식간 단방향으로 통신하는 구조가 아니라고 생각합니다.
사실 이 두개 변수 정도가 끝이긴 하겠지만,, 밑에서 말한것처럼 alertviewcontroller를 컨테이너 삼고, 자식에서 reactor를 주입시키고, 해당 reactor에 infoService를 주입시켜서 infoService로 통신하는 방법은 어떨까요 .. ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 View에 Reactor를 생성해 구현하라는 뜻일까요 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네 맞습니다 !
.bind { owner, _ in | ||
owner.dismiss(animated: true) { | ||
reactor.service.showGoalWalkAlertView() | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p4; 저의 개인적인 생각으로는 화면을 dismiss 하는 것을 바텀시트에서 할수는 있다고 생각합니다. 왜냐면 dismiss를 하고 해당 바텀시트를 없애고 더이상 할일이 없기 때문에 신경쓸 필요가 없다고 생각해요.
그런데 dismiss를 하고 부모 뷰컨에서 새로운 뷰컨을 생성시켜야 하는 상황이라면, dismiss를 부모(GoalViewController)에서 자식(BottomSheetView)을 dismiss 시키고 completion으로 새로운 자식(Alert)을 present 하는 코드가 좋다고 생각해요.
왜냐하면, 부모가 자식이 언제 사라지는지 알 필요가 없는 구조라면, 처음말한 것처럼 dismiss를 자식이 해도 되지만, 부모가 자식이 언제 사라지는지 알아야 하는 구조라면, dismiss를 하는 주체는 부모여야 한다고 생각해요. 이것도 어떻게 생각하시는지 궁금합니다 !
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
며칠전에 제가 작성한 코드입니다. 저도 사실 리뷰를 못받긴 했는데, 같은 상황이라고 생각해요 . . 저도 처음에 영인님 처럼 dimiss를 자식이 하고, service 레이어로 전달하는 방식으로 짰었는데, 고민의 고민끝에 이렇게 작성했습니다.
상황을 요약하면 이렇습니다.
- 마이 페이지의 로그아웃 버튼, 회원 탈퇴 버튼이 있다.
- 로그아웃 버튼을 누르면 로그아웃 바텀시트가 올라온다.
- 로그아웃 바텀시트에서 '예' 버튼을 누르면 로그아웃 바텀시트가 내려가고, 온보딩 뷰컨이 보여진다.
- 회원탈퇴도 마찬가지.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 부모한테 주입받아서 바텀시트를 생성했는데, lazy var로 변수로 저장하고 있는 이유는 dismiss를 하기 위해서입니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
부모가 자식을 dismiss하는 방식이 확실히 맞는 로직인 것 같아요.
lazy var로 뷰컨 선언한 방식도 좋은 것 같습니다 . . !
📍 Pull requests
⛳️ 작업한 브랜치
📁 작업한 내용
목표설정시간 알림창 구현했습니다.
굉장히 끔찍한 로직인데 .. 참을인 열번만 부탁드립니다 ..
📢 참고 사항
알림창 구현 방식
선택된 시간과 분을 BehaviorRelay로 선언하였고,
alertVC에서 selectedHour와 selectedMinute을 combineLatest을 통해 방출하여 "00시간 00분" 형태의 selectedTime 프로퍼티에 저장합니다.
그리고 alertView의 확인버튼이 눌릴 시, 해당 "00시간 00분"을 목표시간설정의 뷰에 보이도록 구현했습니다.
고민사항 . .
rxitems를 쓰는 방식으로 구현하려 했으나 결국 실패했습니다 . .
지금 방식 말고 더 나은 방식이 생각나신다면 조언 부탁드려요 . . ^!^
바텀시트 -> 알림창 뜨게하는 구현방식
infoService에 showAlertView를 추가했습니다.
바텀시트에서 직접설정을 누를 시 해당 바텀시트가 dismiss되면서 completion으로 이 infoService의 showAlertView를 호출합니다.
그럼 goalVC에서 transform으로 showAlertView를 받게 되고, makeAlert()함수를 통해 해당 알림창을 노출합니다 . .
바텀시트의 dismiss 부분 코드
시간 범위
최소 10분 ~ 최대 4시간이기 때문에
0시간 선택시 10분으로 자동 스크롤 / 4시간 선택시 0분으로 자동스크롤로 구현해두었습니다.
0시간 선택시 무조건 10분 / 4시간 선택시 무조건 4시간 노출되도록 했습니다.
📸 스크린샷
👣 관련 이슈