소개
iOS개발자 앨런입니다.
https://www.youtube.com/@allen_ios
제가 공부하면서 겪었던 시행착오를 쉽게 풀어내어
지식을 공유할 수있는 개발자가 되고싶습니다.
쉬운 주제로 빠른 시간 안에 겉핥기 식으로 쉽게만 가르치는 강의를 만드는 것에는 관심이 없습니다.
그런 강의는 얼마든지 빠르게 찍어내듯 만들 수 있겠지만, 결국 "좋은 개발자로 성장"하는 것은 그만큼 이론적인 기반의 밑거름이 탄탄해야 한다고 믿고 있기 때문입니다.
쉬운 강의보다는, 좋은 개발자(끝임없이 성장할 수 있는 개발자)가 되기 위해
반드시 알아야 하는 어려운 내용까지를 최대한 쉽게, 그리고 직관적으로 알려드리는 것.
그래서 제가 아닌 여러분 스스로 고민/생각할 수 있는 밑거름을 만들어 드리는 것을 저의 강의 목표로 삼고 있습니다.
저 스스로도 내일은 더 좋은 개발자가 되자는 모토를 가지고 있는 만큼
제가 고민 했던 내용들을 깊이있게 전달 드리고 싶습니다.
👇🏻문의는 아래의 이메일로 주시면 됩니다.
we.love.code.allen@gmail.com
언어: Swift(스위프트), Python, Java, C#
강의
전체5수강평
게시글
질문&답변
2024.05.11
테이블 뷰 관련 질문있습니다!
네 안녕하세요 hoon님. 정답이 없는 문제예요...... 어떻게 구현하셔도 전혀 상관이 없습니다. 똑같이 구현이 되는 방법이 있다면 그걸 선택하시면 됩니다. (정답이 없는 문제를 정답을 알려달라고 하면.. 저도 난처 하겠죠??ㅠㅠ. 특히나 뷰는 동일하게 구현할 수 있냐 없냐의 문제이지.. 이렇게도 구현할 수 있고, 저렇게도 구현할 수 있는건.. 각자 개인의 취향이나, 회사 팀이라면 팀내에서도 그냥 통일된 방향성을 정할 뿐이지.. 또는 유지 보수를 생각한다던가, 확장성을 고려하는 방향으로 가긴 가겠죠.) 그래서 개인적으로는.. 정말 어떤 방법으로 구현해도 전혀 상관없다고 생각해요. 아마 근데, 첫번째 방법으로 "섹션"방식으로 구성한다고 하셨으면... 셀을 하나의 생성자로 만드는 것이 아니라, 셀을 각자 다른 셀을 만드시면 됩니다. 섹션으로 만드신 다고 하셨으니까 각자 서로 다른 셀을 만들어서 셀을 올리면 된다는 뜻이죠. (셀을 하나로 만들어 반드시 재사용의 필요가 없습니다.) (그리고 테이블뷰는 항상 동일한 형태의 셀을 그릴 필요는 없어요. 예를 들어 cellForRowAt 메서드에서 스위치문 쎠서서, 경우에 따라 다른 셀을 그리시면 됩니다.) 서로 다른 셀이니, 데이터도 서로 다른 데이터를 그리면 되니 (서로 다른 변수를 가져도 상관없으니) 편해지겠죠? 그리고 https://jaemuyeo.github.io/ios/tableView/ https://inuplace.tistory.com/1174 https://www.youtube.com/watch?v=2FigkAlz1Bg&ab_channel=iOSAcademy 이런 블로그 글이나 유튜브 보셔도.. (uikit + tableview + settings (또는 설정) + 화면 구현) 이렇게 검색하시면 충분히 원하시는 내용을 찾으실 수도 있으실 것 같아요. 위에서 말씀드렸듯이, 선택의 문제이니.. 두번째 방법으로 구현가능하셔서, 두번째 방법으로 하셨다면.. 전혀 상관이 없을 듯도 합니다..! (다만 뷰로 구성하시면.. 나중에 항목이 추가되었을때, 코드를 확정성있게 사용하기 어렵겠죠.ㅠ. 테이블뷰의 장점은 항목이 늘어났을때 위아래 스크롤이 된다는 것이니까요.) 화이팅하세요 :)
- 0
- 1
- 39
질문&답변
2024.05.10
에뮬레이터에서 키보드가 올라오지 않아요
시뮬레이터의 키보드 기본 설정이 꺼져있어서 그럴 수도 있어요. 시뮬레이터에서, 커맨드 + K 누르시면 바로 올라와요! 아니면, 아래처럼 선택해서 키보드 설정을 키셔도 되고요! (사진) 감사합니다 :)
- 0
- 2
- 46
질문&답변
2024.05.10
스토리보드에 관한 질문입니다.
네 동현 님! 해당 기능은 미니맵 기능입니다. 구글링에서 미니맵으로 검색해보셔도 되고 (사진) 스토리보드에서 제가 위에 표시해드린 부분을 선택하시면, 체크 해제가 되고 그 후로는 해당 미니맵 기능을 끄실 수 있습니다. 감사합니다 :)
- 0
- 1
- 27
질문&답변
2024.05.10
safe area와 view차이 질문입니다.
네네 동현 님. 말씀하신 view의 경우 super view (상위 뷰)가 맞습니다. (즉, 뷰 컨트롤러에 기본적으로 깔려있는... self.view이죠. (뷰컨트롤러에서 접근시에는 self.view이고, 스택뷰 또는 버튼을 그 위에 올리시면, 이제는 self.view에 올라가니, 상위 뷰 (super view)가 됩니다.) 말씀하신 대로 왼쪽 오른쪽은 차이가 없습니다. (정확하게는 leading, trailing) https://wit.nts-corp.com/2019/10/24/5731 요런 링크 들어가셔서, 주황색 그림 살짝 참고하시면서 보시면 되는데.. 물론 정확하게 말씀드리면, 휴대폰이 "세로"인 경우는 차이가 없고, "가로"로 돌렸을때는 약간 차이가 발생할 수도 있지만요. (일반적으로 가로로 돌리지 않는 앱을 만든다 치면.. 별반 차이가 없으니 super view던 safe area던 오른쪽 왼쪽은 차이가 없으니.. 어느걸로 잡으셔도 됩니다.) 그리고 추가로 참고적으로 말씀드리면.. 일반적으로 위아래 ( 뒤에서 배우는 탭바나 네비게이션바) 영역을 차지하는 화면 이 있는 경우는 safe area에 신경쓰시면서 뷰를 배치하시면 되고, (탭바 네비게이션 바가 없는 경우) 크게 차이는 없어서, 크게 고려하지 않으셔도 됩니다. (물론 BMI앱의 경우도.. 탭바 / 네비게이션바가 없는 워낙 간단한 앱이어서 일단은 크게 신경쓰지 않고 하셔되 되기는 합니다.) 뒤쪽에서 탭바랑 네비게이션바 다뤄보시면서, 중요하게 미치는 영향들 조금 보시면 또 바로 감이 오실 것 같아요 :) 감사합니다.
- 0
- 1
- 30
질문&답변
2024.04.30
테이블 뷰 셀에서 라운드를 주는 것을 layoutSubview에 넣으면 안되나요?
네 안녕하세요 듀듀님. 결론부터 말씀드리면.. 앱을 만드실때.. 뷰컨트롤러, 뷰의 사이클 등은.. 1) 정확한 시점 (뷰를 그리는 것 포함) 2) (또한 어떤 메서드에 대한) 재호출 여부 (여러번 호출되는지, 한번만 호출되는지) 이것들을 잘 고려하셔야 합니다. 그리고 앱 만들기 활용 45강 ~ 50강까지, 이미 자세하게 설명드렸으니.. 기억이 안 나시거나 헷갈리시는 내용이 있으시면.. 꼭 다시한번 시청 부탁 드립니다 🙏🏻 그래서, layoutSubviews가 무엇을 하는 곳인지 먼저 명확한 이해가 선행되셔야 합니다. 오토레이아웃이라는 시스템은, 오토레이아웃 설정(제약)에 따라 1) (오토레이아웃 기반) 계산 -> 2) (계산후) 배치 -> 3) (뷰 내용 다시 그리기) 이런 내부적인 일들이 일어납니다. layoutSubviews라는 건 2번에 해당하는 (오토레이아웃 계산 후) 하위뷰들을 레이아웃(배치) 하는 일과 관련된 일들을 하는 "시점" 을 의미합니다. (화면을 돌리거나, 오토레이아웃이 업데이트 되면.. 배치를 다시 해야 되니까, 경우에 따라서 layoutSubviews는 여러번 호출 될 수도 있습니다.) 자, 이제 질문하신 내용에 대해 답변드리면, backview에 라운드 주는 것은... 예를 들어서 아래와 같이, 정확하게 10라고 명확하게 숫자로 입력하는 것은 backgroundView.layer.cornerRadius = 10 init() 메서드에 넣어도 되고, layoutSubviews에 넣어도 됩니다. (이미 정확한 숫자값이 있으니까요.) 숫자 값으로 설정하니, 화면의 크기 등에 따라서 추가적으로 계산할 필요가 없다는 뜻이기도 하고, 정해져 있으니.. 여러번 호출해서는 안되니.. 사실 init() 에 넣는게, 더 논리적으로 맞겠죠. 그런데 투두앱 프로젝트 내의 디테일뷰의 버튼의 경우.. 화면 내에서 계산이 필요합니다. 왜냐하면, 코드를 보시면.. button.layer.cornerRadius = button.bounds.height / 2 button.bounds (버튼 자신의 크기)의 height 높이 를 기반으로 해서, 그것을 정확하게 반으로 나누기 때문에 (디자인 상.. 정확하게 반원으로 둥글게 표현하기 위해) 버튼의 높이를 기준으로 계산하기 때문입니다. 그렇다면 버튼의 크기가 언제 결정되냐? 버튼의 실제 크기는 오토레이아웃을 통한 계산 후.. 배치까지 일어난 후에 알 수 있습니다. (아이폰미니, 아이폰15, 아이폰 15 프로맥스 등 화면 크기가 다 다른데.. 오토레이아웃은 "제약" (10떨어질 것인지 / 20떨어질 것인지 등)을 기반으로 해서 (1)계산이 다시 일어나고, 계산에 따라 (2) "하위뷰들의 배치까지 완료되는 시점"에 버튼의 높이를 정확하게 알 수 있는 것입니다. 그래서 여기에서는 그 명확한 시점 이후에 버튼을 둥글게 깍을 수 있는 것이라고 보시면 됩니다. 만약에 높이를 기준으로 둥글게 깍는게 아니라 button.layer.cornerRadius = 15 이런식으로 코드를 짜신다면, init( )에 넣으시면 됩니다. 그러면 여러번 호출될 필요도 없고, 처음부터 결정이 되어버리는 것이니까.. 이게 편하긴 하겠죠. (다만, 디자인적으로는.. 미니에서는 완전 둥글게 보일 수도 있고, 아이폰 맥스 화면에서는 덜 둥글게 보일 수도 있습니다. 고정 값으로 15를 선택하고 있으니, 화면 크기에 따라 버튼 크기도 달라지고, 버튼 크기는 다른데 깍는 값은 15로 일정하니 다르게 보일 수 있다는 의미라고 보시면 됩니다.) 따라서, 어쨌든 여기서는 버튼 높이를 기준으로 디자인적인 요소를 고려해서 "정확하게 반원으로 둥글게 깍고 싶기 때문에" (귀찮지만..) 뷰들의 시점을 고려한 코드를 짰다고 보시면 될 것 같습니다. 결론적으로 원하는 디자인 구현에 따라서, 시점을 결정한 코드라고 보시면 될 것 같습니다. 감사합니다. :)
- 0
- 2
- 47