//

//  Created by dkb on 15/9/27.

//  Copyright © 2015年 dkb. All rights reserved.

//

// OC 实现

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,strong)UIDynamicAnimator *animatorSet;

@property (nonatomic,strong)UIGravityBehavior *gravityAnimator;

@property (nonatomic,strong)UICollisionBehavior *collistionAnimator;

// 动画集合

@property (nonatomic,strong)UIDynamicItemBehavior *itemAnimator;

@end

@implementation ViewController

- (void)viewDidLoad {

[superviewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

// 动画 Animator

// 一.UIKit Dynamic框架是IOS7当中的新特性,里面包含了一组类和方法,可以给我们的UIView赋予非常逼真的行为和特性,让我们的开发者轻松的改善用户体验.(其实就是动画集合)

// 二.UIKit Dynamic框架有哪些行为?

/*

*例如:重力丶碰撞丶密度丶摩擦力丶弹簧丶推力(无力知识)等等....

*动画集合 (UIDynamicAnimator) ---力学生成器

*重力动画 (UIGravityBehavior) --重力

*碰撞动画 (UIColissionBehavior ---碰撞)

*还有连接动画丶吸附丶推力等等...

*/

// 三.分析知识点?

/*

效果:类似腾讯QQ的聊天动画

碰撞动画丶重力动画丶动画集合丶*动画属性集合(重要)

*/

// 四.分析实现步骤?

/*

1.准备资源文件

2.给我们的self.view添加点击事件

3.创建动画集合 --- UIDynamicAnimator

4.创建重力动画 --- UIGravityBehavior

5.创建碰撞动画 --- UIColissionBehavior

6.创建动画属性集合,动态设置动画效果

7.绑定动画

*/

// 首先使用OC实现

//2. 给self.view添加点击事件

UIGestureRecognizer *gesture = [[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(onClick:)];

// 绑定手势

[self.viewaddGestureRecognizer:gesture];

// 调用第3步方法

[selfcreateAnimatorSet];

[selfcreateGravityAnimator];

[selfcreateCollistionAnimator];

[selfcreateItemAnimator];

}

// 触发手势方法

- (void)onClick:(UIGestureRecognizer *)gesture

{

UIImageView *imageView = [[UIImageViewalloc] initWithImage:[UIImageimageNamed:@"111.png"]];

// 这个方法返回的是当前手指点击的位置

imageView.center = [gesture locationInView:self.view];

[self.viewaddSubview:imageView];

// 7.绑定动画

[self.gravityAnimatoraddItem:imageView];

[self.collistionAnimatoraddItem:imageView];

[self.itemAnimatoraddItem:imageView];

}

// 3.创建动画集合 --- UIDynamicAnimator

- (void)createAnimatorSet

{

self.animatorSet = [[UIDynamicAnimatoralloc] initWithReferenceView:self.view];

}

// 4.创建重力动画 --- UIGravityBehavior

- (void)createGravityAnimator

{

self.gravityAnimator = [[UIGravityBehavioralloc] init];

// (为动画集合)绑定重力动画

[self.animatorSetaddBehavior:self.gravityAnimator];

}

// 5.创建碰撞动画 --- UIColissionBehavior

- (void)createCollistionAnimator

{

self.collistionAnimator = [[UICollisionBehavioralloc] init];

// 有三种

// 第一种: 设置边框(用来反弹)

//    self.collistionAnimator.translatesReferenceBoundsIntoBoundary = YES;

// 第二种:自定义底部(一条固定范围的线段)

//    [self.collistionAnimator addBoundaryWithIdentifier:@"line" fromPoint:CGPointMake(0, 300) toPoint:CGPointMake(100, 600)];

// 第三种:

UIBezierPath *path = [UIBezierPathbezierPathWithRect:CGRectMake(0,0, 200,200)];

[self.collistionAnimatoraddBoundaryWithIdentifier:@"cicle"forPath:path];

// (为动画集合)绑定碰撞动画

[self.animatorSetaddBehavior:self.collistionAnimator];

}

// 6.创建动画属性集合,动态设置动画效果

- (void)createItemAnimator

{

self.itemAnimator = [[UIDynamicItemBehavioralloc] init];

// 设置动画参数

// elasticity:碰撞弹性系数(0.0~1.0)

self.itemAnimator.elasticity =1.0;

// friction:摩擦力系数越大,摩擦力阻力越大(0.0~不限)

self.itemAnimator.friction =0.2;

// resistance:阻力系数(0.0~不限)

self.itemAnimator.resistance =0.2;

// 绑定属性动画

[self.animatorSetaddBehavior:self.itemAnimator];

}

//swift 实现

// 若报错检查 :1.点击事件 2.集合 3.重力动画 4.碰撞动画 5.特别是设定边界 6.绑定动画

import UIKit

class ViewController: UIViewController {

var animatorSet:UIDynamicAnimator!

var animatorGravity:UIGravityBehavior!

var animatorCollision:UICollisionBehavior!

var animatorItem:UIDynamicItemBehavior!

override func viewDidLoad() {

super.viewDidLoad()

//        2.

let gesture = UITapGestureRecognizer(target: self, action:"onClick:")

self.view.addGestureRecognizer(gesture)

self.createAnimatorSet()

self.createAnimatorGravity()

self.createAnimatorCollision()

self.createAnimatorItem()

}

func onClick(gesture:UITapGestureRecognizer)

{

// 创建UIImageView

let imageView: UIImageView = UIImageView(image :UIImage(named:"lanqiu.png"))

// 设置中心点

imageView.center = gesture.locationInView(self.view)

self.view.addSubview(imageView)

// 绑定动画

self.animatorGravity.addItem(imageView)

self.animatorCollision.addItem(imageView)

self.animatorItem.addItem(imageView)

}

//    3. 创建动画集合 --- UIDynamicAnimator

func createAnimatorSet()

{

self.animatorSet =UIDynamicAnimator(referenceView: self.view)

}

//4.创建重力动画

func createAnimatorGravity()

{

self.animatorGravity =UIGravityBehavior();

// 绑定动画

self.animatorSet.addBehavior(self.animatorGravity)

}

// 5.创建碰撞动画

func createAnimatorCollision()

{

self.animatorCollision =UICollisionBehavior()

self.animatorCollision.translatesReferenceBoundsIntoBoundary = true

self.animatorSet.addBehavior(self.animatorCollision)

}

//6.创建动画属性集合,动态设置动画效果

func createAnimatorItem()

{

self.animatorItem =UIDynamicItemBehavior()

self.animatorItem.elasticity =1.0

self.animatorItem.friction =0.2

self.animatorItem.resistance =0.2

self.animatorSet.addBehavior(self.animatorItem)

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}

IOS碰撞动画(降落动画)相关推荐

  1. VCTransitionsLibrary –自定义iOS交互式转场动画的库

    简介 VCTransitionsLibrary 提供了许多适用于入栈,出栈,模态等场景下控制器切换时的转场动画.它本身提供了一个定义好的转场动画库,你可以拖到自己工程中直接使用;也提供了许多拥有不同转 ...

  2. IOS开发基础之核心动画 基础动画、关键帧、组动画案例

    IOS开发基础之核心动画 基础动画.关键帧.组动画案例 案例源码在我的主页里.实现效果图 // // ViewController.m // 30-核心动画 // // Created by 鲁军 o ...

  3. iOS - Core Animation 核心动画

    1.UIView 动画 具体讲解见 iOS - UIView 动画 2.UIImageView 动画 具体讲解见 iOS - UIImageView 动画 3.CADisplayLink 定时器 具体 ...

  4. iOS 实现启动屏动画(Swift实现,包含图片适配)

    代码地址如下: http://www.demodashi.com/demo/12090.html 准备工作 首先我们需要确定作为宣传的图片的宽高比,这个一般是与 UI 确定的.一般启动屏展示会有上下两 ...

  5. iOS 自定义转场动画浅谈

    代码地址如下: http://www.demodashi.com/demo/11612.html 路漫漫其修远兮,吾将上下而求索 前记 想研究自定义转场动画很久了,时间就像海绵,挤一挤还是有的,花了差 ...

  6. HTML矩形与矩形、圆形与圆形、矩形与圆形元素的碰撞判断与动画

    1. 矩形与矩形 判断两个矩形是否碰撞,判断条件:d1Right > d2Left && d1Bottom > d2Top && d1Left < d ...

  7. iOS添加自定义转场动画和交互动画(一)

    准备写两篇,第一篇介绍下转场动画,第二篇介绍下我封装的一个转场动画的库,可以很简便的给VC之间的转变加上自定义动画. iOS场景对应的类是ViewController,基本上一个场景对应一个VC,从一 ...

  8. iOS图层配合核心动画详解

    Core Animation Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现 ...

  9. iOS 自定义转场动画实现小红书的push效果思路以及下雪碎屏等动画的实现

    感觉好久没写会动的Demo了,前几天写了很久的Block源码分析,分析了几天整个人都不好了,都不知道block是什么了......,有需要的同学可以去看看,简直不要太简单Block是什么鬼毕竟也是做电 ...

最新文章

  1. 专科学历事业单位工资计算机,事业单位人来告诉你:学历跟入编之后待遇关系有多大!很直接...
  2. 玩转spring MVC(九)---Spring Data JPA
  3. onnx 测试_ONNX 现场演示教程
  4. hdu 1542/1255 Atlantis/覆盖的面积
  5. Python获取环境变量值
  6. android 开源项目列表【持续整理中。。。】
  7. List对象集合通过对象属性进行查找
  8. html+css前端面试题(一)
  9. NumPy库---拷贝
  10. Everyting 文件查找工具
  11. ppt文件太大怎么压缩?
  12. 送给计算机老师的话,送给老师的话经典语录
  13. OpenAI gym Atari游戏的环境设置
  14. 基于语音的疲劳度检测算法研究
  15. 最小生成树 算法思想及模板代码
  16. Oracle Overview
  17. ai人工智能在手机的应用_常识在人工智能中仍然不常见
  18. 软件销售学习的内容畅谈
  19. 魅族手机使用鸿蒙系统,魅族宣布接入鸿蒙是怎么回事?魅族手机可以刷鸿蒙系统吗?...
  20. ESP使用MQTT登陆阿里云,arduino环境

热门文章

  1. Unity实现图片闪烁
  2. 牛客网笔试真题 2021 阿里巴巴编程题(4星)题解(1-5)
  3. maven下载jar包慢-解决详细
  4. [GKCTF2020]web后边两道题(接上)
  5. 基于深度学习的高精度交警检测识别系统(PyTorch+Pyside6+YOLOv5模型)
  6. 中职学校计算机实训室简介,中职学校计算机实训教学质量论文
  7. 各浏览器对HTML5的支持情况
  8. 多线程有几种实现方法都是什么?
  9. 实现多线程的3种方式
  10. it项目验收--流程