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") } }
if want change video on every button click, have create new avplayer object.
- create , remember avplayer object
- create , remember avplayerlayer
-- when button clicked --
- remove avplayerlayer parent
- stop avplayer (old video)
- goto step 1 new video url
Comments
Post a Comment