[UIKit] UILabel에 skeletonView 적용하기
Sep 01, 2024
![[UIKit] UILabel에 skeletonView 적용하기](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog%3Ftitle%3D%255BUIKit%255D%2520UILabel%25EC%2597%2590%2520skeletonView%2520%25EC%25A0%2581%25EC%259A%25A9%25ED%2595%2598%25EA%25B8%25B0%26logoUrl%3Dhttps%253A%252F%252Finblog.ai%252Finblog_logo.png%26blogTitle%3D%25F0%259F%258D%258E&w=2048&q=75)
skeletonView
UI는 데이터에 의존적입니다. 쉽게 말해, 우리가 간단한 텍스트를 표시하는 뷰를 하나 만든다고 가정하겠습니다. 이 뷰는 특정 버튼의 클릭에 의해 로딩되며, 이때 텍스트는 API 호출의 결과입니다.
이때 버튼의 클릭이 트리거가 되어, 텍스트 데이터에 대한 API 요청과 화면 전환이 같이 이루어진다고 가정해보겠습니다. 우리가 접근할 수 있는 방식은 2가지 입니다.
- 로딩 인디케이터 등을 통해 API 요청 응답이 오기 까지 기다리고, 응답이 오면 즉시 화면을 전환한다.
- 응답 여부와 무관하게 화면은 넘기고, 응답이 오면 데이터를 UI 뿌려준다.
1번의 방식은 비교적 과거에 유행했던 방식이며, rx를 통한 비동기 프로그래밍이 대세가된 지금은 많은 서비스에서 2번을 사용하고 있습니다. 이때, 한 가지 문제가 발생합니다.
“빠른 화면 전환은 사용자에게 좋은 경험이나, 비동기적인 API 응답이 오기전 까지는 데이터가 없는데 UI 적으로 어떻게 대응하지?”
이때, skeletonView를 사용한다면
- 즉각적인 화면 전환을 통한 사용자 만족
- API 응답이 오기 전까지는 ‘로딩 중’이라는 UI를 적용하면서, 사용자에게 혼란을 주지 않음
과 같은 2마리 토끼를 잡을 수 있습니다.
서두가 길었는데 그냥 요약하자면ㅋㅋ “일단 넘겨버리고, 응답이 오지 않았다면 로딩 상태를 표기하자”가 될 수 있습니다. 이런 상황에서 자주 사용되는 것이 skeletonView입니다.
linesCornerRadius과 skeletonCornerRadius
적용한 skeletonView에 cornerRadius를 적용하기 위해서 일반적으로
skeletonCornerRadius
프로퍼티를 이용합니다. 하지만, Label과 같이 다수의 line이 있는 컴포넌트에 대해서는 linesCornerRadius
를 적용해야 우리가 원하는 UI를 얻을 수 있습니다. // 텍스트 기반 컴포넌트
label.linesCornerRadius = 10
// 일반적인 컴포넌트
view.skeletonCornerRadius = 10
github 이슈나 stack overflow 를 뒤져보니 과거에는 이 기능이 제공되지 않아, 여러 트릭이 존재했던 것 같습니다. 현재는 업데이트가 되어, 해당 기능을 사용할 수 있으니 다행이라는 생각이 드네요. 감사합니다.
[출처]
Share article