小贼音乐的最终效果如下:
在step2中,我们完成了一个简易版本的,能够通过扫描人脸进行播放歌曲的音乐播放器。在前面我们也提到了,一登默认的权限,并没有获取表情的功能,幸运的是,本人申请得到了这个高级权限(一登的负责的哥们儿还是挺好说话的,哈哈,可以尝试申请弄个权限来玩玩,题外话,高级功能中,本人的颜值只有0.3,满分是1,o(╯□╰)o)。
所以,现在有表情识别的权限了,当然想把它做得更好一些了。不过暂时我只选取了四个表情进行识别,分别是:
Happy Sad Calm angry其余表情,个人感觉放在音乐中,不是特别合适.然后,我们在storyboard中,添加一个vIEw,放到当前vIEwController底部。是一个固定高度120的vIEw,再添加几个表情,最终效果图如下:
注意,底部的表情,使用的是autolayout的等距离约束,如果不了解的话,可以看这篇blog,到我的github山,可以下载这些表情图片,顺便说一下,表情都是使用sketch简单的制作,颜值不是很高。
然后新建一个MoodUIVIEw类,继承UIVIEw,将最底下vIEw对应的类改为MoodUIVIEw,绑定MoodUIVIEw到vIEwController中,并且增添一个swipeHandler方法,来处理上下滑动手势。
/** 上下滑动处理函数 :param: sender 滑动手势 */ func swipeHandler(sender : UISwipeGestureRecognizer){ var frameY = self.vIEw.frame.height if sender.direction == .Up{ let h = frameY - self.moodVIEw.center.y if h < 0 { UIVIEw.animateWithDuration(2,delay: 0,usingSpringWithdamPing: 0.3,initialSpringVeLocity: 20,options: UIVIEwAnimationoptions.CurveEaseInOut,animations: { () -> VoID in self.moodVIEw.center.y -= 120 },completion: { (ok) -> VoID in }) } } if sender.direction == .Down{ let h = frameY - self.moodVIEw.center.y if h > 0 { UIVIEw.animateWithDuration( 0.3,animations: { () -> VoID in self.moodVIEw.center.y += 120 },completion: { (ok) -> VoID in }) } } }
然后,在vIEwDIDLoad中添加:
//添加Swipgesture var up = UISwipeGestureRecognizer(target: self,action: "swipeHandler:") var down = UISwipeGestureRecognizer(target: self,action: "swipeHandler:") up.direction = .Up down.direction = .Down self.vIEw.addGestureRecognizer(up) self.vIEw.addGestureRecognizer(down)
运行后,可以看到上下滑动的手势 *** 作效果。
在main.storyboard中,给每个表情图标和对应的label,添加一个不带透明的button,用来响应点击事件。这里的点击事件,就是用户,手动选择更换频道。添加方法:
/** 用户主动点击表情,切换频道的处理函数 :param: sender 标识点击的表情 */ @IBAction func moodVIEwTapped(sender : UIbutton){ //通过UIImageVIEw的tag进行标示,可以在storyboard对应的utility的attribute inspector中设置 switch sender.tag{ case 0: emotion = Emotion.happy case 1: emotion = Emotion.sad case 2: emotion = Emotion.calm default: emotion = Emotion.angry } updateMoodVIEw() UIVIEw.animateWithDuration( 0.3,delay: 0.2,animations: { () -> VoID in self.moodVIEw.center.y += 120 },completion: { (ok) -> VoID in }) http.onSearch(emotion.rawValue) }
接下来,需要增加一个pan gesture,初定的功能是,向左pan切换歌曲,向右暂停。
// MARK: - Pan gesture /** control vIEw 拖动手势处理函数 :param: sender */ func drag(sender : UIPanGestureRecognizer){ let xdistance:CGfloat = sender.translationInVIEw(self.vIEw).x let ydistance:CGfloat = sender.translationInVIEw(self.vIEw).y switch sender.state{ case UIGestureRecognizerState.Began: println("begin") case UIGestureRecognizerState.Changed: self.controlVIEw.center.x = originalPoint.x + xdistance var NowX = self.controlVIEw.center.x //展示下一首 label if NowX <= originalPoint.x - 120 { self.nextLabel.hIDden = false }else{ self.nextLabel.hIDden = true } //展示暂停 label if NowX >= originalPoint.x + 120{ self.pauseLabel.hIDden = false }else{ self.pauseLabel.hIDden = true } case UIGestureRecognizerState.Ended: var NowX = self.controlVIEw.center.x self.nextLabel.hIDden = true //需要切换歌曲 if NowX <= originalPoint.x - 120{ self.nextLabel.hIDden = true self.playerDIDFinishPlaying() UIVIEw.animateWithDuration( 0.3,animations: { () -> VoID in self.controlVIEw.center.x = self.originalPoint.x },completion: nil) } //需要暂停 else if NowX >= originalPoint.x + 120{ self.circularProgressVIEw.pause() UIVIEw.animateWithDuration( 0.3,animations: { () -> VoID in self.controlVIEw.center.x = self.vIEw.frame.wIDth },completion: nil) }else{ self.circularProgressVIEw.play() UIVIEw.animateWithDuration( 0.3,completion: nil) } default: println("default") } }
还有部分 *** 作,不过可以查看源码,获取详情。
总结以上是内存溢出为你收集整理的小贼音乐--Swift开发笔记 Step 3全部内容,希望文章能够帮你解决小贼音乐--Swift开发笔记 Step 3所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)