iOS/Swift 어플 따라하기

[Swift] PlayerView가로모드/ ViewController를 띄웠을 때/preview자동플레이/재생,정지버튼

Chafle 2022. 3. 30. 11:54
반응형

오늘은 플레이어뷰의 가로모드를 구현해보겠습니다.

 

위 코드처럼 ViewController에 playerView와 UIView, UIButton을 각각 연결 시켜 주시고

 

AVPlayer을 player로 가져옵니다.

 

가로 모드 변환 코드는

 override var supportedInterfaceOrientations: UIInterfaceOrientationMask {

        return .landscapeRight

    }

 


 

플레이어가 진행중인지 아닌지 확인하는 메서드는

 

extension AVPlayer {

    var isPlaying: Bool {

        guard self.currentItem != nil else { return false }

        return self.rate != 0

    }

 

 

이후

ViewController를 눌렀을 때 실행해야할 코드들을 만들어보겠습니다.

 


할 일
1. movie를 가져옵니다.
2. player vc를 띄워서 전달
3. plyaer vc + moive전달
4. presenting player vc

클릭했을 때  반응을 해야하는 것은

UICollectionViewDelegate에 작성해줍니다.

extension SearchViewController: UICollectionViewDelegate {

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

 

 

 

1. movie를 가진다. (url를 가져와서 avplayeritem을 item에 할당)

let movie = movies[indexPath.item]

 

let url = URL(string: movie.previewURL)!

let item = AVPlayerItem(url: url)

 

 

2. player vc를 띄워서 전달한다.

"Player" 스토리보드에서 뷰컨트롤 가져오게 합니다. (+모달로 풀스크린으로 띄우게 합니다)

let sb = UIStoryboard(name: "Player", bundle: nil)

let vc = sb.instantiateViewController(identifier: "PlayerViewController") as! PlayerViewController

        vc.modalPresentationStyle = .fullScreen

// 모달로 풀스크린으로 띄우게 합니다

 

3. player vc + movie 전달

vc.player.replaceCurrentItem(with: item)

 

4. presenting player vc

 present(vc, animated: false, completion: nil)

 

 


선택하면 preview바로 시작

 override func viewDidLoad() {

        super.viewDidLoad()

//뷰컨트롤러의 메모리가 올라옴

playerView.player = player

//뷰의 플레이어가 누구냐? 아웃풋을 내주는 애가 누구냐? 뷰컨의 player다.

override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(animated)

        play()

//보여지기 직전에 플레이 시킴(누르면 바로 시작)

 

 


재생과 일시정지 버튼 누르면 동작

 

if player.isPlaying {

            pause()

        } else {

            play()

        }

    func play() {

        player.play()

        playButton.isSelected = true

    }

    func pause() {

        player.pause()

        playButton.isSelected = false

    }

    func reset() {

        pause()

        player.replaceCurrentItem(with: nil)

    } //&나가면서 리셋시켜주고 나가, 플레이어 아이템을 제거한다 = 플레이어를 비운다.

 

반응형