上文讲到了为window加一个边界。实现碰撞的效果,接下来我们将提到一个托付方法:

- (void)collisionBehavior:(UICollisionBehavior *)behavior

beganContactForItem:(id<UIDynamicItem>)item

withBoundaryIdentifier:(id<NSCopying>)identifier a

tPoint:(CGPoint)p;

这种方法是在边界发生碰撞的时候才去运行的

UICollisionBehavior 这个和tableview的托付方法一样理解。item是碰撞的对象。identifier为对象加入定义,p为发生碰撞的位置。

怎样实现碰撞这种方法呢,例如以下:

引用<UICollisionBehaviorDelegate>这个托付,然后把_ground对象的托付给当前这个viewController。方法例如以下:

.h

#import <UIKit/UIKit.h>
//new
@interface ViewController : UIViewController<UICollisionBehaviorDelegate>
{
UIDynamicAnimator * _animator;
UIGravityBehavior * _gravity;
UICollisionBehavior * _ground;
}
@end

.m

- (void)viewDidLoad
{
[super viewDidLoad];
UIView * apple = [[UIView alloc] initWithFrame:CGRectMake(40,40, 40, 40)];
apple.backgroundColor = [UIColor redColor];
[self.view addSubview:apple]; _animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
_gravity = [[UIGravityBehavior alloc] initWithItems:@[apple]];
[_animator addBehavior:_gravity]; _ground = [[UICollisionBehavior alloc] initWithItems:@[apple]];
_ground.translatesReferenceBoundsIntoBoundary = YES;
[_animator addBehavior:_ground];
//new
_ground.collisionDelegate = self;
}

设置_ground.collisionDelegate为试图控制器。之后当界面在发生碰撞,就能够调用一開始所说的托付方法了。

.m   仍在viewController中

- (void)collisionBehavior:(UICollisionBehavior *)behavior beganContactForItem:(id<UIDynamicItem>)item withBoundaryIdentifier:(id<NSCopying>)identifier atPoint:(CGPoint)p{
NSLog(@"好疼,我撞在%f,%f。%@",p.x,p.y,identifier);
}

小知识补充:

UICollisionBehavior的属性中有一个叫做action的属性

@property (nonatomic,copy)void (^action)(void);

非常明显的能看出来。这是一个block的结构,无參数。无返回值。

    _ground.action = ^{
NSLog(@"%@, %@",
NSStringFromCGAffineTransform(apple.transform), NSStringFromCGPoint(apple.center));
};

你能够通过这个Block来获得某个有动力学属性的对象的各种执行效果,在这里你能够看到动态引擎使用的组合变换和帧偏移位置视图依据主要的物理模型。而动态的确切值适用于这些属性可能是不感兴趣,重要的是要知道他们被应用。因此,假设您以编程方式更改帧或改变对象的属性,你能够预期,这些值将被覆盖。这意味着您不能使用转换扩展对象尽管是动态的控制下。

动态行为使用术语的方法签名的物品而不是视图。

    [_ground addBoundaryWithIdentifier:@"apple" fromPoint:CGPointMake(10, 10) toPoint:CGPointMake(320, 568)];//通过这个能够设置重力加速度的方向

通过这种方法,你能够设置视图运动的起始位置和终点位置,这里的@"apple"能够在托付方法中,被提取出来的。

执行一下。看看效果吧。

点击关注我,很多其它精彩内容!!!

群号:336146073

iOS7 UIKit动力学-碰撞特性UICollisionBehavior 下的更多相关文章

  1. iOS7 UIKit动力学-碰撞特性UICollisionBehavior 上

    我们谈到了重力上述财产UIGravityBehavior这个类. 非常明确的看法,当我们添加的属性的严重性后,,苹果UIview像掉进无底洞,地下坠,不断的加速.而如今呢,我们要在这个手机屏幕上,加入 ...

  2. iOS7 UIKit动力学-重力特性UIGravityBehavior

    续文 在iOS7中事实上新加了非常多新的特性.之前看过,也了解过一些新的内容.如新的动力学特性,TextKit的图文混排,还有自己定义的动画跳转等.那段时间也比較忙,没时间整理.如今项目也弄完了,打算 ...

  3. iOS UIKit Dynamics入门 UIKit动力学,实现重力、连接、碰撞、悬挂等动画效果

    本文为转载文章 版权归原文所有 什么是UIKit动力学(UIKit Dynamics) 其实就是UIKit的一套动画和交互体系.我们现在进行UI动画基本都是使用CoreAnimation或者UIVie ...

  4. iOS开发概述UIkit动力学,讲述UIKit的Dynamic特性,UIkit动力学是UIkit框架中模拟真实世界的一些特性。

    转发:http://my.oschina.net/u/1378445/blog/335014 iOS UIKit动力学 Dynamics UIAttachmentBehavior 实现iMessage ...

  5. UIDynamicAnimator UIKit动力学

    也许是工作上并没有这方面的需要,对UIDynamicAnimator的了解不多.这里做简单的介绍: UIKit动力学是模拟真实世界的一些特性,主要就是UIDynamicAnimator类,通过类中的不 ...

  6. 带你了解UIKit动力学

    一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象如:重力.弹性碰撞等现象 ...

  7. js对象可扩展性和属性的四个特性(下)

    # js对象可扩展性和属性的四个特性(下) 一.前言 再次花时间回顾一下基础,毕竟要想楼建的好,地基就要牢固,嘻嘻! 在开始之前需要具备对prototype.__proto__.constructor ...

  8. AIFramework框架Jittor特性(下)

    AIFramework框架Jittor特性(下)

  9. iOS开发UIkit动力学UIDynamicAnimator一系列动画

    UIDynamicAnimator类,通过这个类中的不同行为来实现一些动态特性. UIAttachmentBehavior(吸附),UICollisionBehavior(碰撞),UIGravityB ...

随机推荐

  1. ajax+json+java

    1.首先下载json所以依赖的包, Json-lib 最新版 json-lib-2.3-jdk15.jar,其官方网站是:http://json-lib.sourceforge.net/可以直接dow ...

  2. 设置grub密码

    一,明文加密的方法 vi /etc/grub.conf 在hiddenmenu下添加password=1234,保存退出. 二,密文加密的方法 2.1, 使用SHA加密方式.grub-crypt  回 ...

  3. zookeeper 丢失事件/miss event

    今天在统计页面上发现有个节点丢失了,经过仔细分析后,发现同一个节点上的二个应用(同时监控zk)其中一个丢失了一个event,检查zk cluster没有发现异常... 通过网络搜寻,出现miss ev ...

  4. Jquery Enter事件

    //IE或fireFox Event不同,所有要消除浏览器差异问题 <script type="text/javascript"> $('#<%=txtKeyWo ...

  5. SQLServer游标详解

    一.游标概念 我们知道,关系数据库所有的关系运算其实是集合与集合的运算,它的输入是集合输出同样是集合,有时需要对结果集逐行进行处理,这时就需要用到游标.我们对游标的使用一本遵循“五步法”:声明游标—& ...

  6. WinForm设置控件焦点(转)

    http://blog.csdn.net/zlwzlwzlw/article/details/8573921 winform窗口打开后文本框的默认焦点设置,进入窗口后默认聚焦到某个文本框,两种方法: ...

  7. hdu2206IP的计算

    Problem Description 在网络课程上,我学到了很多有关IP的知识.IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方 ...

  8. vs2012配置opencv及简单测试

    为visual studio2012搭建openCV平台,实现打开图片. 实现步骤: 1.1.配置环境变量 基于win7操作系统的环境配置步骤: 1.1.1 计算机—>属性—>更改设置—& ...

  9. linux学习笔记之sudo

    引用A:http://blog.chinaunix.net/uid-15811445-id-149961.html 引用B:http://os.51cto.com/art/201307/404879. ...

  10. PHP扩展开发之简单类开发

    接下来我们要用扩展的形式实现以下类(演示环境:linux.php-5.5.34-src) <?php class Person { private $_name; public function ...