or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing
xxxxxxxxxx
박스오피스 II
⭐️ 팀원
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →📝 목차
📆 타임라인
🌳 프로젝트 구조
UML
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →File Tree
📱 실행화면
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →🚀 트러블 슈팅
1️⃣ 날짜 변경 후 달력에서 선택된 날짜 변경하기
🔍 문제점
날짜를 변경 한 후 다시 날짜선택을 눌러 modal창을 띄우게 되면 어제의 날짜로 선택이 되는 문제가 있었습니다.
⚒️ 해결방안
이를 해결하기위해
targetDate
라는 프로퍼티를 만들어 CalendarViewController에 전달하여 캘린더 뷰 생성시 init으로targetDate
를 가질 수 있게 만들었습니다.2️⃣ RefreshControl의 indicator
🔍 문제점
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →refreshControl이 나타내는 indicator가 자리를 잡지 못하고 collection view의 셀과 겹쳐지는 현상이 있었습니다.
⚒️ 해결방안
endRefreshing() 메서드를 reloadData()와 동일한 위치로 옮겨주었습니다.
3️⃣ reloadData()의 중복된 호출
🔍 문제점
changeCollectionViewMode()
메서드를 통하여 현재 뷰 모드에 따라 새로운 뷰를 호출해주는setCollectionViewLayout
을 설정해주었습니다.직접 실행해보니, 아이콘모드에서 리스트모드로 넘어갈 때 화면에 보이지 않던 9번 항목의 레이아웃이 의도하지 않은 모양으로 나타났습니다🥲
코드
실행화면 - 리스트모드로 넘어올 때 9번 항목 레이아웃 오류
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →⚒️ 해결방안
1. reloadData()를 두 번 호출해주는 방법
해당 문제를 해결하기위하여
setCollectionViewLayout()
의 completion을 활용하여 후행클로저에서reloadData()
를 다시한번 호출해주는 방법으로 위의 오류를 해결할 수 있었습니다.하지만 이 방법으로 진행할 시,
reloadData()
메서드가 두 번 호출되며 코스트가 비싸질 것 같다고 생각이들었습니다.2. 분기처리를 이용하여 reloadData()를 호출해주는 방법
분기처리를 통하여 listLayout일 경우 animation효과를 지연시키고
reloadData()
를 호출하게하여 위의 오류를 해결하며 적절한 상황에서reloadData()
를 호출할 수 있었습니다.4️⃣ Image Networking
🔍 문제점
MovieDetailsViewController 프로퍼티 posterView의 이미지를 다음 순서의 네트워크 통신을 통해 채워넣고 있습니다.
이번 프로젝트의 네트워크는
URLSession
객체를 통해 이루어집니다. dataTask 메서드는 비동기적으로 동작하므로 아래와 같은 순서로fetchPosterImageURL
,loadPosterImage
메서드를 호출하게 되면 URL fetch가 완료되지 않은 상태로 image load를 시작하게 된다는 문제가 있었습니다.⚒️ 해결방안
URL fetch 작업을 기다렸다가 작업이 완료되었을 때
loadPosterImage
를 호출할 수 있도록 Property Observer를 활용하여 해결하였습니다.✨ 핵심경험
✅ CalendarView 활용
iOS 16+
을 요구하는CalendarView
를 이용하여 날짜 선택, 선택한 날짜 반환 및 다양한 기능을 사용해볼 수 있었습니다.1️⃣ Calendar 만들기
2️⃣ 선택할 수 있는 날짜 범위 지정하기
3️⃣ 날짜 선택하기 및 (날짜변경 후) 선택된 날짜 바꾸기
✅ ModernCollectionView 활용
UICollectionViewDiffableDataSource
NSDiffableDataSourceSnapshot
UICollectionViewCompositionalLayout
✅ 여러 개의 CellRegistraion 활용
사용자가 선택한 모드에 따라 List형태, Icon형태의 Layout을 사용해주어야 했습니다.
Layout에 따라 다른 Cell을 사용하기 위해 CellRegistration을 미리 만들어두고
dataSource
가 collectionViewMode에 따라 다른 Cell을 사용할 수 있도록 정의했습니다.✅ NSCache 활용
NSCache를 활용해 URL에서 받아온 image에 캐싱을 적용했습니다.
🥹팀 회고
우리팀이 잘한 점
배려에 감사드립니다🙇♂️👍우리팀이 노력할 점
📚 참고 링크