//
//  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的更多相关文章

  1. Atitit 动态按钮图片背景颜色与文字组合解决方案

    Atitit 动态按钮图片背景颜色与文字组合解决方案 转换背景颜色,setFont("cywe_img", fontScale, 50, 5) 设置文字大小与坐标 文字分拆,使用字 ...

  2. android Button 切换背景,实现动态按钮和按钮颜色渐变

        android Button 切换背景,实现动态按钮和按钮颜色渐变 一.添加android 背景筛选器selector实现按钮背景改变     1.右键单击项目->new->Oth ...

  3. VS2010,MFC动态按钮和窗体背景图片,以及是静态文字控件透明,并避免静态文字刷新出现的重叠问题

    1.动态按钮的四种动作 1)正常 2)按下 3)滑过 4)失效 在MFC中,4个动作对应着四种位图bmp, 首先,将代表四种状态的位图加载入资源中,将对应的按钮设置为BitmapButton 第二,在 ...

  4. MFC动态按钮的创建及其消息响应(自定义消息)

    动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC_D_BTN 10000 2.在类的OnInitDialog()函数中动态创建按钮(建立按钮对象时最好建立对象的指针 ...

  5. MFC动态按钮的创建及其消息响应 和 自定义消息

    原文链接: http://www.cnblogs.com/gaohongchen01/p/4046525.html 动态按钮(多个)的创建: 1.在类中声明并定义按钮控件的ID #define IDC ...

  6. swift计算label动态宽度和高度

    swift计算label动态宽度和高度 func getLabHeigh(labelStr:String,font:UIFont,width:CGFloat) -> CGFloat { let ...

  7. vue之小小动态按钮

    Vue是前台框架,可以独立完成前后端分离式web项目渐进式的javascript框架 ,今天我们来设计一个简单的动态按钮   具体效果图如下: 点击后会变成这样: 首先我们需要下载vue.js:htt ...

  8. Swift - 获取、改变按钮的标题文本(UIButton点击切换title)

    在开发中,我们常常需要动态地改变按钮标签文字,使用 setTitle() 函数就可以了.有时我们需要在几个标题间切换,比如下面样例所示,按钮点击后按钮文字会在"播放""暂 ...

  9. swift class的动态派发

    一.测试代码 class BaseCallClass{ func NormalCall(){} @objc func OcCall(){} @objc dynamic func OcDynamicCa ...

随机推荐

  1. 什么是HBase(五) HBase的运维工具

    常用工具 文件修复 hbck 文件查看 hfile WAL查看工具 hlog 压缩测试工具 compressTest(字段前缀编码以及block压缩设置后进行测试) 数据迁移工具copyTable 导 ...

  2. Advanced Installer 换产品ID,生成文件名

    换生成名: -

  3. 黄聪:Navicat for MySQL的1577错误解决

    今天尝试使用了Windows下的可视化mysql数据库管理工具Navicat,界面清爽,易操作上手,感觉还不错. 不过当连接上mysql后,无论打开任何一个数据库,都会提示:1577 – Cannot ...

  4. 内核程序开发 LED灯顺序点亮、顺序熄灭

    根据实际考试情况,你要按顺序这么来干. 首先,把老师给的文件1.LED灯顺序点亮.顺序熄灭导入到虚拟机里你喜欢的目录下 进入此目录1.LED灯顺序点亮.顺序熄灭: 看到这三个文件,依次打开背过,老师出 ...

  5. 【ZZ】浅谈大型web系统架构 | 菜鸟教程

    浅谈大型web系统架构 http://www.runoob.com/w3cnote/large-scale-web-system-architecture.html

  6. vconsole使用

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  7. requests and BeautifulSoup

    requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作, ...

  8. Go语言环境安装详细介绍

    工具链介绍 go有两套编译工具链,分别是从plant9移植过来的gc和依赖gcc的gccgo. 官方为gc工具链提供了二进制安装包和源码, 可以根据需要选择一种安装方式.gc工具链对操作系统和CPU类 ...

  9. 横向文本框 cursor:pointer 出现手型

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 【Directshow】IFilterGraph::AddFilter方法参数问题<转>

    看dx里dshow的例子和别人的程序,用IFilterGraph::AddFilter()这个API添加filter到Graph的时候,第二个参数是一个设备友好名称: 我看有的填的是通过IProper ...