iOS/UIKIT

랜덤으로 영화 표시하기

밤새는 탐험가89 2024. 7. 10. 00:15

 

 

구현 내용

  • 최신 트렌드 영화 포스터가 임의의로 테이블 헤더뷰에 나온다. 
  • 테이블 헤더 뷰가 있는 Home 페이지로 다시 올 때마다 포스터가 새로 나온다.

 

구현 코드 

 

  • HeroHeaderUIView.swift 내에 configure 라는 메서드를 선언한다. 
  • 해당 메서드는 url을 통해 이미지 경로를 받아오고 이를 sd_setImage()로 포스터로 받는다. 
import UIKit

class HeroHeaderUIView: UIView {
    
    // MARK: UI Components
    private let heroImageView: UIImageView = {
        let imageView = UIImageView()
        imageView.contentMode = .scaleAspectFit
        imageView.clipsToBounds = true
        imageView.image = UIImage(named: "poster.jpg")
        return imageView
    }()
    
    ...
    
    public func configure(with model: TitleViewModel) {
        guard let url = URL(string: "https://image.tmdb.org/t/p/w500/\(model.posterURL)") else { return }
        
        heroImageView.sd_setImage(with: url, completed: nil)
    }
    
}

 

 

 

  • HomeViewController.swift 내에 configureHeroHeaderView() 메서드를 생성한다. 
  • 해당메서드는 getTrendingMovies 라는 API를 호출하는 메서드를 가져와서 받아온 데이터를 랜덤으로 표기한다. 
import UIKit

...

class HomeViewController: UIViewController {
    
    // MARK: Variables
    ... 
    private var headerView: HeroHeaderUIView?
    
    ... 
    
    // MARK: Life Cycle
    override func viewDidLoad() {
        super.viewDidLoad()
        ...
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        configureHeroHeaderView()
    }
    
    ...
    
    private func homeFeedTableHeaderView() {
        headerView = HeroHeaderUIView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 450))
        homeFeedTable.tableHeaderView = headerView
    }
    
    ... 
    
    private func configureHeroHeaderView() {
        
        APICaller.shared.getTrendingMovies { [weak self] result in
            switch result {
            case .success(let titles):
                let selectedTitle = titles.randomElement()
                self?.headerView?.configure(with: TitleViewModel(titleName: selectedTitle?.original_title ?? "", posterURL: selectedTitle?.poster_path ?? "" ))
            case .failure(let error):
                print(error.localizedDescription)
            }
        }
    }
    
    @objc private func leftBarButtonTapped() {
        
    }
}
...