Skip to content
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

[Jee] Step2 - 속성 변경 동작 #99

Open
wants to merge 15 commits into
base: Jee
Choose a base branch
from

Conversation

Jeeehee
Copy link

@Jeeehee Jeeehee commented Mar 17, 2022

✏️ Step 2 작업 목록

  • �Plane 구현
  • �Plane UnitTest 구현
  • Custom View 구현
  • Convert 객체 구현 (Ex. Color to UIColor)

✏️ 학습 키워드

  • MVC
  • 델리게이트
  • 커스텀뷰
  • xib
  • 제스처 인식기

✏️ 고민과 해결

JK 정말 오랜만에 PR을 날립니다..
아직 Step2 진행중이나, 잘 가고 있는지 여쭙고자 1차 PR을 보냅니다..!

Step1과 다르게 Step2는 루카스 글 조차 아예 이해가 안갔습니다.
모르는 단어를 하나씩 찾으면서 학습했습니다.
Plane 객체 구현 후 , 랜덤 사각형 출력까지는 가능했으나 그 코드를 MVC 패턴에 넣는게 정말 너무 어려웠습니다..
MVC 패턴과 델리게이트가 도무지 이해가 가지 않았지만,
계속 학습도 해보고 직접 흐름을 그려도 보고, 동료들께 물어가며 이해했습니다.

또, Xib로 커스텀 뷰를 생성 후 VC에서 어떻게 호출하지? 라는 의문이 있었는데
로사의 도움으로 UIView 생성 -> IBOutlet으로 커스텀 뷰 연결 이라는 방법으로 해결했습니다.
감사합니당..!

Simulator Screen Recording - iPad Air (4th generation) - 2022-03-18 at 11 33 23

@godrm
Copy link
Contributor

godrm commented Mar 18, 2022

이번 단계에서 고생하셨군요. 그만큼 낯선 방식으로 낯선 구조를 구현해야 해서 그런가 봅니다
이 단계에서 입력 흐름부터 출력 흐름까지 구조를 만들어 보는게 매우 중요합니다. 그걸 해내셨으니 다음에 무엇을 해도 비슷한 구조로 만들 수 있을 겁니다.

Copy link
Contributor

@godrm godrm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

걱정하면서 작성한 것과 달리 깔끔하게 잘 구현하셨습니다.
남은 부분을 더 작성해서 push해보세요. 이 단계 마무리할 수 있을 것 같습니다

let b = Float(components[2])

return String(format: "%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255)) //
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UIColor.toHex()처럼 위에 Convert.toUIColor()도 UIColor를 확장해도 됩니다. 결국 UIColor 인스턴스를 만드는 거니까요.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UIColor를 확장 -> convenience init 을 활용해 수정했습니다!
convenience init을 이렇게도 사용할 수 있었다니..! 다양한 방법을 알려주셔서 감사합니다 :D

Comment on lines +38 to +41
if rectangle.point.x == point.x || rectangle.point.y == point.y {
selctRectangle = rectangle
return selctRectangle
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이런 동작도 카드 게임할 때처럼 rectangle.contains(x,y) 처럼 객체의 속성을 가져오지 않고 객체가 처리하도록 해보세요

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rectangle 안에서 처리할 수 있게 수정했습니다! 감사합니다!


func countingRectangle() -> Int {
if rectangles.isEmpty {
print("생성된 사각형이 없습니다.")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

print로 확인하는 것은 지양하세요 :)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 수정했습니다!

Comment on lines +21 to +22
let add = Factory.createRectangle()
rectangles.append(add)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

변수를 사용할 때는 add 처럼 동사가 더 강한 표현보다는 명사 형태를 권장합니다
그래야 오해를 줄 일 수 있습니다

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

변수에 명사를 써야한다는 걸 알면서 저렇게 지었네용.. 더 유의하겠습니당 :D

Comment on lines +34 to +63
func didpressColorChangeButton() {
print("")
}

func didMoveSlider() {
print("")

}

func didpressCreateRectangleButton() {
plane.createRectangle()
}

}

extension ViewController: PlaneDelegate {

func didCreatRectangel(rectangle: Rectangle) {
let view = UIView.init(frame: CGRect(x: rectangle.point.x, y: rectangle.point.y, width: rectangle.size.width, height: rectangle.size.height))

view.backgroundColor = Convert.toUIColor(color: rectangle.color, alpha: rectangle.alpha)

rectengles[rectangle] = view
self.canvas.addSubview(view)

print(rectangle.point)
}

func didSelect() {
print("")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

생성 버튼 -> plane -> 델리게이트로 추가하기까지 end-to-end 거의다 구현했네요.
이런 흐름을 구성해보는 것 자체가 중요하고 잘 구현하셨습니다.

이럴 경우는 이렇게 다 처리해야지가 아니라, 이건 여기에 전달만 해야겠다. 그리고 이럴 때는 여기서 이것만 담당해야겠다. 그 역할을 나누는 경험이 중요합니다. PR 열어놓고 남은 부분도 계속해보세요.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JK 따뜻한 피드백 감사합니다 ㅎㅎ
주신 피드백들 전부 수정했습니다!
남은 단계도 힘내서 진행해보겠습니다! 감사합니다..☺️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants