내 인터렉션은 왜 어색할까?

내 인터렉션은 왜 어색할까? 어떤 UI는 이상하게 ‘어색하다’고 느껴질 때가 있다. 손가락은 분명히 움직이고 있는데, 화면은 마치 내 의도를 못 알아챈 것처럼 반응한다. 반대로 어떤 UI는 딱히 화려하지 않아도 이상하게...

Pinch Gesture를 선형적으로 다루는 방법

Pinch Gesture를 선형적으로 다루는 방법 이전글에서 TransitionLayout에 관한 글을 썼었습니다. TransitionLayout을 구현하면서 가장 먼저 부딪혔던 문제 중 하나가 핀치 제스처의 scale 값을 어떻게 자연스럽게 transitionProgress에 매핑할지였습니다. 단순히 scale 값을 그대로...

UICollectionViewTransitionLayout 이란?

UICollectionViewTransitionLayout 이란? LINE iOS App을 살펴보다가 이미지 피커에서 PinchGesture를 통해 Grid의 column 개수를 조절하는 방식이 인상적어서 어떻게 구현할 수 있는지 찾아보게 되었어요. 1. 왜 필요한가? 보통 레이아웃을 변경하려면 setCollectionViewLayout을 이용합니다....

UIKit에서도 Subview를 선언적으로 구성하기

UIKit에서도 Subview를 선언적으로 구성하기 SwiftUI는 View 계층 구조를 한눈에 파악하기 좋습니다. 그래서 UIKit에서도 해보고 싶었습니다. 이런 생각에서 시작해서 SubviewHierarchy라는 작은 라이브러리를 만들었습니다. UIKit 프로젝트에서 SwiftUI스러운 선언형 문법으로 View를 구성할 수...

[얼죽아] debounce를 이용한 API 호출 최적화

debounce를 이용한 API 호출 최적화 문제 상황 지도 기반 앱을 개발하다 보면 사용자의 지도 스크롤에 따라 해당 위치의 데이터를 실시간으로 가져와야 하는 상황이 자주 발생합니다. 하지만 사용자가 지도를 드래그하는 동안...

[얼죽아] UIView 계층 구조를 더 직관적으로 표현하기

UIView 계층 구조를 더 직관적으로 표현하기 문제 상황 iOS 개발을 하다보면 View의 계층 구조가 복잡해집니다. 그리고 UIKit에서 addSubview를 호출해서 하위 View를 추가하는데 이 방식이 View의 계층 구조를 한눈에 파악하기 어렵다는...

[얼죽아] Tuist Project 구조 설계하기

Tuist Project 구조 설계하기 Tuist 버전 관리 Tuist Version: 4.27.0 버전 관리 도구: mise mise를 통해 Tuist 버전을 통일하여 관리하고 있습니다. 프로젝트 구조 프로젝트의 구조는 Clean Architecture를 참고하여 설계하였고, 다음과...

[iOS] 내가 Tuist를 선택한 이유

내가 Tuist를 선택한 이유 Tuist를 이용한 모듈화 장단점 장점 빌드 성능 최적화 변경된 모듈만 빌드되어 전체 빌드 시간 단축 병렬 빌드를 통한 빌드 시간 최적화 캐시를 통한 빌드 성능 향상...

[iOS] 드래그 제스처 최적화로 60fps 달성하기

드래그 제스처 최적화로 60fps 달성하기 1. 문제 상황 Pan Gesture Recognizer를 이용해서 Constraint의 값을 변경해서 드래그 제스쳐를 구현했습니다. 이렇게 구현했을 때 터치 반응이 부드럽지 않고 버벅이는 현상이 발생했습니다. 그래서 Instruments의...

[iOS] Swift Testing Framework와 RxTest의 스레드 이슈

[iOS] Swift Testing Framework와 RxTest의 스레드 이슈 1. 문제 상황 Swift Testing Framework와 RxTest를 함께 사용하면서 아래와 같은 테스트 코드를 작성했습니다. @Test("some test") func test_something() throws { let scheduler =...