🍎 iOS/🍏 UIKit

    인스타그램 스타일 Page Control

    인스타그램 스타일의 페이지 컨트롤을 만들려고 했다. UIPageControl 처음엔 UIPageControl 을 이용해서 만들려고 했지만, 보여 줄 수 있는 점의 개수와 종류를 지정할 수 없음 점의 크기를 지정할 수 없음 위의 두가지 이유로 UIPageControl 을 사용할 수 없었다. UIControl 애초에 UIPageControl 이 UIControl을 상속하고 있기 때문에, UIControl을 상속해서 만들어 보았다. UIControl 공식 문서 공식 문서를 보면, UIControl 은 버튼이나, 슬라이더, 텍스트 인풋 같이 유저가 인터렉션 할 수 있게 하는 요소들이 상속을 받고 있다. UIControl은 사용자 인터페이스 요소를 구성하고 사용자의 상호작용을 처리하는 데 사용되는 클래스이다. U..

    [UIKit] App life cycle 이란?

    🚴🏻 app life cycle 이란? app 의 life cycle 이라는 것은 앱의 생명 주기를 의미한다. 우리 앱이 켜지고, 데이터 들이 메모리의 올라가고, 앱을 끈 것은 아니지만 다른 앱을 사용하고 있고, 결국에는 앱을 종료하게 되는 이 주기를 말한다. 애플에서는 이러한 상태에 맞춰서 호출 되는 메서드들을 정의해 놓았다. 그래서 어떤 메서드가 언제 호출 되는지 알고 있다면, 그 상태에 맞는 적절한 대응을 해줄 수 있다. (예를 들면 앱이 꺼지기 전에 데이터를 저장 한다든지 하는...) 📱 앱의 상태 Not Running 앱이 시작되지 않았거나 실행되었지만 시스템에 의해 종료된 상태 Inactive 앱이 전면에서 실행 중이지만, 아무런 이벤트를 받지 않고 있는 상태 Active 앱이 전면에서 실행 ..

    [iOS] 키보드야 텍스트 가리지마

    키보드를 보이게 하는데에 다양한 방법이 있다. 내가 시도해본 방법으로는 view 의 frame 을 변경하는 방법 view 의 autolayout 을 변경하는 방법 view 의 contentInset 을 변경하는 방법 keyBoard autolayout 활용하기 (iOS15 부터 가능) 들이 있다. 하나 하나 시도를 해보자. 우선 1~3 3가지 방법은 아주 약간만 다르고 방법이 비슷하다. 4번은 새로나온 아주 쉬운 방법이다. 1~3 방법을 먼저 구현해보자 ⌨️ 키보드 내리기 우선 일반적인 앱은 textFied 나 textView 가 아닌 곳을 터치하면 입력이 끝났다고 생각하고 키보드가 내려간다. 이것을 구현해보자. ViewController 에 아래 두가지 메서드를 구현한다. private func set..

    [iOS]사용자의 폰트 사이즈 정보에 따라 UI 바꿔주기

    📱 사용자의 폰트 사이즈 정보에 따라 UI 바꿔주기 웨더의 추천으로 어떤 블로그에서 접근성 설정을 하지 않는 것은 인종차별을 하는 것과 마찬가지다 라는 글을 읽었다. (아래 링크를 달아두었다.) 어떤 의미로 이런 제목을 다셨는지는 이해가 되었다. 실제로 아이폰에서 그런 부분들에 대한 지원이 다른 OS 에 비해서 좋아서 많은 장애인 분들이 아이폰을 사용한다는 이야기를 들었다. Font 사이즈에 대한 접근성을 설정해 주면 사용자의 설정에 따라 Font 사이즈를 줄 수 있다. 그런데 사실 그렇다 보면, 특정 크기 이상 폰트를 키웠을 때 UI 요소가 깨지거나 아주 이상하게 나오는 경우를 볼 수 있다. 사실 Font 에 대한 접근성을 지원한다면 사용자가 폰트 크기를 어떻게 설정하든지 간에 화면에서 보이기에 깔끔해..

    [iOS] delegate 구현하기

    ✍🏻 delegate 패턴 이란? delegate 의 뜻은 위임이다. 나의 권한을 다른 사람에게 위임하다. 원래는 내가 사용하도록 가지고 있는 권한인데 다른 사람에게 내 권한을 사용할 수 있게 위임한다. 라는 의미로 사용 된다. delegate pattern 의 의미도 같다. 원래 나의 오브젝트가 처리할 권한을 가지고 있어서 처리해야 할 일을 다른 오브젝트에게 권한을 넘겨주어서 다른 오브젝트에서 처리하도록 해주는 패턴이다. ✍🏻 Delegate 패턴 예시 👧🏻 예시를 통해서 알아보자. 👨🏻‍💼 사장 클래스와 👩🏻‍💼직원 클래스가 있다. 회식을 하고 결제를 하는 일은 원래 사장님이 권한을 가지고 있는 일이다. 그런데 사장님이 이번 회식에는 참여를 못하게 되었다. 그래서 직원 한명에게 카드를 긁을 수 있는 ..

    [iOS] Notification Center 구현하기

    😁 노티피케이션 센터란? 노티피케이션 센터란, 등록된 관찰자에게 알려줄 수 있도록 하는 알림 메커니즘이다. KVO 나 delegate 가 1 대 1 통신을 하는 것에 가깝다면 노티피케이션 센터는 여러곳에서 온 정보를 한 곳에서 모아서 다시 여러 곳으로 뿌려주는 것에 가깝다. 그래서 많은 사람들이 방송국에 노티피케이션 센터를 비유한다. 💻 노티피케이션 센터 구현해보기 NotificationCenter 공식 문서 노티피케이션 센터라는 이미 만들어져 있는 클래스를 사용하면 된다. 노티피케이션 센터는 싱글톤으로 구현되어 있기 때문에 어디에서 불러와도 같은 객체를 불러오게 된다. 이 순서를 따라서 구현하면 된다. ✅ 노티피게이션 센터에서 값을 전달하기 (post) ✅ Observer 등록하기 ✅ Observer가..

    KVO 구현하기

    🗝 KVO란? KVO는 Key-Value observing 이다. 다른 오브젝트의 프로퍼티 속성이 변경되었을 때, 오브젝트에서 변경사항을 알 수 있게 해주는 것 이다. KVO는 NSObject 를 상속받은 클래스에서 사용할 수 있다. 오브젝트끼리의 응집력(끈끈하게 묶어줌)이 좋기 때문에, 항상 같이 다녀야 하고 코드의 재활용성이 떨어진다. 👊🏻 KVO 사용법 KVO 를 swift 코드에 적용해 보자. 📦 택배 클래스를 만들고, 택배의 배송정보가 업데이트 되면 자동으로 받아서 볼 수 있도록 하는 코드를 만들어 보자. 트랙킹할 클래스 지정 먼저 트랙킹할 (정보를 가져올) 클래스를 지정한다. 그 클래스를 아래와 같이 설정해 준다. class Shipping: NSObject { @objc dynamic var..