swift po 实现动态按钮2
// ButtonViewController.swift
// PopInstall
//
// Created by su on 15/12/11.
// Copyright © 2015年 tian. All rights reserved.
//
import UIKit
class ButtonViewController: UIViewController {
//状态
var hamburgerOpen = true
var hambureButton : MyButton?
var top:UIView?
var middle:UIView?
var bottom:UIView?
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.whiteColor()
//实例化汉堡包按钮
self.hambureButton = MyButton()
self.hambureButton?.backgroundColor = UIColor.blackColor()
self.hambureButton?.frame = CGRect(x: 100, y: 100, width: 150, height: 150)
self.hambureButton?.layer.cornerRadius = 75
self.view.addSubview(hambureButton!)
self.hambureButton?.addTarget(self, action: "didTapHanburgerButton:", forControlEvents: UIControlEvents.TouchUpInside)
//三道杠的高度
let sectionWidth:CGFloat = 80.0
let sectionHeight:CGFloat = 11.0
//绘制三道杠
top = UIView(frame: CGRect(x: self.hambureButton!.bounds.size.width / 2 - sectionWidth / 2, y: 40, width: sectionWidth, height: sectionHeight))
top!.backgroundColor = UIColor.whiteColor()
top!.userInteractionEnabled = false
top!.layer.cornerRadius = sectionHeight / 2
self.hambureButton?.addSubview(top!)
middle = UIView(frame: CGRect(x: self.hambureButton!.bounds.size.width / 2 - sectionWidth / 2, y: 69, width: sectionWidth, height: sectionHeight))
middle!.backgroundColor = UIColor.whiteColor()
middle!.userInteractionEnabled = false
middle!.layer.cornerRadius = sectionHeight / 2
self.hambureButton?.addSubview(middle!)
bottom = UIView(frame: CGRect(x: self.hambureButton!.bounds.size.width / 2 - sectionWidth / 2, y: 99, width: sectionWidth, height: sectionHeight))
bottom!.backgroundColor = UIColor.whiteColor()
bottom!.userInteractionEnabled = false
bottom!.layer.cornerRadius = sectionHeight / 2
self.hambureButton?.addSubview(bottom!)
}
func didTapHanburgerButton(sender:UIButton) {
//所有pop对象的复用实例
//颜色动画
var topColor = self.top?.pop_animationForKey("topColor") as! POPSpringAnimation?
var bottomColor = self.bottom?.pop_animationForKey("bottomColor") as! POPSpringAnimation?
//角度旋转动画
var topRotate = self.top?.layer.pop_animationForKey("topRatate") as! POPSpringAnimation?
var bottomRotate = self.bottom?.layer.pop_animationForKey("bottomRotate") as! POPSpringAnimation?
//
// //位置:Y坐标 动画
var topPosition = self.top?.layer.pop_animationForKey("topPosition") as! POPSpringAnimation?
var bottonPosition = self.bottom?.layer.pop_animationForKey("bottonPosition") as! POPSpringAnimation?
if hamburgerOpen {
//三道杠变红叉叉
hamburgerOpen = false
UIView.animateWithDuration(0.2, animations: { () -> Void in
self.middle?.alpha = 0
})
// 改变上下两道杠的颜色
if topColor != nil {
topColor?.toValue = UIColor.redColor()
} else {
topColor = POPSpringAnimation(propertyNamed: kPOPViewBackgroundColor)
topColor?.toValue = UIColor.redColor()
topColor?.springBounciness = 0
topColor?.springSpeed = 18
top?.pop_addAnimation(topColor, forKey: "topColor")
}
if bottomColor != nil {
bottomColor?.toValue = UIColor.redColor()
} else {
bottomColor = POPSpringAnimation(propertyNamed: kPOPViewBackgroundColor)
bottomColor?.toValue = UIColor.redColor()
bottomColor?.springBounciness = 0
bottomColor?.springSpeed = 18
bottom?.pop_addAnimation(bottomColor, forKey: "bottomColor")
}
//旋转上下两道杠的角度
if topRotate != nil {
topRotate?.toValue = -M_PI / 4
} else {
topRotate = POPSpringAnimation(propertyNamed: kPOPLayerRotation)
topRotate?.toValue = -M_PI / 4
topRotate?.springBounciness = 11
topRotate?.springSpeed = 18
top?.layer.pop_addAnimation(topRotate, forKey: "topRatate")
}
if bottomRotate != nil {
bottomRotate?.toValue = M_PI / 4
} else {
bottomRotate = POPSpringAnimation(propertyNamed: kPOPLayerRotation)
bottomRotate?.toValue = M_PI / 4
bottomRotate?.springBounciness = 11
bottomRotate?.springSpeed = 18
bottom?.layer.pop_addAnimation(bottomRotate, forKey: "bottomRotate")
}
//改变上下两道杠的y坐标形成红色的叉叉
if topPosition != nil {
topPosition?.toValue = 29
} else {
topPosition = POPSpringAnimation(propertyNamed: kPOPLayerTranslationY)
topPosition?.toValue = 29
topPosition?.springBounciness = 11
topPosition?.springSpeed = 18
top?.layer.pop_addAnimation(topPosition, forKey: "topPosition")
}
if bottonPosition != nil {
bottonPosition?.toValue = -29
} else {
bottonPosition = POPSpringAnimation(propertyNamed: kPOPLayerTranslationY)
bottonPosition?.toValue = -29
bottonPosition?.springBounciness = 11
bottonPosition?.springSpeed = 18
bottom?.layer.pop_addAnimation(bottonPosition, forKey: "bottonPosition")
}
} else {
//红叉叉变三道杠
hamburgerOpen = true
UIView.animateWithDuration(0.2, animations: { () -> Void in
self.middle?.alpha = 1
})
// 改变上下两道杠的颜色
if topColor != nil {
topColor?.toValue = UIColor.whiteColor()
} else {
topColor = POPSpringAnimation(propertyNamed: kPOPViewBackgroundColor)
topColor?.toValue = UIColor.whiteColor()
topColor?.springBounciness = 0
topColor?.springSpeed = 18
top?.pop_addAnimation(topColor, forKey: "topColor")
}
if bottomColor != nil {
bottomColor?.toValue = UIColor.whiteColor()
} else {
bottomColor = POPSpringAnimation(propertyNamed: kPOPViewBackgroundColor)
bottomColor?.toValue = UIColor.whiteColor()
bottomColor?.springBounciness = 0
bottomColor?.springSpeed = 18
bottom?.pop_addAnimation(bottomColor, forKey: "bottomColor")
}
//旋转上下两道杠的角度
if topRotate != nil {
topRotate?.toValue = 0
} else {
topRotate = POPSpringAnimation(propertyNamed: kPOPLayerRotation)
topRotate?.toValue = 0
topRotate?.springBounciness = 11
topRotate?.springSpeed = 18
top?.layer.pop_addAnimation(topRotate, forKey: "topRatate")
}
if bottomRotate != nil {
bottomRotate?.toValue = 0
} else {
bottomRotate = POPSpringAnimation(propertyNamed: kPOPLayerRotation)
bottomRotate?.toValue = 0
bottomRotate?.springBounciness = 11
bottomRotate?.springSpeed = 18
bottom?.layer.pop_addAnimation(bottomRotate, forKey: "bottomRotate")
}
//改变上下两道杠的y坐标形成红色的叉叉
if topPosition != nil {
topPosition?.toValue = 0
} else {
topPosition = POPSpringAnimation(propertyNamed: kPOPLayerTranslationY)
topPosition?.toValue = 0
topPosition?.springBounciness = 11
topPosition?.springSpeed = 18
top?.layer.pop_addAnimation(topPosition, forKey: "topPosition")
}
if bottonPosition != nil {
bottonPosition?.toValue = 0
} else {
bottonPosition = POPSpringAnimation(propertyNamed: kPOPLayerTranslationY)
bottonPosition?.toValue = 0
bottonPosition?.springBounciness = 11
bottonPosition?.springSpeed = 18
bottom?.layer.pop_addAnimation(bottonPosition, forKey: "bottonPosition")
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
swift po 实现动态按钮2的更多相关文章
- Atitit 动态按钮图片背景颜色与文字组合解决方案
Atitit 动态按钮图片背景颜色与文字组合解决方案 转换背景颜色,setFont("cywe_img", fontScale, 50, 5) 设置文字大小与坐标 文字分拆,使用字 ...
- android Button 切换背景,实现动态按钮和按钮颜色渐变
android Button 切换背景,实现动态按钮和按钮颜色渐变 一.添加android 背景筛选器selector实现按钮背景改变 1.右键单击项目->new->Oth ...
- VS2010,MFC动态按钮和窗体背景图片,以及是静态文字控件透明,并避免静态文字刷新出现的重叠问题
1.动态按钮的四种动作 1)正常 2)按下 3)滑过 4)失效 在MFC中,4个动作对应着四种位图bmp, 首先,将代表四种状态的位图加载入资源中,将对应的按钮设置为BitmapButton 第二,在 ...
- MFC动态按钮的创建及其消息响应(自定义消息)
动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC_D_BTN 10000 2.在类的OnInitDialog()函数中动态创建按钮(建立按钮对象时最好建立对象的指针 ...
- MFC动态按钮的创建及其消息响应 和 自定义消息
原文链接: http://www.cnblogs.com/gaohongchen01/p/4046525.html 动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC ...
- swift计算label动态宽度和高度
swift计算label动态宽度和高度 func getLabHeigh(labelStr:String,font:UIFont,width:CGFloat) -> CGFloat { let ...
- vue之小小动态按钮
Vue是前台框架,可以独立完成前后端分离式web项目渐进式的javascript框架 ,今天我们来设计一个简单的动态按钮 具体效果图如下: 点击后会变成这样: 首先我们需要下载vue.js:htt ...
- Swift - 获取、改变按钮的标题文本(UIButton点击切换title)
在开发中,我们常常需要动态地改变按钮标签文字,使用 setTitle() 函数就可以了.有时我们需要在几个标题间切换,比如下面样例所示,按钮点击后按钮文字会在"播放""暂 ...
- swift class的动态派发
一.测试代码 class BaseCallClass{ func NormalCall(){} @objc func OcCall(){} @objc dynamic func OcDynamicCa ...
随机推荐
- const T & 的适用范围
我们往往在类中的函数体,重载操作中看到 const T & 的影子,以前还是比较纳闷. 对于非内部数据类型的参数而言,象void Func(A a) 这样声明的函数注定效率比较底.因为函数体内 ...
- 02 - Unit07:显示笔记下拉菜单、笔记的分享功能、笔记的删除功能
显示笔记下拉菜单 笔记的分享功能 发送Ajax请求 绑定事件:绑定分享按钮单击事件 参数获取:笔记ID 发送请求:/share/add.do 服务器处理 ShareController ShareSe ...
- 【记录】MVC4中使用SignalR
前言 周末在偶尔翻阅微软官网的时候看到Getting Started with SignalR and MVC 4此篇文章,知道了signalr这个东西,貌似这个出来很长时间了,奈何自己一直没有发现, ...
- 【升级至sql 2012】sqlserver mdf向上兼容附加数据库(无法打开数据库 'xxxxx' 版本 611。请将该数据库升级为最新版本。)
sqlserver mdf向上兼容附加数据库(无法打开数据库 'xxxxx' 版本 611.请将该数据库升级为最新版本.) 最近工作中有一个sqlserver2005版本的mdf文件,还没有log文件 ...
- hadoop启动时,报ssh: Could not resolve hostname xxx: Name or service not known
本文转载自:http://blog.csdn.net/wodewutai17quiet/article/details/76795951 问题:hadoop启动时,报ssh: Could not re ...
- native关键字(本地方法)、 java调用so动态链接库
Java native关键字 一. 什么是Native Method 简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个ja ...
- TCL数据类型
原始数据类型在Tcl中是字符串,我们常常可以找到字符串和引用在Tcl语言中.这些原始数据类型依次创建复合数据类型列表和关联数组.在Tcl中,数据类型可以表示不仅是简单Tcl的对象,但也可以代表相同的句 ...
- 20190313_C#反转绘制字符串
效果图: 代码: private void button7_Click(object sender, EventArgs e) { Point p = new Point(10,10); Graphi ...
- 第2课 GUI程序实例分析
1. GUI程序开发概述 (1)现代操作系统提供原生SDK支持GUI程序开发 (2)GUI程序开发是现代操作系统上的主流技术 (3)不同操作系统上的GUI开发原理相同 (4)不同操作系统上的GUI S ...
- Python实现进度条总结
先说一下文本系统的控制符:\r: 将光标移动到当前行的首位而不换行:\n: 将光标移动到下一行,并不移动到首位:\r\n: 将光标移动到下一行首位. 环境:root@ubuntu16: ...