IOS-UIDynamic
UIDynamic中的三个重要概念
// 实例化一个重力行为,并传入需要做动力仿真的对象view
UIGravityBehavior *gravity = [[UIGravityBehavior alloc] initWithItems:@[view]];
// 将重力行为添加到animator
[animator addBehavior:gravity];
// 实例化碰撞行为,并指定view参与碰撞
UICollisionBehavior *collsion = [[UICollisionBehavior alloc] initWithItems:@[view]];
// 指定是否启用参照系的边界
collsion.translatesReferenceBoundsIntoBoundary = YES;
// 将碰撞行为添加至animator
[animator addBehavior:collsion];
吸附行为(Snap)
/ 删除之前的吸附行为
[_animator removeBehavior:_snap];
CGPoint location = [sender locationInView:self.view];
_snap = [[UISnapBehavior alloc] initWithItem:_boxImageView snapToPoint:location];
// 生成随机振幅
CGFloat damping = arc4random_uniform(10) + 1;
_snap.damping = damping / 10.0f;
[_animator addBehavior:_snap];
if (UIGestureRecognizerStateBegan == sender.state) {
// 创建附加刚性行为
CGPoint anchorPoint = CGPointMake(_boxImageView.center.x, _boxImageView.center.y);
_attachment = [[UIAttachmentBehavior alloc] initWithItem:_boxImageView offsetFromCenter:UIOffsetMake(-25.0, -25.0) attachedToAnchor:anchorPoint];
[_animator addBehavior:_attachment];
} else if (UIGestureRecognizerStateChanged == sender.state) {
// 设置行为的锚点
[_attachment setAnchorPoint:[sender locationInView:self.view]];
} else if (UIGestureRecognizerStateEnded == sender.state) {
// 删除附加行为
[_animator removeBehavior:_attachment];
}
//附加弹性行为
if (UIGestureRecognizerStateBegan == sender.state) {
CGPoint anchor = CGPointMake(_boxImageView.center.x, _boxImageView.center.y - 100);
_attachment = [[UIAttachmentBehavior alloc] initWithItem:_boxImageView attachedToAnchor:anchor];
[_animator addBehavior:_attachment];
[_attachment setFrequency:1.0f];
[_attachment setDamping:0.1f];
} else if (UIGestureRecognizerStateChanged == sender.state) {
[_attachment setAnchorPoint:[sender locationInView:self.view]];
} else if (UIGestureRecognizerStateEnded == sender.state) {
[_animator removeBehavior:_attachment];
}
// 计算两点之间距离
CGFloat distance = sqrtf(powf(p.x - _firstPoint.x, 2.0) + powf(p.y - _firstPoint.y, 2.0));
CGFloat angle = atan2(p.y - _firstPoint.y, p.x - _firstPoint.x);
_push.magnitude = distance / 20;
_push.angle = angle;
[_push setActive:YES];
IOS-UIDynamic的更多相关文章
- iOS开发——高级篇——UIDynamic 物理引擎
一.UIDynamic 1.简介什么是UIDynamicUIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象重力.弹性碰撞 ...
- iOS开发拓展篇—UIDynamic(简单介绍)
iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...
- iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)
iOS开发拓展篇—UIDynamic(重力行为+碰撞检测) 一.重力行为 说明:给定重力方向.加速度,让物体朝着重力方向掉落 1.方法 (1)UIGravityBehavior的初始化 - (inst ...
- iOS开发拓展篇—UIDynamic(捕捉行为)
iOS开发拓展篇—UIDynamic(捕捉行为) 一.简介 可以让物体迅速冲到某个位置(捕捉位置),捕捉到位置之后会带有一定的震动 UISnapBehavior的初始化 - (instancetype ...
- 李洪强iOS开发之拓展篇—UIDynamic(简单介绍)
iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能 ...
- 李洪强iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)
iOS开发拓展篇—UIDynamic(重力行为+碰撞检测) 一.重力行为 说明:给定重力方向.加速度,让物体朝着重力方向掉落 1.方法 (1)UIGravityBehavior的初始化 - (inst ...
- iOS开发——UI篇OC篇&UIDynamic详解
iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...
- iOS基础 - UIDynamic
一.UIKit动力学 UIKit动力学最大的特点是将现实世界动力驱动的动画引入了UIKit,比如重力,铰链连接,碰撞,悬挂等效果,即将2D物理引擎引入了UIKit 注意:UIKit动力学的引入,并不是 ...
- iOS开发之UIDynamic
1.概述 什么是UIDynamic? UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架. 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象.比如:重力.弹性碰撞等现象 ...
- iOS游戏开发之UIDynamic
iOS游戏开发之UIDynamic 简介 什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 ...
随机推荐
- C++ 引用计数技术及智能指针的简单实现
一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧).最近花了点时间认真看了智能指针,特地来写这篇文章. 1.智能指针是什么 简单来说,智能指针是一个类,它对普 ...
- Something Strange (to be completed)
~/.local/share/applications/swt.desktop [Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Application ...
- Python Logging模块的简单使用
前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...
- 导致页面顶部空白一行解决方法 【】
2016年11月7日10:57:10 模板文件生成html文件之后会在body开头处加入一个可见的控制符,导致页面头部会出现一个空白行.原因是页面的编码是UTF-8 + BOM. ...
- iframe用js设定自定义高度
JS代码 function SetWinHeight(obj){ var win=obj; if (document.getElementById){ if (win && !wind ...
- SQLServer------将表和内容导入到另一个数据库
转载: http://jingyan.baidu.com/article/d5c4b52bc5c102da570dc547.html
- Mac 配置 php-fpm 时出现'/private/etc/php-fpm.conf': No such file or directory (2)
https://github.com/musicode/test/issues/5 Mac 自带 php-fpm,在终端执行 php-fpm,会报如下错误: ERROR: failed to open ...
- Eclipse中.calsspath文件解析
来自帅气的Sublime Text
- 关于.dll' could not be found 的问题以及解决方案
最近做项目遇到这个问题,搞了半天,也没有解决. 后台看看了生成的详细信息,提示引用的版本不统一,最后移除,再添加一个相同版本的Mysql.Data.Mysql.Data.Entity.EF6 就解决了 ...
- linux 远程连接工具——MTPuTTY
简介 MTPUTTY是一个非常流行的ssh客户端. 安装 官网地址:http://www.ttyplus.com/multi-tabbed-putty/ 下载并安装,运行软件,如图 添加服务器 结语 ...