Danny의 iOS 컨닝페이퍼
반응형
article thumbnail
[Swift/ TIL #33] Git 커밋 메시지 컨벤션(+Gitmoji)
프로젝트 2023. 6. 29. 06:31

[Swift/ TIL #33] 2023 / 06 / 29 흠, 깃 커밋 내용은 최대한 자세히 쓰기만 하면 되는 줄 알았는데, 완전히 잘못하고 있었습니다. 뭐, 혼자 할 때는 크게 문제없겠지만, 나름의 개발자 사이에서 관습적으로 통용되는 규칙이 있더라고요. 나중의 협업을 위해서 간단하게라도 정리를 해보려 합니다. 많은 개발자 분들이 Udacity Git Commit Message Style Guide 를 참고하더라고요. Git Commit Message Convention 깃은 코드 형상 관리 도구로써, 파일의 변경사항을 기록하여 추적이 용이하게 만들어주는 도구죠. 만약, 코드에 문제가 발생 시, 문제 지점(변경 이력)을 추적하여 이전 버전으로 파일을 복구해줘야 합니다. 그런데 커밋 내용이 규칙적(일관적)..

article thumbnail
[Swift/ TIL #32] 탭바 선택 시, 뷰컨이 나타나는 애니메이션 효과를 넣어보자
프로젝트 2023. 6. 27. 00:22

[Swift/ TIL #32] 2023 / 06 / 26 ~ 2023 / 06 / 27 오늘은 탭바 아이템을 클릭할 때, 슬라이드 효과 같은 애니메이션 효과를 만들어 보려고 합니다. (뷰 컨트롤러 전환 애니메이션) 탭바 애니메이션 예전에 만들어 만들어 둔, 탭바에 애니메이션을 적용시켜 보겠습니다. 일단 탭바 애니메이션 적용을 위해, 처음으로 할 작업은 탭바 델리게이트를 채택해 주는 겁니다. class WorldTimeViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.tabBarController?.delegate = self // 커스텀으로 탭바컨트롤러를 만들어줬으면, 이런식으로 하겠죠. // ..

article thumbnail
[Swift/ TIL #31] Dark, Light Mode를 다뤄봅시다 (StatusBar 포함)
프로젝트 2023. 6. 24. 02:02

[TIL #31] 2023 / 06 / 23 iOS13부터 다크모드가 도입되었습니다. 라이트 및 다크모드 적용하는 방법들을 알아봅시다. Info.plist로 적용 방법 기본적인 사용 방법으로는 Info.plist에서 Appearance를 통해 스타일을 정해주는 겁니다. Value값을 통해 원하는 스타일을 선택할 수 있습니다. (Light, Dark) 앱 내에서 Appearance 적용 방법 Info.plist 대신, SceneDelegate 및 UIViewController에서도 코드를 통해 Appearance을 변경해 줄 수 있습니다. 바로, overrideUserInterfaceStyle를 이용하여 다크 및 라이트 모드 변경이 가능합니다. window에서 전역 설정 화면이 생성되는 시점인 SceneD..

article thumbnail
[Swift/ TIL #30] hitTest와 point (중첩 된 뷰의 계층을 확인, 터치 이벤트)
프로젝트 2023. 6. 15. 06:01

[TIL #30] 2023 / 06 / 14 ~ 2023 / 06 / 18 현재 프로젝트에서 하위 뷰와 상위 뷰가 겹쳐지게 만들었습니다. 그런데 상위 뷰(아래에 위치한 뷰)를 배경색만 clear로 해주면 터치가 될 줄 알았는데, 안되더라고요... 해결 방법을 찾아보다가, hitTest와 point란 놈들을 통해 각 하위 뷰의 터치 이벤트를 전달이 되더라고요. 그래서 이렇게, 한번 정리를 해보려고 합니다. 하단의 참고 링크들을 참고하여, 제 생각을 정리해 봤습니다. hitTest 공식문서에서는 hitTest를 이렇게 설명하고 있습니다. "현재 뷰(UIView)의 뷰 계층 구조에서, 자기 자신(self)을 포함하고, 지정된 지점(터치된 Point)을 포함하는 가장 먼 자식 뷰(?)를 반환합니다."라고 되어있..

article thumbnail
[Swift/ TIL #29] AlertController 사용방법, CustomAlertController를 만드는 방법 (PopupView)
프로젝트 2023. 6. 13. 20:07

[TIL #28] 2023 / 06 / 13 간단히 AlertController 사용방법 및 CustomAlertViewController를 만들어 볼 예정입니다. UIAlertController 사용자에게 각각의 상황에 맞게 알림 및 경고로 사용자에게 알려 상호작용을 할 수 있는 컨트롤러입니다. 3개의 파라미터와 UIAlertAction만 만들어 주면, UIAlertController를 바로 사용할 수 있습니다. 먼저 UIAlertController를 생성 시, 필요한 파라미터들은 title, message, preferredStyle이 있습니다. title 알람의 제목 message 알람의 본문 내용 및 추가 설명 preferredStyle 알람창의 스타일을 정합니다. alert, actionShee..

article thumbnail
[Swift/ TIL #28] KeyBoard 내리는 방법들 (터치, 드래그 등)
프로젝트 2023. 6. 10. 01:13

[TIL #28] 2023 / 06 / 10 키보는 내리는 방법들을 소개하겠습니다. touchesBegan 사용 touchesBegan은 새로운 터치가 입력될 때, 호출되는 메서드입니다. View 같은 곳에서 그냥 간편하게 사용할 수 있는 방법입니다. override func touchesBegan(_ touches: Set, with event: UIEvent?) { self.view.endEditing(true) } 아래 메서드로도 키보드를 닫을 수 있습니다. override func touchesBegan(_ touches: Set, with event: UIEvent?) { view.resignFirstResponder() } UITapGestureRecognizer 사용 UITapGestureR..

article thumbnail
[Swift/ TIL #27] Reuse Identifier 간단하게 만드는 방법 (NSStringFromClass)
프로젝트 2023. 6. 9. 18:39

[TIL #27] 2023 / 06 / 09 이번건 글이 짧습니다. 다들 forCellReuseIdentifier를 사용할 때, 어떻게 identifier를 만들어 사용하는지는 모르겠지만, 엄청 간단하게 만드는 방법이 있어서 글을 써보려 합니다. 저는 보통 상수들을 따로 모아두는 곳에다 cell의 identifier를 저장하거나, cell 클래스에서 정적 메서드로 만들어주곤 했습니다. 이런 식으로 말이죠. struct Constants { struct ID { static let headerID = "Header_ID" static let footerID = "Footer_ID" static let categoryHeaderID = "Category_Header_ID" static let category..

article thumbnail
[Swift/ TIL #26] sort에 대해서 알아봅시다
프로젝트 2023. 6. 8. 01:31

[TIL #26] 2023 / 06 / 07 오늘은 정렬하는 방법에 대해서 간단히 알아보겠습니다. sort와 sorted 둘 다 정렬하는 메서드이지만 약간의 차이점이 있습니다. 각각 상황에 맞게 사용하면 됩니다. 바로 간단히 예시를 보면서 알아봅시다. sort 원본 배열을 정렬하여 변경합니다. 원본 배열 자체를 수정하는 것이므로 리턴값이 없습니다. // 1~10까지 랜덤 숫자 배열을 만들었습니다. var randomNum = Array(1...10).shuffled() print(randomNum) // [10, 3, 2, 7, 1, 4, 9, 5, 6, 8] // 원본 배열이 변경되도 상관없을 때 randomNum.sort() print(randomNum) // [1, 2, 3, 4, 5, 6, 7, ..

article thumbnail
[Swift/ TIL #25] DispatchGroup, DispatchSemaphore (추가로 async/await)
프로젝트 2023. 5. 31. 21:50

[TIL #25] 2023 / 05 / 30 오늘은 간단히 DispatchGroup, DispatchSemaphore의 사용법에 대해서 알아보려고 합니다. DispatchGroup 간단히 DispatchGroup에 대해 설명하면, 비동기 작업이 끝날 때까지 기다린 후, 작업 완료된 시점에서 처리를 할 수 있는 기능입니다. 기본 사용법을 간단히 알아봅시다. DispatchGroup은 enter와 leave로 한 쌍으로 구성이 돼있습니다. enter로 그룹의 작업을 추가하고 leave를 통해서 작업을 제거할 수 있습니다. 그러므로 사용할 땐, 항상 두 쌍으로 존재해야 됩니다. 아니면 에러가 발행하게 돼요. 만약, 여기서 더 이상 남아 있는 작업이 없다면, nofity의 completion handler를 ..

article thumbnail
[Swift/ TIL #24] FileManager를 통해 이미지 저장
프로젝트 2023. 5. 17. 23:59

[TIL #24] 2023 / 05 / 17 Data Base로 Realm을 사용하려 하는데, 이미지를 저장하는 과정에서 문제가 있었습니다. 이미지를 데이터 타입으로 변환 후, Realm에서 저장하여 사용해도 되지만 많은 이미지가 추가되면 처리 시간이 오래 걸려서 권장되지 않은 방법이라고 합니다. 또한, 저장할 수 있는 데이터의 크기는 16MB를 초과할 수 없다고 하네요. 그래서 일단 FileManager를 통해 이미지를 저장하고 각 이미지의 저장된 경로와 메타데이터를 통해 불러오는 방식을 구현해보려 합니다. (Realm에서는 이미지를 식별할 수 있는 이름만 저장하면 될 것 같습니다.) FileManager로 이미지 저장 공식문서와 다른 블로그에 설명이 잘 돼있기 때문에 FileManager에 대한 설명..

article thumbnail
[Swift/ TIL #23] Realm Cheat Sheet
프로젝트 2023. 5. 16. 22:50

[TIL #23] 2023 / 05 / 16 Realm 사용 시, 유용한 코드들을 정리하려고 합니다. Realm 모델 만드는 방법 기존에는 @objc Dynamic를 사용했는데, 이제는 @Persisted를 사용한다고 하네요. @Persisted은 Realm에서 만든 일종의 프로퍼티 래퍼(미리 어떤 행동을 할지 선언과 동시에 정하는 기능)입니다. // Object은 hashable로 동작합니다. class RealmModel: Object { // primaryKey 일종의 UUID라고 생각하면 됩니다. (ObjectId 대신 UUID를 사용해도 됩니다) // 중복 방지하고 CRUD에서 원하는 데이터에 접근하기 위해 사용합니다. @Persisted(primaryKey: true) var id: Objec..

article thumbnail
[Swift/ TIL #22] LocationManager 사용
프로젝트 2023. 5. 11. 18:45

[TIL #22] 2023 / 05 / 11 LocationManager에 대한 사용법을 간단히 정리하려고 합니다. info.plist 기본적으로 사용자 위치 정보를 받기 위해서는 먼저 plist를 설정해줘야 합니다. 간단히 어떤 것이 있나 알아봅시다. 아래 설정들은 모두 기본적으로 "앱이 사용자의 위치 정보에 대한 액세스를 요청하는 이유를 사용자에게 알리는 메시지입니다." [Privacy - Location Always and When In Use Usage Description] Background에서 실행되는 동안에만 적용 공식문서 [Privacy - Location Always Usage Description] Background 실행되는 동안에만 적용 iOS 11+ 이상부터는 대신, Locati..

article thumbnail
[Swift/TIL #21] 키보드가 화면을 가릴 때, Y축으로 뷰 이동 방법
프로젝트 2023. 5. 9. 15:39

[TIL #21] 2023 / 05 / 08 TextField 나 TextView 등 터치 이벤트로 키보드가 올라올 때, 키보드가 텍스트 필드를 가리는 현상이 발생할 때가 있습니다. 이런 이슈를 방지하는 방법을 간단히 알아봅시다. 방법 - 노티피케이션을 이용 NotificationCenter으로 키보드가 보이거나 가려질 때, 이벤트를 받아서 사용하는 방법입니다. (참고, 아래 메서드는 targets iOS 9.0 이상에서는 굳이 removeObserver를 해줄 필요가 없다고 하네요.) func setupKeyboardEvent() { NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIRes..

article thumbnail
[Swift/TIL #20] 이미지 메모리 최적화 방법들 (WWDC 18)
프로젝트 2023. 5. 2. 03:54

[TIL #20] 2023 / 05 / 01 앨범에서 이미지를 불러오는 작업을 하는데, 사진을 추가할 때마다 메모리 사용량이 기하급수적으로 증가하더라고요. 그래서 오늘은 간단히 이미지 관련, 메모리 최적화 방법에 대해서 알아보려고 합니다. WWDC 18(iOS Memory Deep Dive) 와 WWDC18(Image and Graphics Best Practices) 를 참고해 정리하였습니다. 메모리 사용량은 이미지의 파일의 크기로 계산되는 게 아닙니다. 메모리 사용량 ≠ 파일의 크기 바로 이미지의 크기(해상도)로 메모리가 계산이 됩니다. 계산 공식은 이와 같습니다. (Assets @1x 크기 기준) 메모리 사용량 ≈ 해상도(가로 pixels * 세로 pixels) * 4byte per pixel 대..

article thumbnail
[Swift/TIL #19] 현재 입력된 텍스트의 줄 수 구하기
프로젝트 2023. 4. 30. 18:24

[Swift/TIL #19] 2023 / 04 / 30 저번에는 글자 수에 따라, 동적으로 작용하는 셀을 만들어봤습니다. [Swift/TIL #18] UICollectionViewCompositionalLayout으로 Cell의 크기를 동적으로 만들어 보자 (더보기 버튼) 여기서 조금 더 조건을 추가하면, 텍스트가 3줄 이상일 때, 더 보기 버튼이 생성되도록 만들 수 있을 것 같습니다. 그러려면 먼저, 현재 텍스트의 줄 수를 알아야겠죠? 텍스트의 줄 수를 구하는 코드를 알아봅시다. 코드를 보면 (전체 텍스트 높이)와 (글자 폰트의 높이)로 글의 줄 수를 유추하는 것 같네요. extension UILabel { // https://stackoverflow.com/questions/28108745/how-t..

반응형