본문 바로가기

EXPERIENCE/iOS

[Xcode/iOS] Swift 뮤직 플레이어 만들어보기(with. AVFoundation)

728x90
728x90
SMALL

 

 

 

결과보기

 

  • Github
 

GitHub - sohay19/Musik: Practice_ MusicPlayer

Practice_ MusicPlayer. Contribute to sohay19/Musik development by creating an account on GitHub.

github.com

 

 

 

 

728x90

 

 

 

 

  • AVFoundation
AVPlayer : 미디어를 컨트롤하는 플레이어
play() - 미디어 재생
pause() - 미디어 일시정지
seek() - 특정 시간으로 이동
replaceCurrentItem() - 현재 설정된 미디어 교체
addPeridicTimeObserve() - 특정 시간 마다 미디어 재생 시간 관찰
 

Apple Developer Documentation

 

developer.apple.com

 

AVPlayerItem : 각각의 미디어 개체
 

Apple Developer Documentation

 

developer.apple.com

 

AVMetadataItem : 각 미디어의 메타데이터
commonKey로 확인하여 각 정보를 얻어올 수 있다

▶ 키 정보
- title
- artist
- author
- albumName
- artwork
- creaitonDate
등등 존재
 

Apple Developer Documentation

 

developer.apple.com

 

  • 코드
Custom Cell
class MainViewCell : UICollectionViewCell {
    @IBOutlet weak var imgView : UIImageView!
    @IBOutlet weak var title : UILabel!
    @IBOutlet weak var singer : UILabel!
    
    override var isSelected: Bool {
        didSet {
            if isSelected {
                self.layer.backgroundColor = UIColor.gray.cgColor
            }
            else {
                self.layer.backgroundColor = nil
            }
        }
    }
    
    func updateData(_ data: MusicData) {
        imgView.image = data.img
        title.text = data.title
        singer.text = data.singer
    }
}

 

Custom HeaderView
class MainHeaderView : UICollectionReusableView {
    @IBOutlet weak var imgView : UIImageView!
    @IBOutlet weak var labelMusic : UILabel!
    
    var myData : MusicData?
    var myHandler : ((MusicData) -> Void)?
    
    override func awakeFromNib() {
        super.awakeFromNib()
        imgView.layer.cornerRadius = 5
    }
    
    func updateData(_ data: MusicData, handler: @escaping (MusicData) -> Void)
    {
        self.myData = data
        
        guard let curData = myData else {
            return
        }
        
        imgView.image = curData.img
        labelMusic.text = "\(curData.singer) - \(curData.title)"
        
        self.myHandler = handler
    }
    
    @IBAction func clickHeader(_ sender: UIButton) {
        guard let curData = myData else {
            return
        }
        myHandler?(curData)
    }
}

 

 

 

 

 

 

 

 

728x90
728x90
LIST