原文来自这里

iOS7中可以方便的给物体添加动态物理特性,主要使用到UIDynamicAnimator,UIDynamicBehavior以及实现了UIDynamicItem协议的对象。在iOS7中,UIView和UICollectionViewLayoutAttributes是默认实现了UIDynamicItem的。我们先看看三者的关系:

UIDynamicAnimator首先通过reference view来初始化,referenceview主要提供动画的场地坐标,UIDynamicBehavior通过要生成动画的view来生成,然后添加到UIDynamicAnimator。 Animator可以添加多个Behavior(但某些类型的behavior不能重复添加),Behavior也可以包含多个view,view同时也可以与多个behavior相联系。因此,大致的实现逻辑:

  1. 初始化UIDynamicAnimator:需要确定reference view
  2. 生成所需要的Dynamic Behaviors
  3. 将Behaviors添加到Animator中

iOS7提供了一些封装好的behavior,有 gravtivity,push,collision,snap和attachment。通过API文档,上手应该很容易。我自己做了个例子,基本就是一些基本功能的实现,有兴趣的可以看看。

在behavior中可以指定“力”的大小和方向。在现实生活中: 1N=1kg·m/s^2,而在UIKit中,1N定义为:

Accelerate a (100,100) view to 100 p/s^2

简单说就是将100×100大小的view加速到 100p/s^2所需要的“力”。

UIGravityBehavior

可以指定引力的大小和方向,注意同一个behavior不要重复添加

UICollisionBehavior

可以设置碰撞的items,路径或边界,有3种碰撞模式:

  1. 选中的items之间碰撞
  2. 和设定的boundary边界碰撞
  3. 包含上述所有的碰撞

UIAttachmentBehavior

可以选择锚点和item的重心偏移;并且可以设置阻尼(弹性系数),频率等

UISnapBehavior

snap可以将item移动到指定位置,可以设定阻尼

UIPushBehavior

可以设置矢量推力的方向和大小,还有力的作用点,有两种模式

  1. UIPushBehaviorModeContinuous:力持续的施加
  2. UIPushBehaviorModeInstantaneous:力施加后就消失
除了以上基本的几种behavior,我们也可以自行实现UIDynamicItem 协议来自定义我们所需的动画。
2013-09-17
更多高级用法,待续。

初窥UIKit Dynamics的更多相关文章

  1. Scrapy001-框架初窥

    Scrapy001-框架初窥 @(Spider)[POSTS] 1.Scrapy简介 Scrapy是一个应用于抓取.提取.处理.存储等网站数据的框架(类似Django). 应用: 数据挖掘 信息处理 ...

  2. 初窥Kaggle竞赛

    初窥Kaggle竞赛 原文地址: https://www.dataquest.io/mission/74/getting-started-with-kaggle 1: Kaggle竞赛 我们接下来将要 ...

  3. WWDC 2013 Session笔记 - UIKit Dynamics入门

    本文涉及到的WWDC2013 Session有 1.Session 206 Getting Started with UIKit Dynamics 2.Session 221 Advanced Tec ...

  4. scrapy2_初窥Scrapy

    递归知识:oop,xpath,jsp,items,pipline等专业网络知识,初级水平并不是很scrapy,可以从简单模块自己写. 初窥Scrapy Scrapy是一个为了爬取网站数据,提取结构性数 ...

  5. WWDC15 Session笔记 - Xcode 7 UI 测试初窥

    https://onevcat.com/2015/09/ui-testing/ WWDC15 Session笔记 - Xcode 7 UI 测试初窥 Unit Test 在 iOS 开发中已经有足够多 ...

  6. Java发送邮件初窥

    一.背景 最近朋友的公司有用到这个功能,之前对这一块也不是很熟悉,就和他一起解决出现的异常的同时,也初窥一下使用Apache Common Email组件进行邮件发送. 二.Java发送邮件的注意事项 ...

  7. 【软件工程】week5-个人作业-敏捷开发方法初窥

    敏捷开发方法初窥 引言:本周的软件工程个人博客作业是阅读关于敏捷开发方法的文章(http://martinfowler.com/agile.html),并撰写自己的读后感.文章内容非常丰富,对敏捷开发 ...

  8. 网页3D效果库Three.js初窥

    网页3D效果库Three.js初窥 背景 一直想研究下web页面的3D效果,最后选择了一个比较的成熟的框架Three.js下手 ThreeJs官网 ThreeJs-github; 接下来我会陆续翻译 ...

  9. iOS视频直播初窥:高仿<喵播APP>

    视频直播初窥 视频直播,可以分为 采集,前处理,编码,传输, 服务器处理,解码,渲染 采集: iOS系统因为软硬件种类不多, 硬件适配性比较好, 所以比较简单. 而Android端市面上机型众多, 要 ...

随机推荐

  1. async await基本使用

    //——<ES6经典入门到进阶>牧码人-Strive 学习笔记//express示例 const fs = require('fs'); //简单封装 fs封装成一个promise con ...

  2. JavaScript中callee,caller,argument的理解

    argument代表当前函数的参数数组: 1.callee的用法: argument.callee表示谁引用的这个函数 其他解释:(arguments.callee表示引用当前正在执行的函数,或者说是 ...

  3. Python基础-I/O模型

    一.I/O模型 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接 ...

  4. ArcGIS中国工具(ArcGISCTools)2.0在线视频

    查看地址:http://i.youku.com/gisoracle 在线看的不太清楚,支持下载视频地址 使用手册下载地址:http://pan.baidu.com/s/1kTsTyXT操作视频下载地址 ...

  5. Oracle基础之Merge into

    Merge into语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句. 通过MERGE语句,根据一张表或多表联合查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDA ...

  6. java音频播放器

    java音频播放器备份,支持wav,mp3 都是摘抄于网络,wav播放,mp3播放 播放wav版本 包: 不需要其他jar包 代码: package com; import javax.sound.s ...

  7. MSSQL 备份与恢复

    建立维护计划,需启用<SQL Server 代理>服务 建立三个子作业: 1. 按周进行的全备份,每周日零点执行 2. 按天进行的差异备份,每天中午12点执行 3. 按小时执行的事务日志备 ...

  8. bootstrap colorscheme以及theme自动生成

    http://paintstrap.com/ 是一个根据adobe kuler color scheme自动生成theme 的工具,比较直观好用,对于调整前端theme有一定参考意义

  9. kill -9 和kill-15的区别

    kill -9大家应该是非常熟悉的,杀死进程一般用kill -9的吧. 今天接触到kill -15,kill -15也是杀死进程的.那个kill -15和kill -9有什么区别呢? 其实kill - ...

  10. 简单的python爬虫--爬取Taobao淘女郎信息

    最近在学Python的爬虫,顺便就练习了一下爬取淘宝上的淘女郎信息:手法简单,由于淘宝网站本上做了很多的防爬措施,应此效果不太好! 爬虫的入口:https://mm.taobao.com/json/r ...