In this Swift code example, you will learn how to add a playback slider to an AVPlayer, so that users can start playing music from any place they wish. The code example below will cover the following:
- Create AVPlayer and AVPlayerItem,
- Create UIButton programmatically,
- Create AVPlayerLayer and add it as a subview,
- Handle Play Button action to Pause and Play music,
- Add UISlider as a subview,
- Handle UISlider value changed event,
- Determine music file duration in seconds,
- Set the UISlider’s maximumValue equal to the duration of the music file in seconds.
Playback Slide Example
import UIKit import AVFoundation class ViewController: UIViewController { var player:AVPlayer? var playerItem:AVPlayerItem? var playButton:UIButton? override func viewDidLoad() { super.viewDidLoad() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) let url = URL(string: "https://s3.amazonaws.com/kargopolov/kukushka.mp3") let playerItem:AVPlayerItem = AVPlayerItem(url: url!) player = AVPlayer(playerItem: playerItem) let playerLayer=AVPlayerLayer(player: player!) playerLayer.frame=CGRect(x:0, y:0, width:10, height:50) self.view.layer.addSublayer(playerLayer) playButton = UIButton(type: UIButton.ButtonType.system) as UIButton let xPostion:CGFloat = 50 let yPostion:CGFloat = 100 let buttonWidth:CGFloat = 150 let buttonHeight:CGFloat = 45 playButton!.frame = CGRect(x:xPostion, y:yPostion, width:buttonWidth, height:buttonHeight) playButton!.backgroundColor = UIColor.lightGray playButton!.setTitle("Play", for: UIControl.State.normal) playButton!.tintColor = UIColor.black //playButton!.addTarget(self, action: Selector("playButtonTapped:"), for: .touchUpInside) playButton!.addTarget(self, action: #selector(self.playButtonTapped(_:)), for: .touchUpInside) self.view.addSubview(playButton!) // Add playback slider let playbackSlider = UISlider(frame:CGRect(x:10, y:300, width:300, height:20)) playbackSlider.minimumValue = 0 let duration : CMTime = playerItem.asset.duration let seconds : Float64 = CMTimeGetSeconds(duration) playbackSlider.maximumValue = Float(seconds) playbackSlider.isContinuous = true playbackSlider.tintColor = UIColor.green playbackSlider.addTarget(self, action: #selector(self.playbackSliderValueChanged(_:)), for: .valueChanged) // playbackSlider.addTarget(self, action: "playbackSliderValueChanged:", forControlEvents: .ValueChanged) self.view.addSubview(playbackSlider) } @objc func playbackSliderValueChanged(_ playbackSlider:UISlider) { let seconds : Int64 = Int64(playbackSlider.value) let targetTime:CMTime = CMTimeMake(value: seconds, timescale: 1) player!.seek(to: targetTime) if player!.rate == 0 { player?.play() } } @objc func playButtonTapped(_ sender:UIButton) { if player?.rate == 0 { player!.play() //playButton!.setImage(UIImage(named: "player_control_pause_50px.png"), forState: UIControlState.Normal) playButton!.setTitle("Pause", for: UIControl.State.normal) } else { player!.pause() //playButton!.setImage(UIImage(named: "player_control_play_50px.png"), forState: UIControlState.Normal) playButton!.setTitle("Play", for: UIControl.State.normal) } } }
For more Swift code examples and tutorials, please check the Swift Code Examples page on this website.