Core Animation을 이용한 Particle Animation
Core Animation을 이용한 Particle Animation Safari의 ‘방해 요소 가리기(Hide Distracting Items)’처럼, iOS에서 Particle Animation을 구현해 보고자 합니다. 미리보기 CAEmitterLayer 활용 UIView 분해 애니메이션 1. CAEmitterLayer로 간단하게 만들기 빠르고 쉽고, 코드도...
UIKit Transform의 순서가 결과를 바꾸는 이유
UIKit Transform의 순서가 결과를 바꾸는 이유 개요 UIKit에서 CGAffineTransform을 사용할 때는 적용 순서에 따라 내가 원하는 결과가 나오지 않을 수 있습니다. 이 글에서는 transform 연산이 적용되는 수학적 구조를 분석하고, 코드...
CPU Based Animation vs GPU Based Animation
CPU Based Animation vs GPU Based Animation 1. 문제의식: iOS앱에서 애니메이션을 구현할 때 CPU를 써야 할까, GPU를 써야 할까? UIKit에서 애니메이션을 만들 때 UIView.animate나 CABasicAnimation을 쓰면 부드럽게 동작한다. 하지만 실시간...
내 인터렉션은 왜 어색할까?
내 인터렉션은 왜 어색할까? 어떤 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를 참고하여 설계하였고, 다음과...