[TIL #17] 2023 / 04 / 19 오토 레이아웃을 잡고 객체의 frame을 사용하려 하는데, 한번 애를 먹었던 기억이 있어, 오늘은 이렇게 Update Clycle의 viewDidLayoutSubviews를 한번 간단히 정리하고 넘어가려고 합니다. 일단 Life Cycle + Update Cycle를 그림으로 한번 보고 가시죠. 각 Cycle 마다, 역할이 조금씩 다릅니다. 각 시점마다 무슨일이 일어나는지 알고나면 프로젝트를 만들 때, 도움이 많이 되더라고요. viewDidLayoutSubviews 말 그대로 "UIVIew" 객체가 모든 서브뷰들의 레이아웃을 변경한 후에 호출되는 메서드입니다. 다른 메서드와 달리, 뷰와 서브뷰들의 레이아웃이 모두 정해진 후 호출되는 메서드입니다. 다른식으로 말..
[TIL #16] 2023 / 04 / 18 버튼에 그림자 효과를 주고 싶어 Layer의 그림자 설정을 사용하고 있는데, 보라색 경고를 마주쳤습니다. 일단 코드부터 보시죠. func configButton() { button.layer.cornerRadius = button.bounds.width / 2 button.layer.shadowColor = UIColor.red.cgColor button.layer.shadowOffset = CGSize(width: 0, height: 1) button.layer.shadowOpacity = 0.9 button.layer.shadowRadius = 10 } 이와 같이 사용하니, 아래와 보라색 경고가 발생했습니다. The layer is using dynamic..
[TIL #15] 2023 / 04 / 17 UIMunu는 iOS 13부터 추가된 기능입니다. 특정 오브젝트를 길게 누르거나, 특정 제스처에 나타나는 메뉴 커스터마이징 할 수 있습니다. 한번 UIMenu에 대해 간단히 알아봅시다. UIMenu 일단 UIMenu 생성자를 확인하고 들어가겠습니다. 이미 Zedd님 이 설명을 잘해두셨네요. 이렇게 UIMenu의 생성자가 있고, 안쪽 파라미터에서 children 제외한 나머진 생략이 가능합니다. 여기서 children은 UIMenuElement로 돼있습니다. children을 만들 때, 주의점으로는 UIMenuElement로 직접 객체를 만들어 사용하면 안 되고, 클래스 UIMenu, UIAction, UICommand로 객체 만들어 사용해줘야 합니다. 나머지..
[TIL #14] 2023 / 04 / 14 이전에 커스텀 탭바 를 구현했었습니다. 그때는 몰랐지만 컬렉션뷰와 같은 스크롤 기능이 추가된다면, 기존의 TabBar의 영역이 그림자로 반투명하게 나타는 문제가 발생했습니다. 이유를 찾아보니 iOS 13부터는 Bar 설정할 땐, UITabBarAppearance를 통해 변경해줘야 하더라고요. 당연히 예전 API들도 같이 사용 가능하지만, 아쉽게도 여기엔 Bar의 반투명 영역에 대한 설정이 없습니다. 굳이, 사용하려면 TabBar의 Background 이지미를 설정한 뒤 Alpha를 0으로 바꾸면 될까요? 그런데 이런 비슷한 문제를 이전 UINavigationBar에서도 겪었는데요. UINavigationBarAppearance의 적용법과 UITabBarAppe..
[TIL #13] 2023 / 04 / 12 ~ 2023 / 04 / 13 저번에 공부한 FlowLayout 에 이어서, 오늘은 복잡한 레이아웃도 쉽게 구현할 수 있도록 도와주는 CompositionalLayout에 대해서 알아봅시다. 공식문서 예제 를 참고해서 만들었습니다. CompositionalLayout 기본 CompositionalLayout은 으로 구성돼 있습니다. 이 각각의 요소들로 조합하여, 원하는 레이아웃으로 구성할 수 있죠. 일단 CompositionalLayout의 레이아웃 생성 메서드들을 먼저 살펴봅시다. UICollectionViewCompositionalLayout(section:) UICollectionViewCompositionalLayout(section:, configur..
[TIL #12] 2023 / 04 / 11 분명히 이전에 CollectionView를 사용해 봤는데, 오랜만에 다시 만드려니까 헷갈리더라고요. 이번 기회에 다시 간단히 정리를 하려고 합니다. FlowLayout 흐름 있는 레이아웃? 간단하게 Grid형태의 레이아웃을 쉽게 구성할 수 있도록 도와는 클래스입니다. 일단 공식문서는 여기 있습니다 https://developer.apple.com/FlowLayout https://developer.apple.com/UICollectionviewFlowlayout FlowLayout의 Cell은 이런 순으로 배치됩니다. FlowLayout의 속성들을 알아봅시다. func createFlowLayout() -> UICollectionViewFlowLayout { ..
[TIL #11] 2023 / 04 / 10 오늘은 TextField를 클릭하면 DatePicker가 나오게 만들어 볼 예정입니다. 버튼 동작을 위해 UIToolBar까지 추가해서 만들어 봅시다. 이전에 NavigationController 계층에 있는 ToolBar도 만들어봤습니다. [iOS/Swift] NavigationController의 ToolBar를 코드로 만들어 봅시다 이번엔 NavigationController 계층에 속해있는 ToolBar가 아닌 직접 객체를 만들어 사용해 보겠습니다. 설명은 주석이랑 사진으로 때우겠습니다. 시작 먼저 텍스트 필드를 생성해 줍시다. let textField: UITextField = { let field = UITextField() field.backgro..
[TIL #10] 2023 / 04 / 09 프로젝트에서 스크롤뷰를 사용 중인데, 문제가 발생했습니다. 현재 상황은 스크롤 뷰 안쪽에 스택뷰를 배치하고, 스택뷰의 레이아웃을 스크롤 뷰의 중심으로 맞춰서 모양을 만들어 줬습니다. self.addSubview(photoScrollView) photoScrollView.snp.makeConstraints { $0.top.equalTo(photoLabel.snp.bottom).offset(titleGap-space) $0.trailing.leading.equalToSuperview().inset(sideInset) $0.height.equalTo(imageSize+space) } photoScrollView.addSubview(photoStackView) pho..
[TIL #9] 2023 / 04 / 03 ~ 2023 / 04 / 06 사진을 가져오려 하는데 iOS 14 이상부터는 UIImagePickerController 대신 PHPickerViewController를 사용하라고 하더라고요. 그래서 오늘은 PHPickerViewController에 대해서 알아보겠습니다. PHPickerViewController 공식 문서 링크 PhotoKit WWDC2021 정보가 많이 없어 공식문서와 WWDC를 참고해서 만들어 봤습니다. 틀린 내용 있으면 댓글 부탁드려요! 한번 간략하게 설명해 보겠습니다. PHPickerViewController는 iOS 14에서 새로 추가됐고 기존에 사용하던 UIImagePickerController와 같이 이미지나 비디오 같은 미디어들을 ..
[TIL #8] 23 / 03 / 30 오늘은 iOS 15에서 새로 도입된, UISheetPresentationController에 대해 간단히 알아보겠습니다. 참고 자료 UISheetpresentationcontroller WWDC2021 WWDC는 꼭 한번 시청해 보세요. UISheetPresentationController UISheetPresentationController를 사용하기 위해서는 modalPresentationStyle의 설정 중, 오직 pageSheet, formSheet를 사용할 때, 구현이 가능합니다. fullScreen과 같은 다른 이외의 값들은 nil 값을 갖게 돼서, 사용이 불가능합니다. UISheetPresentationController의 기능을 간단히 설명하면, Sh..