iOS 152

컬렉션 뷰의 아이템을 길게 눌렀을 때, 호출되는 메서드 사용하기

구현 내용 컬렉션 뷰의 아이템을 길게 누르면 "Download" 라는 글과 함께 메서드가 호출된다.  구현 코드 해당 컬렉션 뷰의 아이템들은 Home 뷰에 있는 테이블에 등록된 것이다. 해당 컬렉션 뷰 셀이 있는 파일 내에 아래 코드를 추가한다. import UIKitclass CollectionViewTableViewCell: UITableViewCell { ... private func downloadTitleAt(indexPath: IndexPath) { DatePersistenceManager.shared.downloadTitleWith(model: titles[indexPath.row]) { result in switch r..

iOS/UIKIT 2024.07.11

검색 결과로 나온 영화 포스터를 누르면 상세페이지로 넘어가기

구현 내용서치바에 영화를 검색하면 영화검색 결과가 나오고 해당 셀을 누르면 영화 상세페이지로 넘어가게 된다.   구현 코드 SearchViewController SearchResultsViewController 간에 연결을 델리게이트 패턴으로 했다. 프로토콜을 먼저 생성한다. 델리게이트 패턴을 통해 데이터를 전달한다. import UIKitprotocol SearchResultsViewControllerDelegate: AnyObject { func searchResultsViewControllerDidTapItem(_ viewModel: TitlePreviewViewModel)}class SearchResultsViewController: UIViewController { // MA..

iOS/UIKIT 2024.07.10

랜덤으로 영화 표시하기

구현 내용최신 트렌드 영화 포스터가 임의의로 테이블 헤더뷰에 나온다. 테이블 헤더 뷰가 있는 Home 페이지로 다시 올 때마다 포스터가 새로 나온다.  구현 코드  HeroHeaderUIView.swift 내에 configure 라는 메서드를 선언한다. 해당 메서드는 url을 통해 이미지 경로를 받아오고 이를 sd_setImage()로 포스터로 받는다. import UIKitclass HeroHeaderUIView: UIView { // MARK: UI Components private let heroImageView: UIImageView = { let imageView = UIImageView() imageView.contentMode = .scaleAspe..

iOS/UIKIT 2024.07.10

델리게이트 패턴이란?

Delegate Pattern 이란? "객체가 자신의 책임을 다른 객체에게 위임(delegate)하는 디자인 패턴"을 의미한다. 예를 들어, 테이블뷰 또는 컬렉션 뷰를 사용할 때 어떤 액션을 취할지에 대한 책임을 뷰컨트롤러에게 UITableViewDelegate 또는 UICollectionViewDelegate를 사용하여 위임한다.  그럼 왜 굳이 "위임"이라는 것을 사용하는 것일까? 애플이 미리 구현해 놓은 UITableView 또는 UICollectionView 등의내부 코드는 비공개이기 때문에 개발자가 이를 알 수 없고, 그렇기에 수정할 수도 없다.  위에서 예를 든 테이블의 셀을 탭했을때, 상황에 맞는 리액션을 개발자가 코드로 작성해야 한다. 하지만 개발자는 애플이 구현해 놓은 내부 코드를 수정할..

iOS/Swift 2024.07.08

webkit을 통해 유튜브 영상의 주소로 영상 틀어보기

구현 내용Home 화면 내에 보이는 영화 리스트를 누르면 해당 영화에 대한 상세페이지로 넘어간다. 상세 페이지 안에는 영화와 관련된 예고편과 영화 제목, 영화 개요 및 다운로드 버튼이 있다.   구현 코드  상세 페이지 관련한 코드를 담은 TitlePreviewViewController.swift 파일을 생성한다. import UIKitimport WebKitclass TitlePreviewViewController: UIViewController { // MARK: UI Components private let titleLabel: UILabel = { let label = UILabel() label.translatesAutoresizingMaskIntoCo..

iOS/UIKIT 2024.07.08

유튜브에서 제공하는 API를 통해 영화 트레일러 가져오기

https://www.youtube.com/watch?v=6wL3evhiN5k  구현 내용테이블 + 컬렉션 뷰 내에 나온 영화 셀을 누르면 해당 영화의 트레일러 영상을 유튜브를 통해 볼 수 있다.  구현 코드Google developer console 이라고 검색하여 관련 사이트에 접근한다. 이 사이트에서 프로젝트를 하나 생성하고, 유뷰브 API_KEY를 가져온다.  https://developers.google.com/youtube/v3/docs?apix=true&hl=ko API Reference  |  YouTube Data API  |  Google for Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. API Reference 컬렉션을 사용해 정리하기..

iOS/UIKIT 2024.07.08

서치바? 검색창은 어떻게 사용하는가?

구현 내용Search 탭에 서치바 기능을 추가하고 검색 결과를 테이블 + 컬렉션뷰와 혼합하여 보여준다.  구현 순서 UISearchController 타입의 searchController 라는 변수를 선언한다.searchController와 SearchResultsViewController 사이에는 searchController.searchResultsUpdater = self 가 있다. 해당 변수에 결과를 받아서 보여주는 SearchResultsViewController를 생성한다. SearchResultsViewController 내에는 결과 값을 어떤 식으로 보여줄 지 정한다.구현 코드 TMDB 사이트 내 Search -> Multi 부분에 들어가서 API 리퀘스트 함수를 확인한다. https://..

iOS/UIKIT 2024.07.05

API를 통해 가져온 데이터를 테이블 내에 컬렉션뷰 이미지로 넣기

https://explorer89.tistory.com/103 공공 API를 통해 데이터 불러오기 (TMDB)구현 내용TMDB 라는 영화 사이트 내에서 제공하는 API를 통해 외부 데이터를 갖고 왔다. 구현 코드APICaller.swift 라는 클래스 생성한다.import Foundationstruct Constants { static let API_KEY = "개인 API_KEY" static lexplorer89.tistory.com   구현 내용테이블 내 컬렉셔뷰에 API를 통해 얻은 데이터 중에서 이미지를 갖고와 보여준다.  구현 코드TMDB 사이트 내에 API를 받는 개발자 사이트로 들어간다. 각 카테고리 별로 제공하는 API 함수를 받아온다. https://developer.themoviedb..

iOS/UIKIT 2024.07.05

영어 단어 중에 첫 번째 글자를 대문자로 하고 나머지는 소문자로 처리하는 함수

extension String { func capitalizeFirstLetter() -> String { return self.prefix(1).uppercased() + self.lowercased().dropFirst() }}이 코드는 Swift에서 문자열(String) 타입에 확장을 추가하여 첫 글자를 대문자로 만드는 capitalizeFirstLetter라는 메서드를 정의한것이다.  이 코드는 String 타입에 새로운 기능을 추가하는 확장을 정의한 것으로, 확장을 사용하면 기존 타입에 메서드, 계산된 속성, 서브스크립트 등을 추가할 수 있다. extension String {  이 메서드는 문자열의 첫 글자를 대문자로 변환하고 나머지 글자를 소문자로 변환하여 반환한다.f..

iOS/Swift 2024.07.04

공공 API를 통해 데이터 불러오기 (TMDB)

구현 내용TMDB 라는 영화 사이트 내에서 제공하는 API를 통해 외부 데이터를 갖고 왔다. 구현 코드APICaller.swift 라는 클래스 생성한다.import Foundationstruct Constants { static let API_KEY = "개인 API_KEY" static let baseURL = "https://api.themoviedb.org"}enum APIError: Error { case failedtogetData}class APICaller { static let shared = APICaller() func getTrendingMovies(completion: @escaping (Result) -> Void) { ..

iOS/UIKIT 2024.07.04