분류 전체보기 (36) 썸네일형 리스트형 [UIkit] 키보드 어보이던스(with 카카오톡 채팅방 만들기) 안녕하세요! 우리가 카카오톡을 사용할 때 아래 영상처럼 채팅을 치기 위해선 키보드(소프트)를 사용해야합니다. 영상을 자세히 보시면 키보드가 채팅이 입력되는 공간을 가리지 않고 밀어내는 것을 확인할 수 있습니다. 이런 동작을 Keyboard Avoidance라고 합니다. 일전 SwiftUI를 사용하여 키보드 어보이던스를 피하는 글을 작성한 적이 있었는데요 UIKit같은 경우 SwiftUI와 달리 키보드 어보이던스가 자동으로 실행되지 않습니다.(자동으로 키보드 어보이던스가 적용되는 SwiftUI는 해당 기능을 끄는 것이 까다롭습니다.. UIKit 최고 🙌) 아래 영상은 제가 직접 구현한 채팅창 화면입니다. 먼저 입력영역은 UITextView로 구현하였습니다. 카카오톡같은 경우는 멀티라인 입력을 지원하기.. [iOS] Alamofire request flow 안녕하세요 ✋iOS에서는 네트워크 통신시 Alamofire를 많이 사용합니다. 해당 포스팅에서는 Alamofire의 요청은 어떻게 이뤄지는 살펴보려고합니다. 이를 통해 URLSession만 사용했을 때와 어떤점이 다른지 살펴보겠습니다. 우선 Session과 Interceptor를 먼저 설명하겠습니다. SessionAlamofire는 Session이라는 자체타입을 사용하여 네트워크 통신을 관리합니다. 흔히 요청을 보낼 때 사용하는 AF인스턴스도 Session타입의 인스턴스입니다. Session타입은 내부적으로 URLSession인스턴스를 보유하고 있습니다. Interceptor Interceptor는 Alamofire를 사용해야하는 강력한 기능중 하나입니다. 인터셉터는 요청전 요청을 가로채어 추가적.. [UIKit] 커스텀 탭바 만들기 안녕하세요! ✋ 주니오스입니다. 오늘은 커스텀 탭바를 만들어봄과 동시에 컨테이너 뷰 컨트롤러에 대해서도 학습해 보려고 합니다. 먼저, 아시다시피 뷰 컨트롤러에는 두가지 역할이 있는데요. 바로 컨텐츠를 표시할 UIView를 관리하는 역할인 컨텐츠 뷰 컨트롤러가 있습니다. 그리고 다수의 뷰 컨트롤러들을 자식 뷰 컨트롤러표 보유하며 관리하는 컨테이너 뷰 뷰컨트롤러가 있습니다. 전자의 경우는 익숙하지만, 후자의 경우 조금 어렵더군요. 먼저 커스텀 탭바를 만들어 볼 것인데요 구조는 아래와 같습니다. 오른쪽 UIWindow위에 그려진 것이 디바이스 화면에 표시되는 레이아웃입니다. 아래에 화면을 선택할 수 있는 탭바가 있고, 바로위에 이에 상응하는 화면이 나오게 됩니다. 왼쪽그림에서 우선 가장 바깥쪽에 있는 것이.. [클린아키텍쳐] BestPractice로 공부하는 클린아키텍쳐 2편: Data 안녕하세요 주니오스입니다~! ✋ Domain편에 이어서 이번에는 Data영역을 분석해 보겠습니다. 지난 포스팅을 못보신 분들은 1편 Domain을 먼저 보시는 것을 추천합니다~! 우선 데이터 영은 다음과 같이 구성되어 있습니다. Repositories 아래코드를 보시면, 지난번에 Domain레이어에서 확인할 수 있었던 레포지토리 인터페이스가 사용되는 것을 확인할 수 있습니다. 레포지토리 인터페이스에 따라 구현된 매서드가 어떻게 정의되어 있는지 확인해 봅시다. 구분을 쉽게하기위해 주석으로 번호를 마킹하였습니다. 1번을 보시면 Domain레이어로부터 전달받은 엔티티를 DTO로 변환하는 것을 확인할 수 있습니다. 2번의 Task는 레포지토리에서 진행중인 작업의 상태를 표시하기위한 객체로 보입니다. 이런 식으.. [클린아티텍쳐] BestPractice로 공부하는 클린아키텍쳐 1편: Domain 안녕하세요 주니오스입니다~! ✋ 이번글 은 클린아키텍쳐와 관련된 포스팅입니다. 클린아키텍쳐는 아래 보이는 그림처럼 원형으로 이루어집니다. 클린아키텍의 핵심은 아래그림에서 볼 수 있듯이 경계의 분할(동심원)과 의존성의 방향(화살표방향)이 항상 안쪽으로 향하는 단방향 의존성입니다. 위 두 제약은 SOLID개발 원칙이 기저에 깔려있으며 소프트웨어를 안정적으로 개발할 수 있게합니다. 동심원은 크게 3가지로 구성됩니다. Domain, Presentation 그리고 Data 입니다. 해당 레이어가 하나의 모듈을 의미하는 것이아닌 논리적인 개념으로 생각하시면됩니다. 예를들어 Presentation영역은 화면에 컨텐츠를 표시하는 요소들이 속하게 됩니다. 이번 글은 3가지 레이어중 Best Practice의 Dom.. [UIKit] convert매서드를 이용한 상대 좌표 구하기 안녕하세요 주니오스입니다~! ✋ 기본적으로 제공되는 frame프로퍼티의 경우 부모 좌표공간을 기준으로 현재 뷰의 위치를 알려줍니다. (bounds의 경우 자신의 좌표 공간에서의 위치를 의미합니다.) 하지만 개발을 하다보면 특정 뷰의 위치(frame)를 특정 뷰를 기준으로 알고싶은 경우가 있습니다. 이때 사용할 수 있는 UIVIew의 인스턴스 매서드가 바로 convert입니다. 이번 글에서는 해당 매서드의 사용법에 대해 다뤄보려고 합니다. 공식 문서를 들어가 보면 총 3가지 매서드가 존재합니다. 하지만 설명만 읽어서는 사실상 기능에 대한 파악이 힘듭니다. convert(CGRect, to: UIView) 먼저 to매개변수가 존재하는 매서드부터 살펴보겠습니다. 먼저 해당 매서드를 호출하기 위해선 3가지 객.. [클린아키텍쳐] 주요 원칙 정리 안녕하세요 주니오스입니다! ✋ 최근 읽고있는 책인 '클린아키텍쳐(로버트 C. 마틴)'의 중간 점검으로 주요 개념들을 정리해 보려고 합니다. 단일 책임원칙 공통 패쇄원칙 의존성 역전 원칙 안정된 의존성 원칙 안정된 추상화 원칙 SRP: 단일 책임원칙 단일책인 원칙은 클래스와 함수 레벨에서 사용되는 개념입니다. 함수의 경우 하나의 작업만을 수행해야 합니다. 그리고 클래스의 경우 하나의 엑터에 대한 동작만을 수행해야 합니다. 예르들어 다수의 엑터가 하나의 클래스를 사용하는 경우를 가정하겠습니다. 상점이라는 클래스가 있습니다. 해당 클래스는 '상품 적재' 엑터, '상품 판매' 엑터가 모두 해당 클래스를 사용합니다. 이 경우 적재 정책(비즈니스 로직)이 변경되어 상점 클래스를 수정해야하는 일이 발생할 수 있습니다.. [Extension] Action Extension, AppGroups과 함께 사용해보기 안녕하세요✋✋ 오늘은 ActionExtension을 사용하는 방법과 AppGroups를 사용해 파일을 공유하는 방법에 대해 다뤄보려고 합니다. 먼저 프로젝트에 Action Extension을 추가합니다. 기본적인 코드는 이미지 데이터를 불러오는 코드가 아마 구현되어 있을 겁니다. 저는 웹 url을 가져오는 엑션을 구현해 보겠습니다. 사용 컨텐츠 제한하기 일단 기본적으로 Action Extension은 ActivityView에서 사용이 가능합니다. Action Extension을 구현한 경우 아래 사진의 빨간색으로 상자쳐진 부분에 표시되게 됩니다. 모든 엑티비티 뷰에서 액션이 실행되는 것을 방지할 수 있습니다. 바로 nsextensionactivationrule을 지정하는 방법인데요 원하는 키를 InfoP.. 이전 1 2 3 4 5 다음 목록 더보기