用 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)
我们在第一部分的文章中详细讲解了创建一个通知中心插件的整体过程.我们成功的在通知中心里面显示了新闻列表.但是截止到目前,我们还不能从通知中心的列表中查看新闻的详细内容.在这次的教程中,我们就以上次的教 ...
随机推荐
- hdu 1573 x问题(中国剩余定理)HDU 2007-1 Programming Contest
只是套模板而已(模板其实也不懂). 留着以后好好学的时候再改吧. 题意—— X = a[i] MOD b[i]; 已知a[i],b[i],求在[1, n]中存在多少x满足条件. 输入—— 第一行一个整 ...
- 向Oracle中插入记录时,出现“Oracle.DataAccess.Client.OracleException ORA-00933 ”错误
错误信息的弹出框
- Dropping water balloons
题意: 给你k个水球n层楼(n很大) 现在做实验在楼上向下丢水球,若水球没破可以重新丢,求把所有水球弄破的最小试验次数. 分析: 开始完全没思路啊.从正面求没法做不会表示状态,做实验是只能从第一层,一 ...
- 根据给定的日期给 dateEdit 控件增加颜色
private void dateEdit1_DrawItem(object sender, DevExpress.XtraEditors.Calendar.CustomDrawDayNumberCe ...
- SqlServer中输出错误消息
raiserror('所有参数都不能为空',16,1,@@error)
- bzoj 1408 [Noi2002]Robot(欧拉函数)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1408 [题意] 求m的所有约数中,满足可以分解成(奇数个不同素数/偶数个不同素数/其 ...
- Windows server 2008 上部署 MVC (NopCommerce 3.4)网站
自己用开源框架做了个商城,该框架是基于mvc4的,本地编译通过,运行一切正常,关于发布遇到了好几个问题. 本地: IIS7.5. VS2013 总结后发现只需要设置两个问题,就不会有那些古怪的问题:什 ...
- [Hive - LanguageManual] GroupBy
Group By Syntax Simple Examples Select statement and group by clause Advanced Features Multi-Group-B ...
- java中的==和equals的区别
关于JAVA中的==和equals函数的区别 今天在研读Thinking in java 时注意到==和equals的区别,于是就通过查看JDK_API才读懂了他们的区别,于是将心得分享一下,望批评指 ...
- pyinstaller使用小结
安装pyinstaller pip install -U pyinstaller 生成控制台程序 pyinstaller ./example.py 在当前目录的dist文件夹内可以找到编译成功的程序 ...