컬렉션뷰에서 스크롤을 이용한 페이징(Pagination)하는 방법을 정리해보자!테이블뷰와 컬렉션뷰에는 스크롤이 내장되어 있어 UIScrollDelegate를 사용할 수 있다. 원하는 뷰컨트롤러에 페이지네이션을 구현하기 위해 우선 스크롤 이벤트를 감지하는 메서드를 추가하여 사용자가 컬렉션뷰의 아래쪽에 도달했을 때 다음 페이지를 가져오도록 했다. 1. UICollectionViewDelegate - scrollViewDidScroll// MARK: - UICollectionViewDelegateextension ExerciseAlbumViewController: UICollectionViewDelegate { func scrollViewDidScroll(_ scrollView: UIScrollView)..
Devlog👩🏻💻
뷰에 애니메이션을 주기 위해 원하는 UIView의 너비를 시간이 지남에 따라 줄어들도록 구현하고 있었는데스냅킷의 제약조건에 관한 크래시가 발생했다.Updated constraint could not find existing matching constraint to update 다음과 같은 크래시가 나는 걸 확인했다. 초기 UIView의 제약조건은 다음과 같이 설정했다.progressBar.snp.makeConstraints { $0.top.leading.bottom.equalToSuperview() $0.width.equalToSuperview() }▶ 뷰의 너비를 equalToSuperview()로 설정 private func updateProgressBar() { ..
프로젝트에 새로운 라이브러리를 추가하고 깃허브 작업을 하니 다음과 같은 패키지 변경 이슈가 발생했다. modified: WakeUpClock.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved 수정하지 않은 패키지 파일이 변경됐다는 메시지가 뜨는데 머지할 때마다 수동으로 충돌을 해결해줘야 해서 gitignore에 추가해야하나 고민하며 찾아보던 중 아래 링크들을 발견했다.확인한 결과, 파일을 저장하는 장소인 Package.resolved를 .gitignore에 추가하는 것은 권장되는 방법이 아니라고 한다! 🙅🏻♀️ https://forums.swift.org/t/package-resolved-should-go-in-the-g..
깃허브로 팀프로젝트를 하며 Xcode에서 Swift Package Manager 에러가 뜨며빌드가 안 되고 라이브러리 로드가 안 되는 문제가 발생했다.Missing package product 'package name 1. Package.resolved 삭제WakeUpClock{프로젝트 이름}/WakeUpClock.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved위 경로로 이동해서 패키지 관리 파일을 삭제한다. 2. Xcode > File > Packages > Reset Package Cashes위과정을 거치면 해결된다. 보통 2번 방법만으로도 많이들 해결되는 것 같다!
[UIKeyboardTaskQueue lockWhenReadyForMainThread] timeout waiting for task on queue시뮬레이터에서 서치바나 텍스트필드를 사용할 때 키보드가 안 뜨고 위와 같은 타임아웃 에러가 뜨는 경우가 있습니다. 시뮬레이터가 멈춰서 당황했는데 시뮬레이터에서 종종 이런 버그가 난다고 합니다..!!시간이 지나면 해결될 수도 있고 키보드 설정을 바꿔서 해결할 수도 있습니다. Simulator에서 Connect Hardware Keyboard를 선택하게 되면 내 컴퓨터의 하드웨어 키보드를 사용하게 됩니다.위처럼 I/O의 Keyboard 설정에 Connect Hardware Keyboard이 체크되어 있다면 해제합니다. Connect Hardware Keyboar..
올릴 때마다 헷갈려서 정리하는 ⭐️깃허브에 프로젝트 업로드하는 방법⭐️입니다.Repository에 프로젝트를 업로드 하기 전에 .gitignore 파일을 추가해야 충돌을 미리 예방할 수 있기 때문에 프로젝트를 업로드 하기 전에 꼭 추가해주는 게 좋아요! .gitignore 파일 추가하기 https://www.toptal.com/developers/gitignore gitignore.ioCreate useful .gitignore files for your projectwww.toptal.com위 사이트에서 원하는 키워드를 입력하면 ignore 파일을 생성할 수 있어요.swift, xcode, cocoapods 키워드를 추천합니다! 위 키워드로 생성된 파일에 DS_Store 파일도 추적하지 못하도록 아래..
코드베이스로 작업을 하기 위한 초기세팅을 먼저 정리해 볼게요! Storyboard 삭제 세팅1. Main.storyboard 스토리보드 파일 삭제 - > Move to Trash 메인 스토리보드를 제거해 주세요 2. Project TARGETS > Build Settings > Main Storyboard 삭제프로젝트의 타겟으로 이동해서 메인 스토리보드도 삭제해 줍니다. 3. Info.plist > Storyboard Name > Main위의 경로로 이동해서 스토리보드 키를 - 버튼 눌러서 삭제합니다. 4. SceneDelegate 수정하기⭐️⭐️이제 어떤 뷰컨트롤러로 시작할지 지정해줘야 합니다!씬델리게이트에서 scene() 메서드 안에 아래 코드로 내용을 수정해 줍니다.guard let windowS..
레이아웃을 잡을 때 가끔 헷갈릴 때가 있는데 참고하기 위한 포스팅입니다!💡Content Hugging Prioritycontent Hugging Priority "늘어나는 것에 대한 저항"→ 우선순위 높을 수록 크기 유지, 우선순위 낮으면 크기 늘어남 공간이 남으면 누가 더 늘어나야 하는지에 대한 우선순위!Hugging의 우선순위가 크다 = 내 크기를 유지하는데 더 큰 우선순위가 있다. 즉 더 우선 순위가 낮은 요소는 늘어나게 된다.이 속성은 뷰의 크기를 얼마나 확장할 것인지에 대한 우선순위를 정의하며, 우선순위가 높을수록 뷰는 크기를 늘리지 않으려고 시도한다. Horizontal Content Hugging Priority : 뷰의 가로 방향 크기 확장에 대한 우선순위Vertical Content H..
동기와 비동기에 대해 들었던 세션 내용을 더 딥하게 이해해보려 한다!동기와 비동기 개념에 대해 공부해보자✍🏻 GCD - Grand Central Dispatch 1. 쓰레드 (Thread)우선 쓰레드란..??!컴퓨터 프로그램을 실행하는데 사용되는 가장 작은 실행 단위를 의미한다. 쓰레드는 프로세스 내에서 실행되는 작은 단위의 실행 흐름이다.각각의 쓰레드는 독립적으로 실행될 수 있으며, 여러 쓰레드가 동시에 작업을 수행할 수 있다.이러한 다중 쓰레드 작업은 시스템 자원을 효율적으로 활용하고, 병렬적으로 작업을 처리할 수 있도록 도와준다! 이러한 내용이 무슨 뜻이냐!"쓰레드 👉 동시에 일을 할 수 있는 것의 단위" 정도로만 기억하면 된다. 메인 쓰레드 이외의 쓰레드가 필요한 이유는 뭘까??메인 스레드는 ..
문제 설명수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요..