用 Swift 制作一个漂亮的汉堡按钮过渡动画

- let shortStroke: CGPath = {
- let path = CGPathCreateMutable()
- CGPathMoveToPoint(path, nil, 2, 2)
- CGPathAddLineToPoint(path, nil, 28, 2)
- return path
- }()

- let outline: CGPath = {
- let path = CGPathCreateMutable()
- CGPathMoveToPoint(path, nil, 10, 27)
- CGPathAddCurveToPoint(path, nil, 12.00, 27.00, 28.02, 27.00, 40, 27)
- CGPathAddCurveToPoint(path, nil, 55.92, 27.00, 50.47, 2.00, 27, 2)
- CGPathAddCurveToPoint(path, nil, 13.16, 2.00, 2.00, 13.16, 2, 27)
- CGPathAddCurveToPoint(path, nil, 2.00, 40.84, 13.16, 52.00, 27, 52)
- CGPathAddCurveToPoint(path, nil, 40.84, 52.00, 52.00, 40.84, 52, 27)
- CGPathAddCurveToPoint(path, nil, 52.00, 13.16, 42.39, 2.00, 27, 2)
- CGPathAddCurveToPoint(path, nil, 13.16, 2.00, 2.00, 13.16, 2, 27)
- return path
- }()
- self.top.path = shortStroke
- self.middle.path = outline
- self.bottom.path = shortStroke
- layer.fillColor = nil
- layer.strokeColor = UIColor.whiteColor().CGColor
- layer.lineWidth = 4
- layer.miterLimit = 4
- layer.lineCap = kCALineCapRound
- layer.masksToBounds = true
- let boundingPath = CGPathCreateCopyByStrokingPath(layer.path, nil, 4, kCGLineCapRound, kCGLineJoinMiter, 4)
- layer.bounds = CGPathGetPathBoundingBox(boundingPath)
- self.top.anchorPoint = CGPointMake(28.0 / 30.0, 0.5)
- self.top.position = CGPointMake(40, 18)
- self.middle.position = CGPointMake(27, 27)
- self.middle.strokeStart = hamburgerStrokeStart
- self.middle.strokeEnd = hamburgerStrokeEnd
- self.bottom.anchorPoint = CGPointMake(28.0 / 30.0, 0.5)
- self.bottom.position = CGPointMake(40, 36)
- var transform = CATransform3DIdentity
- transform = CATransform3DTranslate(transform, -4, 0, 0)
- transform = CATransform3DRotate(transform, -M_PI_4, 0, 0, 1)
- let animation = CABasicAnimation(keyPath: "transform")
- animation.fromValue = NSValue(CATransform3D: CATransform3DIdentity)
- animation.toValue = NSValue(CATransform3D: transform)
- animation.timingFunction = CAMediaTimingFunction(controlPoints: 0.25, -0.8, 0.75, 1.85)
- animation.beginTime = CACurrentMediaTime() + 0.25
- self.top.addAnimation(animation, forKey: "transform")
- self.top.transform = transform
- let menuStrokeStart: CGFloat = 0.325
- let menuStrokeEnd: CGFloat = 0.9
- let hamburgerStrokeStart: CGFloat = 0.028
- let hamburgerStrokeEnd: CGFloat = 0.111
- let strokeStart = CABasicAnimation(keyPath: "strokeStart")
- strokeStart.fromValue = hamburgerStrokeStart
- strokeStart.toValue = menuStrokeStart
- strokeStart.duration = 0.5
- strokeStart.timingFunction = CAMediaTimingFunction(controlPoints: 0.25, -0.4, 0.5, 1)
- self.middle.addAnimation(strokeStart, forKey: "strokeStart")
- self.middle.strokeStart = menuStrokeStart
- let strokeEnd = CABasicAnimation(keyPath: "strokeEnd")
- strokeEnd.fromValue = hamburgerStrokeEnd
- strokeEnd.toValue = menuStrokeEnd
- strokeEnd.duration = 0.6
- strokeEnd.timingFunction = CAMediaTimingFunction(controlPoints: 0.25, -0.4, 0.5, 1)
- self.middle.addAnimation(strokeEnd, forKey: "strokeEnd")
- self.middle.strokeEnd = menuStrokeEnd

用 Swift 制作一个漂亮的汉堡按钮过渡动画的更多相关文章
- Swift 制作一个新闻通知中心插件1
使用 Swift 制作一个新闻通知中心插件(1) 随着 iOS 8 的发布,苹果为开发者们开放了很多新的 API,而在这些开放的接口中 通知中心插件 无疑是最显眼的一个.通知中心就不用过多介绍了,相信 ...
- 小强的HTML5移动开发之路(5)——制作一个漂亮的视频播放器
来自:http://blog.csdn.net/dawanganban/article/details/17679069 在前面几篇文章中介绍了HTML5的特点和需要掌握的基础知识,下面我们开始真正的 ...
- 纯Div+Css制作的漂亮点击按钮和关闭按钮
纯Div+Css制作的漂亮点击按钮和关闭按钮,单击点击按钮也有效果.这些都不是图片.
- 使用 Swift 制作一个新闻通知中心插件(1)
input[type="date"].form-control,.input-group-sm>input[type="date"].input-grou ...
- Swift - 制作一个在线流媒体音乐播放器(使用StreamingKit库)
在之前的文章中,我介绍了如何使用 AVPlayer 制作一个简单的音乐播放器(点击查看1.点击查看2).虽然这个播放器也可以播放网络音频,但其实际上是将音频文件下载到本地后再播放的. 本文演示如何使用 ...
- Expression Blend4经验分享:制作一个简单的图片按钮样式
这次分享如何做一个简单的图片按钮经验 在我的个人Silverlight网页上,有个Iphone手机的效果,其中用到大量的图片按钮 http://raimon.6.gwidc.com/Iphone/de ...
- Swift - 制作一个录音机(声音的录制与播放)
1,技术介绍 (1)AVFoundation.framework框架提供了AVAudioRecorder类.它可以实现录音功能. (2)而使用该框架的AVAudioPlayer类,可以实现声音的播放. ...
- css3制作一个漂亮的按钮
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFMAAAA4CAIAAAAO41POAAAGWklEQVRogeWabWwTdRzH/8EwMb6Q69
- 使用 Swift 制作一个新闻通知中心插件(2)
我们在第一部分的文章中详细讲解了创建一个通知中心插件的整体过程.我们成功的在通知中心里面显示了新闻列表.但是截止到目前,我们还不能从通知中心的列表中查看新闻的详细内容.在这次的教程中,我们就以上次的教 ...
随机推荐
- C# 类与接口的几个问题的总结(待续)
1. 有关类的多态性 C#中,类的多态性是通过在子类中重载基类的虚方法(virtual标识)或函数成员来实现. 在C#中,继承.虚方法和重写方法组合在一起才能实现多态性. 2. 显式接口成员的使用 显 ...
- MyBatis一对多双向关联——MyBatis学习笔记之七
处理has-one关系需要用到association元素,而处理has many关系则需要用到collection元素.例如本例中,假设一 名教师可同时指导多名学生,下面就来介绍如何使用collect ...
- ThinkAndroid是简洁,快速的进行Android应用程序的框架
ThinkAndroid简介ThinkAndroid是一个免费的开源的.简易的.遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单.快速的进行Android应用程序的开发,包含A ...
- delphi7在win7系统如何安装spcomm控件
1.先准备好串口控件SPCOMM,例如把它放在F盘的工具安装文件夹下,等一下加载时需要用到. 2.打开delphi7软件. 3.按下上面的Component>Install Component ...
- Tomcat 下配置OpenLayers proxy.cgi代理
摘要:在OpenLayers访问WFS服务时,会遇到跨域的问题而导致服务无法访问.此时,需要在应用程序中设置代理,通过代理进行访问.本文介绍在tomcat进行proxy.cgi文件配置,以及在调用代理 ...
- Standalone HBase
This is the default mode. Standalone mode is what is described in the quickstart section. In standal ...
- Hibernate之HQL查询
一.Hibernate 提供了以下几种检索对象的方式: 导航对象图检索方式: 根据已经加载的对象导航到其他对象 OID 检索方式: 按照对象的 OID 来检索对象 HQL 检索方式:使用面向对象的 H ...
- jps用法
jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上 ...
- SaltStack安装(CentOS7.x)
安装基础: 参考文档:https://docs.saltstack.com/en/latest/topics/installation/rhel.html 1.导入SaltStack仓库key: wg ...
- BestCoder Round #71 (div.2) (hdu 5620 菲波那切数列变形)
KK's Steel Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...