用 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)
我们在第一部分的文章中详细讲解了创建一个通知中心插件的整体过程.我们成功的在通知中心里面显示了新闻列表.但是截止到目前,我们还不能从通知中心的列表中查看新闻的详细内容.在这次的教程中,我们就以上次的教 ...
随机推荐
- 搞明白这八个问题,Linux系统就好学多了。
正在犹豫入坑Linux学习的同学或者已经入坑的同学,经常会问到这样八个问题.今天,这些问题我都会一一解答,希望我的看法能帮助各位同学.常言道“好的开始是成功的一半”,如果你明白了以下八个问题,就能有一 ...
- Cutting Sticks
题意: l长的木棒,给出n个切割点,每切一次的费用为切得木棒的长度,完成切割的最小费用. 分析: 区间dp入门,区间dp的特点,一个大区间的解可以转换成小区间的解组合起来,每个切割点的标号代表边界. ...
- 在ubuntu下配置android开发环境
http://developer.android.com/sdk/installing/index.html 基本上上面官网的链接可以解决所有问题,但是具体在安装过程中还是有一些坑. 说说具体流程 1 ...
- WeChat Official Account Admin Platform Message API Guide
Keyword: WeChat Message API Text Image Location Link Event Music RichMedia Author: PondBay Studio[We ...
- Windows下GNU之gcc体验方法
Windows 现在在Windows下开发C/C++程序一般都是用微软的编译器,当年的Borland已经成为传说.但是如果你不想付钱的话,也可以考虑Windows下的GCC. 在Windows下体验G ...
- Java并发控制机制详解
在一般性开发中,笔者经常看到很多同学在对待java并发开发模型中只会使用一些基础的方法.比如Volatile,synchronized.像Lock和atomic这类高级并发包很多人并不经常使用.我想大 ...
- CalendarUtil
package ch.makery.address.util; import java.text.ParseException; import java.text.SimpleDateFormat; ...
- POJ 1611 The Suspects (并查集)
The Suspects 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/B Description 严重急性呼吸系统综合症( S ...
- 12 为何使用Html5+CSS3
一:大多浏览器支持,低版本也没问题 我看点这方面的资料,是为了做手机应用网站(有三个方案,这个是备用方案),可以开发响应式网站,可以脱离开发平台进行跨平台. 在Html5网页中引入Modernizr, ...
- st_Alarm_GenAlarmDealTime
USE [ChiefmesNew]GO/****** Object: StoredProcedure [dbo].[st_Alarm_GenAlarmDealTime] Script Date: 04 ...