Swift语言实现地图坐标弹跳动画

下面应用Swift语言做地图坐标实现弹簧跳动的效果,具体实现方法如下所示:

iOS动画大概分这几种:

CoreAnimation动画(基础)UIView动画(animateWithDuration开头的函数,带弹簧特效)UIDynamic动画(有物理引擎)

上次写弹跳动画,由于刚开始学,就用了最基础的CA动画,但是因为自己不会写KeyFrame,所以还引用了一个开源库来实现下坠的弹跳效果,这样固然是实现了需求,但是一点都不优雅——从iOS7开始,有了2、3两种动画,就不再需要用老的CA动画去一点一点拔了。做这个动画的正确姿势,应该是下面这样~

我们的需求仍然是这个弹跳的marker:

这次我用了2、3两种方式实现,效果如下:

一、UIView动画

之前使用CABasicAnimation实现,不仅代码多,还要用CATransaction控制回来的一趟callback。其实直接用iOS7的UIView动画就搞定了:

UIView.animateWithDuration(0.2,
animations:
{ self.marker.layer.position.y -= 30 },
completion: {(finished) in UIView.animateWithDuration(0.5, delay: 0,
usingSpringWithDamping: 0.2,
initialSpringVelocity: 5.0,
options: UIViewAnimationOptions.CurveEaseOut,
animations: {//弹性参数的调教,可以参见本文的“参考”部分
self.marker.layer.position.y += 30 },
completion: nil)})

在上升过程中,直接在0.2s的时间中,向上移动30px;向下过程中,为了表示弹跳的效果,使用了Spring系列参数,做了一下调整之后,感觉效果还是挺有意思的。但是单纯使用这个有一个缺点:我们要的是类似于重力下坠,而非像一根弹簧一样弹到那个位置。注意那跟蓝色的比较线,我们实现的是左边的效果,在动画过程中,它会超过那根蓝色线条,所以其实是不符合需求的。

二、UIDynamic动画

UIDynamic动画是有物理引擎的动画,我们只需要设定这个“物体”的物理特性,iOS就会自动帮我们进行物理世界的动画运算。首先我们创建它的物理特性:

var animator : UIDynamicAnimator?override func viewDidLoad() {
super.viewDidLoad()
animator = UIDynamicAnimator(referenceView: view)}
override func viewDidAppear(animated: Bool) {
let gravity = UIGravityBehavior(items: [marker2])//重力
let elastic = UIDynamicItemBehavior(items: [marker2])//弹性
elastic.elasticity = 0.6 let collision = UICollisionBehavior(items: [marker2])//边缘
let endY = marker2.frame.origin.y + marker2.frame.height//
记录marker2的底部坐标
collision.addBoundaryWithIdentifier("floor", fromPoint: CGPoint(x: 0, y: endY),
toPoint: CGPoint(x: UIScreen.mainScreen().bounds.width, y: endY))//在marker2的底部画一条线,从屏幕左边到屏幕右边
animator!.addBehavior(collision)
animator!.addBehavior(gravity)
animator!.addBehavior(elastic)}

首先我们创建一个animator,然后创建关于marker2的重力、弹性、边缘三个属性,附加在animator上。于是这个marker2便有了物理特性。然后我们和以前一样把它抬高:

UIView.animateWithDuration(0.2,
animations: {
self.marker2.layer.position.y -= 30 },
completion: {(finished : Bool) in
self.animator!.updateItemUsingCurrentState(self.marker2)//如果不update,则animator不知道它的位置被移动过了})

在动画完成后,让animator重新对它进行活动,就达到了文章开始的gif图中,第二个marker的弹跳效果。

文章到此为止,希望对大家有所帮助,谢谢。

(0)

相关推荐

  • iOS swift实现转场动画的方法示例

    转场动画介绍 转场动画在我们日常开发中是经常遇到的,所谓转场动画,就是一个控制器的view切到另一个控制器的view上过程中过的动画效果.本例子是实现了在导航控制器的titleView边上慢慢弹出一个控制器.下面话不多说,来一起看看详细的介绍: 效果图: 专场前 专场后 示例代码 首先自定义一个animator类.在需要转场的控制器内,设置代理 //需要设置转场动画的控制器titleViewVc.transitioningDelegate = aniamator//这里的animator是ani

  • 利用swift实现卡片横向滑动动画效果的方法示例

    本文主要给大家介绍了关于利用swift实现卡片横向滑动动画效果的相关资料,分享出来供大家参考学习,下面来一起看看详细的介绍吧. 根据惯例,首先上效果图: 那天去面试,面试官突然拿出手机点开了一个app,自个在那点了一会,然后问我 这个效果怎么实现,当时一看可以滑动,肯定用scrollView 或者 collectionView实现,就大概的说了下.今天刚好闲下来,就敲一敲这个效果. 先来分析下这个效果: 卡片是横向滚动,并且每个卡片的位置都是保持在屏幕中间的,而且 左右相邻的卡片都露出来一点边

  • 利用Swift实现各类的CATransition动画详解

    前言 最近因为工作的需要,打算用swift重构现有项目,实现过程中发现用到了很多系统的动画实现,因为之前的都是用OC实现的,这里主要是把一些动画效果来通过swift实现一下. 这篇文章主要是实现一下CATransition动画的不同效果. 第一步 创建一个swift文件并声明相应的枚举类型 enum TransitionAnimType : Int { case fade = 0, //淡入淡出 push, //推挤 reveal, //揭开 moveIn, //覆盖 cube, //立方体 s

  • Swift自定义iOS中的TabBarController并为其添加动画

    自定义TabBarController 有时候默认的TabBarController不能满足我们的开发需求,比如你想用彩色的图标,系统却只调用图标的轮廓,所以我们需要自己定义一下TabBar. 方法一:修改TabBarController中的TabBar 新建 CustomTabBarController 类继承自 UITabBarController,并在Storyboard中设置: 首先自定义 tabBar 的背景,在 viewDidLoad() 方法中添加: 复制代码 代码如下: // 用

  • Swift洗牌动画效果的实现方法

    目标效果: 点击动画按钮之后每张牌各自旋转 散开到屏幕上半部分的任意位置之后回到初始位置 比较像LOL男刀的技能动画 : ) 1: 创建卡牌对象 for _ in 0...49 { let cardSet = UIImageView(image: UIImage(named: "cardBackLandscape")) self.view.addSubview(cardSet) cardSet.frame = self.landscapeCardBack.frame self.card

  • Swift语言实现地图坐标弹跳动画

    下面应用Swift语言做地图坐标实现弹簧跳动的效果,具体实现方法如下所示: iOS动画大概分这几种: CoreAnimation动画(基础)UIView动画(animateWithDuration开头的函数,带弹簧特效)UIDynamic动画(有物理引擎) 上次写弹跳动画,由于刚开始学,就用了最基础的CA动画,但是因为自己不会写KeyFrame,所以还引用了一个开源库来实现下坠的弹跳效果,这样固然是实现了需求,但是一点都不优雅--从iOS7开始,有了2.3两种动画,就不再需要用老的CA动画去一点

  • vue-openlayers实现地图坐标弹框效果

    本文实例为大家分享了vue-openlayers实现地图坐标弹框的具体代码,供大家参考,具体内容如下 openlayers 这个效果是点击地图,弹出坐标信息. 点击地图边缘时,底图会跟着移动,使弹窗能完整显示出来. <template> <div class="vm"> <h2 class="h-title">弹窗 popup</h2> <div id="map" class="ma

  • Swift使用transform 实现重复平移动画效果

    摘要 要实现一组重复的动画,本质上就是找到动画开始点.结束点.在动画结束的时候,触发开始点,持续这样的动作. 这里面要梳理的逻辑就是1.触发开始点和2.监听动画结束点.这两个逻辑是实现重复动画的基础. 应用场景 将 imageView 等 UI 控件,设置成平移的动画,并且一直动画中. transform 可以实现控件的平移,但是无法连续动画. API 及语言 核心逻辑/代码 transform 可以将控件平移,为了达到连续动画,可使用递归方式实现. 动画实现 设置动画并开始 使用 UIView

  • Swift语言与Applescript的区别?AppleScript的发展状况?

    本人为非开发人员(科研工作者),使用Mac,最近了解到Applescript对提高工作效率有很多帮助,希望学一下Applescript.不过最近10.10系统将发布,新的swift语言据说也能实现AppleScript的功能.我希望能了解Applescript最近的发展状况(Apple是否会逐渐淘汰这门语言),以及学习了swift是不是就不用学AppleScript了.希望高人解答,感谢大家 1.什么是applescript AppleScript是用在MacOSX上的脚本语言,和操作系统结合的

  • iOS制作带弹跳动画发布界面

    项目中经常会用到带弹跳动画发布界面,具体内容如下 效果图: 代码: // PublishView.m // UIImage+ImageEffects.h 苹果蒙化图片的分类 pop.h弹跳动画框架 EJExtension.h模型转换框架 // ComposeModel 用于设置按钮文字与图片的模型,在本地设置plist文件保存image(按钮图片)和text(按钮文字) #import "PublishView.h" #import "BSVerticalButton.h&q

  • 简单分析Swift语言的一些基本特征

    Swift是苹果公司最新推出的编程语言,据很多人说,是用来"代替"Objective-C.但是没有确切的证据.我花了一些时间对Swift二进制和运行环境实施逆向工程技术,然后我对Swift有些少许的发现.目前为止,结论就是:Swift是没有消息机制的Objective-C. 对象 信不信由你,Swift中的对象就是Objective-C的对象.在Mach-O二进制文件中,__objc_classlist包含每个二进制文件中类的数据.其结构如下所示:   复制代码 代码如下: struc

  • 深入解析Swift语言编程中的可选链

    查询,调用属性,下标和方法上的一个可选可能 'nil' 的过程被定义为可选的链.可选链返回两个值 如果可选包含一个值,然后调用其相关属性,方法和下标返回值 如果可选包含一个"nil"值,所有的相关属性,方法和下标返回nil 由于多种查询方法,属性和下标故障组合在一起,以一种链将影响到整个链,并导致产生 'nil' 的值. 可选链作为一种替代强制解包裹 可选链与可选值后指定"?"调用一个属性,方法或下标当可选的值返回一些值. 程序用于可选链 '!' 复制代码 代码如下

  • 深入理解Swift语言中的闭包机制

    在 Swift 中的闭包类似于结构块,并可以在任何地方调用,它就像 C 和 Objective C 语言内置的函数. 函数内部定义的常数和变量引用可被捕获并存储在闭包.函数被视为封闭的特殊情况,它有 3 种形式. 在 Swift 语言闭合表达式,如下优化,重量轻语法风格,其中包括: 推导参数并从上下文菜单返回值的类型 从单封表达的隐性返回 简略参数名称 尾部闭包语法 语法 下面是一个通用的语法定义用于闭包,它接受参数并返回数据的类型: 复制代码 代码如下: {(parameters) -> re

  • Swift语言中的一些访问控制设置详解

    限制访问代码块,模块和抽象通过访问控制来完成.类,结构和枚举可以根据自己的属性,方法,初始化函数和下标来通过访问控制机制进行访问.常量,变量和函数的协议限制,并允许通过访问控制来访问全局和局部变量.应用于属性,类型及函数的访问控制可以被称为"实体". 访问控制模型是基于模块和源文件的. 模块定义为代码分配一个单独的单元,并且可以使用import 关键字导入.源文件被定义为一个单一的源代码文件,模块可访问多种类型和函数. 三种不同的访问级别是由 Swift 语言提供.它们分别是 Publ

  • Swift语言中的函数学习教程

    函数是一个组织在一起语句集合,以执行特定任务.Swift 函数类似于简单 C 函数以及复杂的 Objective C 语言函数. 它使我们能够通过函数调用内部的局部和全局参数值. 像其他任何语言一样 swift 函数也遵循相同的步骤. 函数声明:它告诉编译器有关的函数的名称,返回类型和参数. 函数定义:它提供函数的实际主体. Swift 函数包含参数类型和返回类型. 函数定义 在Swift 语言中函数是由 "func" 关键字来定义.当一个新定义函数时,它可能需要一个或几个值作为函数输

随机推荐