ios - Swift 3, XCode 8 - Changing Local Video on Button Press - AVPlayer -


i'm trying create app change videos on each button press.

currently: video loops , button nothing

goals: button cycle next video based on array index. plan on associating array text descriptions go along each video.

thoughts: think json based implementation work better. first ios app , i'm trying keep simple. thoughts , appreciated!

here function loops video. name of name of video held in array called videoid:

class workoutviewcontroller: uiviewcontroller{ @iboutlet weak var videoview: uiview! @iboutlet weak var infocardview: uiview!  var currentvidindex: int = 0      var player: avplayer? var playerlayer: avplayerlayer?      override func viewdidload() {     super.viewdidload()     shadowbackground() } var videoid: [string] = ["bodyweight_fitness_arch","bodyweight_fitness_assisted_squat","bodyweight_fitness_band_dislocates"]   func setloopingvideo(){     let path = bundle.main.path(forresource: videoid[currentvidindex], oftype: "mp4")     let url = url.init(fileurlwithpath: path!)     let player = avplayer(url: url)     let playerlayer = avplayerlayer(player: player)      playerlayer.frame = videoview.bounds     self.videoview.layer.insertsublayer(playerlayer, at: 0)     player.play()      // create observer monitor when video ends, when set video time start (zero)      notificationcenter.default.addobserver(forname: nsnotification.name.avplayeritemdidplaytoendtime,object: player.currentitem, queue: nil)      {         notification in player.seek(to: kcmtimezero)         player.play()       }     func shadowbackground(){     infocardview.layer.cornerradius = 3.0     infocardview.layer.shadowcolor =             uicolor.black.withalphacomponent(0.6).cgcolor     infocardview.layer.shadowoffset = cgsize(width: 0, height: 0)     infocardview.layer.shadowopacity = 0.9              videoview.layer.cornerradius = 3.0     videoview.layer.shadowcolor =      uicolor.black.withalphacomponent(0.6).cgcolor     videoview.layer.shadowoffset = cgsize(width: 0, height: 0)     videoview.layer.shadowopacity = 0.9  } override func viewdidappear(_ animated: bool) {     setloopingvideo() }  @ibaction func shownextvideo(_ sender: uibutton) {     if currentvidindex < videoid.count{         currentvidindex += 1         print (currentvidindex)     } else {         nslog("nothing")     } } 

what looks like

if want change video on every button click, have create new avplayer object.

  1. create , remember avplayer object
  2. create , remember avplayerlayer

-- when button clicked --

  1. remove avplayerlayer parent
  2. stop avplayer (old video)
  3. goto step 1 new video url

Comments

Popular posts from this blog

How to understand 2 main() functions after using uftrace to profile the C++ program? -

c# - Update a combobox from a presenter (MVP) -

How to put a lock and transaction on table using spring 4 or above using jdbcTemplate and annotations like @Transactional? -