본문 바로가기

전체 글

(391)
minimumInteritemSpacing과 minimumLineSpacing 설정 및 위치 1. minimumInteritemSpacing역할: 동일한 행(row)에서 열(column) 사이의 간격을 설정합니다.적용: 여러 열이 있는 경우, 각 열 사이의 간격을 설정합니다.컨텍스트:UICollectionView가 수평 스크롤(horizontal scroll)일 때, 같은 행에 있는 항목들 간의 간격입니다.UICollectionView가 수직 스크롤(vertical scroll)일 때, 같은 열에 있는 항목들 간의 간격입니다.2. minimumLineSpacing역할: 행(row) 간의 간격을 설정합니다.적용: 여러 행이 있는 경우, 각 행 사이의 간격을 설정합니다.컨텍스트:UICollectionView가 수평 스크롤(horizontal scroll)일 때, 각 열 간의 간격입니다.UIColle..
커스텀 탭바 내에 있는 아이콘 위치 조절하는 방법 private func createButton(imageName: String, tag: Int) -> UIButton { let button = UIButton(type: .system) // 버튼 구성 설정 var config = UIButton.Configuration.plain() let largeConfig = UIImage.SymbolConfiguration(pointSize: 24, weight: .bold, scale: .medium) config.imagePadding = 0 // 이미지와 텍스트 사이의 간격 config.imagePlacement = .top // 이미지를 텍스트 위에 배치 config.contentInsets = NSDirectio..
DispatchQueue.main.async의 사용 위치와 방식에 따른 차이 DispatchQueue.main.async의 사용 위치와 방식이 다르며, 효율성 및 관리 측면에서의 차이점도 발생합니다. 첫 번째 함수에서는  DispathQueue.main.async 내에 UIView 변경을 담당하는 함수 configureData를 불러오고두 번째 함수는 configureData 메서드에서 DispatchQueue.main.async 내에 UIImage 변경하는 요소를 넣었습니다.  1. 첫 번째 함수에서의 DispatchQueue.main.asyncprivate func getCommonData(contentId: String) { NetworkManager.shared.getCommonData(contentId: contentId) { [weak self] results i..
enum을 통해 api 함수 관리해보기 각 카테고리에 대한 contentId를 효율적으로 관리하기 위해서 enum을 사용하면 좋습니다. enum을 사용하면 각 카테고리에 해당하는 contentId를 쉽게 정의하고 관리할 수 있습니다.  여기서 enum을 정의하고, switch문을 활용하여 contentId를 매핑한 후 NetworkManager의 메서드에서 해당 contentId를 사용하여 데이터를 요청할 수 있습니다. 1. ContentCategory Enum 정의먼저, 각 카테고리에 대응하는 contentId를 enum으로 정의합니다.enum ContentCategory: String { case attractions = "12" case facilities = "14" case events = "15" case co..
UIButton.Configuration을 사용하여 버튼 만들기 기존 버튼 생성 방식 func createCustomButton(withTitle title: String) -> UIButton { let button = UIButton(type: .system) button.translatesAutoresizingMaskIntoConstraints = false button.setTitle(title, for: .normal) button.backgroundColor = .darkOrange button.setTitleColor(.white, for: .normal) button.layer.cornerRadius = 4 button.titleLabel?.font = UIFont.systemFont(ofSize: 14, weigh..
view.layer.masksToBounds = true와 view.clipsToBounds = true 차이 1. clipsToBounds = true적용 대상: UIView 자체view.clipsToBounds = true는 해당 UIView의 경계를 넘어서는 모든 하위 뷰나 콘텐츠가 잘리도록 설정합니다.이 속성을 true로 설정하면 뷰의 경계를 벗어나는 하위 뷰들이 화면에 보이지 않게 됩니다.이는 주로 하위 뷰들을 컨트롤하기 위한 목적으로 사용됩니다. 쉽게 말로 하면 superView가 있고, 그 안에 subView가 있다고 가정해보자superView에 clipsToBounds = true 설정하고, suvView가 superView 근처에 걸쳐 있다면? 그러면 걸쳐져 있는 부분만 보이고 그 외 부분은 보이지 않는다.  정리하면 clipToBounds의 true / false 차이는 superView 경계 ..
헷갈리기 쉬운 델리게이트 패턴으로 컬렉션 셀의 데이터 전달하기 언제 델리게이트 패턴을 고려해야 하는지:델리게이트 패턴이 필요한 경우는 아래와 같습니다:셀 내부의 특정 UI 요소와 상호작용할 때:예를 들어, 셀 안에 버튼이 있어서 사용자가 버튼을 눌렀을 때 특정 작업을 해야 하는 경우에는 델리게이트 패턴이 유용합니다. didSelectItemAt은 셀 전체의 선택을 처리하지만, 버튼과 같은 특정 UI 요소와의 상호작용은 다루지 않습니다.⭐️ 셀 자체를 눌렀을 때 반응한다면 => didSelectItemAt 이걸 사용하지만, ⭐️ 셀 안에 있는 버튼을 눌렀을 때 반응한다면 => 델리게이트 패턴을 사용해야 한다.   컬렉션 셀 안에 텍스트로 가득 채운 상태에서 해당 셀을 눌렀을 경우, 텍스트의 색상 변경 및 외부 API를 통한 데이터를 받는다? => 이거라면 didSel..
콜백 함수는 언제 쓰이나요? 콜백 함수는 주로 비동기 작업을 처리할 때 사용됩니다. 비동기 작업은 실행되는데 시간이 걸리거나, 언제 완료될지 알 수 없는 작업들을 의미해요. 예를 들어, 네트워크 요청, 파일 읽기/쓰기, 타이머, 애니메이션 등이 이에 해당합니다. 이러한 작업들이 완료된 후 특정 작업을 수행해야 할 때, 콜백 함수를 사용해 그 작업이 완료된 후의 행동을 정의할 수 있어요.  콜백 함수가 주로 쓰이는 상황 네트워크 요청서버에서 데이터를 가져오거나, 데이터를 서버에 보낼 때, 네트워크 요청은 시간이 걸리기 때문에 요청이 완료된 후에 데이터를 처리하는 콜백 함수를 사용합니다.func fetchDataFromServer(completion: @escaping (Data?) -> Void) { // 비동기 네트워크 요청 ..