//
//  ViewController.swift
//  MapAnimation
//
//  Created by su on 15/12/10.
//  Copyright © 2015年 tian. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
   
    var appBackGround:UIImageView!
    var mapView: UIImageView!
    var mapShowing:Bool = false
   
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.blackColor()
        //构建第一视图
        appBackGround = UIImageView(frame: CGRectMake(0, 64, self.view.frame.size.width,458))
        appBackGround.image = UIImage(named: "app-bg")
        self.view.addSubview(appBackGround)
       
        //构建地图视图
        mapView = UIImageView(frame: CGRectMake(0, 132, self.view.frame.size.width,458))
        mapView.image = UIImage(named: "map-arrow")
        mapView.alpha = 0
        CGAffineTransformScale(mapView.transform, 1.1, 1.1)
        self.view.addSubview(mapView)
       
        //构建执行动画的button
        let right = UIBarButtonItem(image: UIImage(named: "map-icon"), style: UIBarButtonItemStyle.Plain, target: self, action: "right")
        self.navigationItem.rightBarButtonItem = right
       
       
    }
    func right() {
        //显示地图的阻尼值是16 隐藏地图的阻尼值24
        let damplingStiffness:CGFloat = 8.0
        let daplingStiffnessOut:CGFloat = 12
       
        if mapShowing {
            mapShowing = false
            //隐藏地图
            UIView.animateWithDuration(0.1, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
                self.appBackGround.alpha = 1
                }, completion: nil)
           
            let jnw缩放 = JNWSpringAnimation(keyPath: "transform.scale")
            jnw缩放.damping = damplingStiffness
            jnw缩放.stiffness = damplingStiffness
            jnw缩放.mass = 1
            //将尺寸从0.9 还原成1
            jnw缩放.fromValue = 0.9
            jnw缩放.toValue = 1
            appBackGround.layer.addAnimation(jnw缩放, forKey: jnw缩放.keyPath)
            appBackGround.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0)
           
            //地图视图的动画代码
           
            UIView.animateWithDuration(0.1, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
                self.mapView.alpha = 0
                }, completion: nil)
           
            let jnw地图缩放 = JNWSpringAnimation(keyPath: "transform.scale")
            jnw地图缩放.damping = daplingStiffnessOut
            jnw地图缩放.stiffness = daplingStiffnessOut
            jnw地图缩放.mass = 1
            jnw地图缩放.fromValue = 1.1
            jnw地图缩放.toValue = 1
            self.mapView.layer.addAnimation(jnw地图缩放, forKey: jnw地图缩放.keyPath)
            self.mapView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 1)
            //位移jnw对象
            let jnw地图下移 = JNWSpringAnimation(keyPath: "transform.translation.y")
            jnw地图下移.damping = daplingStiffnessOut
            jnw地图下移.stiffness = daplingStiffnessOut
            jnw地图下移.mass = 1
            jnw地图下移.fromValue = 0
            jnw地图下移.toValue = 30
            self.mapView.layer.addAnimation(jnw地图下移, forKey: jnw地图下移.keyPath)
            self.mapView.transform = CGAffineTransformTranslate(self.mapView.transform, 0, 0)
           
           
        } else {
            //显示地图
            mapShowing = true
            //第一视图的动画代码
            UIView.animateWithDuration(0.1, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
                self.appBackGround.alpha = 0.3
                }, completion: nil)
            let scale = JNWSpringAnimation(keyPath: "transform.scale")
            scale.damping = damplingStiffness
            scale.stiffness = damplingStiffness
            scale.mass = 1
            //初始值取得当前背景的缩放值
            scale.fromValue = 1
            scale.toValue = 0.9
            self.appBackGround.layer.addAnimation(scale, forKey: scale.keyPath)
            self.appBackGround.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.9, 0.9)
 
           
            //地图动画代码
            UIView.animateWithDuration(0.1, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
                self.mapView.alpha = 1
                }, completion: nil)
            //利用jnw框架组合两个动画
            let mapScale = JNWSpringAnimation(keyPath: "transform.scale")
            mapScale.damping = daplingStiffnessOut
            mapScale.stiffness = daplingStiffnessOut
            mapScale.mass = 1
            mapScale.fromValue = 1
            mapScale.toValue = 1.1
            self.mapView.layer.addAnimation(mapScale, forKey: mapScale.keyPath)
            self.mapView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1)
            //位移动画
            let mapTranslate = JNWSpringAnimation(keyPath: "transform.translation.y")
            mapTranslate.damping = daplingStiffnessOut
            mapTranslate.stiffness = daplingStiffnessOut
            mapTranslate.mass = 1
            mapTranslate.fromValue = 30
            mapTranslate.toValue = 0
            self.mapView.layer.addAnimation(mapTranslate, forKey: mapTranslate.keyPath)
            self.mapView.transform = CGAffineTransformTranslate(self.mapView.transform, 0, 0)
           
           
        }
    }

override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

 

swift - 动画学习的更多相关文章

  1. Swift 动画学习笔记

    视频地址: http://www.swiftv.cn/course/i275v5lz 1,动画属性 position(位置),opacity(透明度,0 全透明,1 不透明),Scale(尺寸),Co ...

  2. Android动画学习(二)——Tween Animation

    前两天写过一篇Android动画学习的概述,大致的划分了下Android Animation的主要分类,没有看过的同学请移步:Android动画学习(一)——Android动画系统框架简介.今天接着来 ...

  3. 一份关于Swift语言学习资源的整理文件

    一份关于Swift语言学习资源的整理文件     周银辉 在这里下载 https://github.com/ipader/SwiftGuide

  4. Swift入门学习之一常量,变量和声明

    版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/6059421.html Swift入门学习之一常量,变量和 ...

  5. Android动画学习笔记-Android Animation

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

  6. OSG动画学习

    OSG动画学习 转自:http://bbs.osgchina.org/forum.php?mod=viewthread&tid=3899&_dsign=2587a6a9 学习动画,看了 ...

  7. android动画学习

    android动画学习   转载自:http://www.open-open.com/lib/view/open1329994048671.html 3.0以前,android支持两种动画模式,twe ...

  8. Swift开发学习(两):Playground

    Swift开发学习:Playground 大约 对于软件用户.游戏玩家,我一直提倡用户体验.也是用户,是各种开发工具的使用者.也会喜欢用户体验做得好的工具软件.这次苹果想开发人员所想,提供了一个能够玩 ...

  9. ios 动画学习的套路 (二)

    有它们俩你就够了! 说明:下面有些概念我说的不怎么详细,网上实在是太多了,说了我觉得也意义不大了!但链接都给大家了,可以自己去看,重点梳理学习写动画的一个过程和一些好的博客! (一) 说说这两个三方库 ...

随机推荐

  1. XP IE8 安装失败

    装完XP后,此时是IE6.装了QQ浏览器,提示会锁定浏览器主页,没怎么在意. 然后装IE8时,提示失败. 在网上搜索了下是其它浏览器或程序锁定了浏览器主页.卸载QQ浏览器后,成功安装IE8.

  2. 慕课网 -- 性能优化之PHP优化总结笔记

    视频链接,感兴趣的可以去看看,对我来说耳目一新. http://www.imooc.com/learn/205 什么情况下遇到PHP性能问题 1 :PHP语法使用不恰当 2 :使用了PHP语言他不擅长 ...

  3. 黄聪:自定义WordPress前台、后台顶部菜单栏管理工具条的技巧

    使用WordPress开发网站项目,很多时候都需要对进行后台定制,今天倡萌主要分享下自定义顶部管理工具条的使用技巧. 注:如无特殊说明,请将下面的代码添加到主题的 functions.php  或者插 ...

  4. (转)C#与Outlook交互收发邮件

    本文转载自:http://www.cnblogs.com/Moosdau/archive/2012/03/11/2390729.html .Net对POP3邮件系统已经集成了相应的功能,但是如果是基于 ...

  5. Bootstrap-Other:HTML编码规范

    ylbtech-Bootstrap-Other:HTML编码规范 1.返回顶部 1. Bootstrap HTML编码规范 语法 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得 ...

  6. mysql5.7.12/13在安装新实例时报错:InnoDB: auto-extending data file ./ibdata1 is of a different size 640 pages (rounded down to MB) than specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero

    .bin/mysqld --initialize-insecure --basedir=xxx --datadir=xxx 然后 .bin/mysqld_safe --defaults-file=xx ...

  7. python 构造mysql爆破器

    前言: 今天已经期末考完,睡了个觉起床写了个 mysql爆破器. 思路: 1.爆破用户->用户存在的话不会报错反之报错 2.爆破密码->密码正确不会报错反之报错 3.用户名和密码一起爆破- ...

  8. selenium webdriver——XPath 定位

    baidu.html代码如下 ....<form id="form" class="fm" action="/s" name=&quo ...

  9. python实现socket上传下载文件-进度条显示

    在python的socket编程中,可以实现上传下载文件,并且在下载的时候,显示进度条,具体的流程如下图所示: 1. 服务器端代码如下: [root@python 519]# cat server.p ...

  10. X264编码流程详解(转)

    http://blog.csdn.net/xingyu19871124/article/details/7671634 对H.264编码标准一直停留在理解原理的基础上,对于一个实际投入使用的编码器是如 ...