본문 바로가기

iOS

(74)
YPImagePicker UIImagePicker와 PHPicker로 앱을 만드려고 하다보면 .. 생각보다 제한이 많을 수 있다 .. 그래서 오픈라이브러리를 사용하게 되는데, 그 중 하나가 YPImagePicker다. Usage 자세한 설치 방법 및 사용법은 깃허브를 통해서 확인할 수 있다. 설치를 한 뒤에 제일 먼저 설정해야 하는 것이 있다. Info.plist에서 설정을 해야하는 세가지가 있다. 이 때 의문이 드는 것이 하나 있다. 만약 사진 촬영을 하지 않는 경우, Info.plist에서 사진 촬영 접근 권한을 삭제해도 되는 것인가? 라는 의문이다. 🤔 프로젝트에서 사용하지 않는 경우는 접근 권한을 추가 하지 않아도 괜찮지 않을까? 사실 이 내용때문에 이 글을 쓰게 되었다. 결론부터 말하자면 NOPE !! 안된다. 프로젝트..
0812 Q&A 정리 1. Cell 안의 Cell 구조일 때, 로직 처리를 ViewController에서 하는 이유? 셀의 중첩 구조에서 UI 및 비즈니스 로직 처리를 할 수 있는 방법은 다양하다. 예를 들어서 테이블 뷰 안에 컬렉션 뷰가 들어가 있는 경우, 테이블 뷰의 셀 안에서 컬렉션 뷰에 대한 delegate와 datasource를 채택하고 컬렉션 뷰의 셀을 빼서 UI 및 로직 처리가 가능하다. 그러나, SeSAC에서 셀에 대한 관리를 모두 최상위 ViewController에서 담당하도록 코드를 구현했고, 그 이유는 아래와 같다. UI와 데이터는 분리되어야 한다. 물론 위에서 말한 것과 같이 관리할 수도 있지만, 그렇게 할 경우 몇가지 번거로운/비효율적인 코드가 발생한다. 데이터를 다룰 때 (ViewController에..
required init VS override init 커스텀 뷰에 대한 작업을 할 때 필수적인 작업 중 하나는 초기화 과정이다. (초기화 과정은 커스텀 뷰가 아니더라도 필수적인 과정 중 하나다.) 초기화 작업 중에서 UIView를 다룰 때 많이 볼 수 있는 초기화 문법이 바로 required init?(coder: NSCoder) override init(frame: CGRect) 이 두가지이다. 이 둘의 차이를 제대로 알고 있어야 사용하는 방법에 맞는 초기화 구문을 작성할 수 있다. required init?(coder: NSCoder) xib 파일은 xml 형태로 인터페이스 빌더 구성 정보를 갖고 있다. 컴파일 시 이 파일은 nib 파일로 변환이 되기 때문에 사용자의 화면에서 출력하기 위해서는 init(coder: NSCoder)를 통해 객체를 생성해야..
Kakao 다음(Daum) 검색 API 구현 (feat. Expandable Cell) Kakao Developers에서 활용할 수 있는 API 중 검색 API를 구현해보자. 관련 가이드는 아래 링크를 통해서 보다 자세하게 확인할 수 있다. https://developers.kakao.com/docs/latest/ko/daum-search/dev-guide#search-blog Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com 검색 중에서 블로그와 카페 검색 값을 하는 프로젝트를 만들어보자. 먼저 두 가지 API를 확인하면, - 블로그 : GET /v2/search/blog - 카페 : GET /v2/search/cafe 로 URL에..
Cell안의 UIButton 이벤트 처리 (+WebKit View) Cell안의 버튼에 대한 이벤트 처리를 어떻게 할 수 있을까? 여러 가지 방법이 있을 수 있지만, 이번 정리에서는 3가지 방법을 살펴보자. Tag Delegate Closure UIButton의 tag를 이용하는 방법 (준비중) DelegatePattern를 이용하는 방법 개인적으로 그동안 많이 사용한 방식이다. 델리게이트 패턴은 말 그대로 위임하는 방식을 말한다. 이러한 델리게이트 패턴을 사용하기 위해서는 프로토콜을 만들고 채택해야 한다. 위임자가 프로토콜을 만들고, 피위임자가 해당 프로토콜을 채택한 후 규약을 따르는 방식을 코드를 작성하면 된다. 피위임자는 해당 규약 내에서 기능을 수행할 수 있는 이 때, 기능을 알맞게 수정해서 사용하면 된다. 동작 과정을 요약하면 다음과 같다. 1) cell에 Pr..
TMDB - GET / Pagenation TMDB API를 활용한 트렌드 미디어 GET API 연결 및 Pagenation을 구현해보자. 페이지네이션 구현 방법에 앞서서 먼저 페이지네이션이 무엇인지 짧게 말하자면, 페이지네이션이란? 대량의 데이터와 리소스를 분할해서 갖고 오는 방법으로 주로 서버의 데이터와 리소스를 다룰 때 사용하는 방법이다. 구현 방법은 크게 세 가지로, 아래와 같다. UITableViewDelegate의 프로토콜 중 하나인, willDisplayCell 메서드를 사용하는 방법 UIScrollViewDelegate의 프로토콜 중 하나인 scrollDidScroll을 통해 스크롤 뷰의 Offset을 활용하는 방법 UITableViewDataSource 프로토콜 중 하나인 Prefetching Protocol을 사용하는 방법 이 ..
APIManager 그동안 서버 통신을 ViewController에서 작업을 했다면, 이를 보다 효율적으로 사용해보도록 하자. 싱글톤 패턴을 적용해서 서버 통신 시, APIManager를 만들어 ViewController와 서버통신을 나누어 작업을 진행해 볼 수 있다. 맥주 정보를 랜덤으로 받아오는 서버통신을 다음과 같이 구현했다고 할 때, final class BeerViewController: UIViewController { // MARK: - UI Property @IBOutlet weak var collectionView: UICollectionView! // MARK: - Property private var beerList: [BeerResponse] = [] // MARK: - Life Cycle overri..
Pagenation 페이지네이션 (a.k.a 무한스크롤)이 무엇이고 어떻게 구현할 수 있는지 알아보자. Pagenation 대량의 데이터와 리소스를 분할해서 가져오는 방식으로 주로 서버의 데이터/리소스를 다룰 때 사용한다. (ex, 쇼핑몰의 경우 서버가 갖고 있는 제품들은 엄청 많지만 사용자가 해당 페이지에서 제품들의 정보를 다 볼거라는 보장이 없기 때문에 페이지네이션을 통해 데이터를 관리한다.) 주로 사용자의 스크롤 시점을 기반으로 페이지네이션 기능을 구현한다. Pagenation 방법 Offset Based Pagenation 오프셋페이지네이션의 종류는 크게 두 가지이다. 1. PageNumber 2. LimitOffset 몇 번째 페이지에서 몇 개의 데이터를 보여줄 지에 대한 정보를 쿼리 스트링으로 전달한다. let ..