그동안 많은 프로젝트를 하면서 여러 뷰를 하나의 뷰로 감쌀 때 UIView를 사용해 왔는데요.뷰를 감싸기 위한 UIStackView가 있는 것을 알면서도 더 자유롭게 뷰를 배치하기 위해 사용하지 않았습니다.또, UIStackView를 사용하면서 여러 제약 조건에 충돌이 생기기도 했고, 이러한 충돌을 어떻게 해결해야 할 지 감이 오지 않아서 빠르게 프로젝트를 진행해야 한다는 핑계로 UIStackView의 사용을 더 피하기도 했습니다. 그러던 중 최근 새로운 프로젝트를 하면서 뷰 간의 일관된 간격을 위해 UIStackView를 사용하게 됐는데요.이번 시간에는 UIStackView를 사용하면서 공부한 내용을 기록하려 합니다. UIStackView@MainActorclass UIStackView: UIView우..
UIKit
지난 시간에 UIBarAppearance에 대해 찾아보면서 시스템 바에 흐림 효과를 주는 방법에 대해서도 알아보았었는데요. 이번 시간에는 시스템 바가 아닌 뷰에 흐림 효과를 주는 방법에 대해 알아보겠습니다. Apple Design Resource와 Material 우선 지난 시간에 잠시 참고 했던 Apple Design Resource 피그마 파일을 다시 한번 참고해보겠습니다. Apple Design Resource 피그마에서는 다양한 Color 및 Material들을 컴포넌트에 사용할 수 있는데요. 지난 시간에 UIBarAppearance를 살펴보며 피그마에서 iOS의 시스템 바는 chrome으로 채워져 있는 것을 알 수 있었습니다. 하지만, UIColor에는 chrome이라는 색이 존재하지 않는데요...
꽤 오랜 시간 계획해 온 프로젝트가 있었는데, 최근 그 프로젝트를 진행하게 되면서 여러 문제에 직면하게 되었습니다. 그중 하나가 UINavigationBar, UIToolbar 등의 시스템 바와 관련된 부분이었는데요. 이번 시간에는 앱의 시스템 바를 다루면서 고군분투하면서 공부한 내용을 기록하려 합니다. 시스템 바를 커스터마이징하게 된 배경 우선 시스템 바를 다루게 된 배경부터 살펴보자면, 가장 처음에는 Navigation Bar와 Toolbar에 빈 공간이 생겨버린 것에서부터 시작하게 됩니다. 어떤 뷰에서 다른 뷰로 넘어갈 때 위와 같이 네비게이션 바와 툴바에 뜬금없이 세이프 에리어를 지킨 것 같은 빈 공간이 생겨버렸는데요. 이 문제를 해결하기 위해 공식 문서를 뒤적거리다 찾은 것은 UIBarAppea..
지난 시간에 UISlider를 다루면서 슬라이더의 트랙 이미지에는 이미지의 너비를 자연스럽게 늘리거나 줄이기 위해 Stretchable Image를 사용할 수 있다고 했는데요. Stretchable Image라는 이름을 웹이나 안드로이드 앱 분야에서는 들어본 적이 없는 것 같아서 이게 무엇인지 찾아보았습니다. 이번 시간에는 이 Stretchable Image에 대해 공부한 내용을 정리해 보려 합니다. Stretchable Image 우선 이 Stretchable Image가 무엇인지 알아보기 위해 공식 문서를 살펴보기로 했습니다만, Stretchable Image만 별도로 다룬 문서는 따로 없는 것 같고, 그 대신 stretchableImage(withLeftCapWidth:topCapHeight:)라는..
저번 시간에 이어 이번 시간에도 미디어 플레이어에서 현재 재생 중인 구간을 보여주고, 다른 구간으로 넘어갈 수 있게 하는 재생바 부분을 어떻게 구현하면 좋을지 고민하며 공부한 내용을 정리해 보려 합니다. 이번 시간에는 UISlider에 대해서 알아보겠습니다. UISlider 앞서 본 UIProgressView는 미디어 플레이어에서 재생바의 현재 진행 중인 부분을 표시할 수는 있지만, 기본적으로 제공하는 방법으로는 내가 원하는 구간으로 넘어가는 기능을 구현할 수 없어 UIResponder의 touch event 관련 메서드를 재정의하여 구현해야 했습니다. UIKit에서는 특정 동작 등을 전달하기 위한 UIControl들이 존재하는데요. 이러한 UIControl 중에는 UIProgressView와 유사하게 ..
개인적으로 미디어 플레이에 관심이 많아서 개인 프로젝트로 뮤직 플레이어나 비디오 플레이어 등을 몇 번 만들어봤는데요. 미디어 플레이어에서 현재 재생 중인 구간을 보여주고, 또 다른 구간으로 넘어갈 수 있게 하는 재생바 부분을 어떻게 구현하면 좋을지 고민하며 공부한 내용들을 정리해 보려 합니다. 그중에서도 이번 시간에는 처음에 찾아봤던 UIProgressView에 대해서 알아보겠습니다. UIProgressView 많은 미디어 플레이어에서 현재 재생 구간을 보여주는 재생바는 단순히 재생 구간을 보여주는 것만이 아니라 내가 원하는 구간으로 재생 구간을 변경하는 기능도 함께 하는 경우가 많습니다. 이러한 재생바를 영어권에서는 주로 Progress Bar라는 명칭으로 부르는데요. UIKit에도 비슷한 명칭의 UI..
기존에 UIKit에서 UIButton을 사용할 때마다, 버튼의 구성 방법이나 버튼에 클릭 이벤트 등을 주기 위해 selector를 이용하여 @objc 메서드를 사용해야하는 등 약간 불편하기도 하고, 부자연스러운 느낌을 지울 수가 없었는데요. 이번 시간에는 iOS 15 이후에 UIButton의 새로운 구성 방법과 버튼에 이벤트를 주는 방법에 대하여 알아보겠습니다. UIButton 사용자가 앱과 상호 작용할 수 있는 방법 중 하나인 버튼은 앱에서 매우 중요한 UI 요소인데요. UIButton은 사용자의 상호작용에 대한 응답으로 사용자 지정 코드를 실행하는 컨트롤 입니다. UIButton에는 텍스트 레이블, 이미지, 혹은 이 둘을 모두 사용하여 버튼의 목적을 전달할 수 있고, 모양을 구성하여 앱의 디자인에 맞..
이번 시간에는 iOS 면접을 준비하면서 공부한 UIWindow 객체의 역할에 대해 공부한 내용을 정리해보려고 합니다. 질문은 https://github.com/JeaSungLEE/iOSInterviewquestions에서 참고했습니다. 원 질문의 내용은 "UIWindow 객체의 역할은 무엇인가?" 입니다. 개요 우리가 일반적으로 iOS 앱의 UI를 구성할 때, Storyboard를 사용하는 방식과 Storyboard 없이 코드로 UI를 구성하는 방식을 사용할 수 있습니다. 직접적으로 UIWindow라는 개념을 처음 접하게 될 때는 아무래도 Storyboard 없이 코드로 UI를 구성하게 될 때가 아닐까 싶은데요. 처음 코드로 UI를 작성할 때, UIWindow라는 게 뭔지도 모르고 일단 코드로 UI를 작..
iOS UIKit으로 프로젝트를 진행하다보면 ViewController의 여러 생명주기를 접하게 되는데, 이 생명주기에 대해 제대로 알지 못하고 그냥 되는대로 사용하고 있는 것 같아서 이번 시간에는 ViewController의 생명주기(Life Cycle, 라이프 사이클)에 대해 공부한 내용을 정리해보겠습니다. 개요 일반적으로 우리가 사용하는 모바일 앱들은 하나 이상의 화면으로 이루어져 있습니다. 즉, 하나의 앱은 최소 하나 이상의 ViewController(이하 '뷰 컨트롤러')를 갖고 있다는 것인데요. 이 뷰 컨트롤러는 각각의 뷰 컨트롤러마다 생명주기를 갖고 있습니다. 생명주기는 각각의 뷰 컨트롤러가 화면에 나타나거나 사라질 때, 즉 화면이 전환될 때 호출되는 함수들을 의미합니다. ViewContro..