iOS7 UIKit动力学-碰撞特性UICollisionBehavior 下

iOS7 UIKit动力学-碰撞特性UICollisionBehavior 下

大家好,又见面了,我是全栈君。

上文讲到了为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 下





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115849.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c++二叉树的先序,中序,后序遍历_二叉树的构造

    c++二叉树的先序,中序,后序遍历_二叉树的构造数据结构——二叉树先序、中序、后序三种遍历二叉树先序、中序、后序三种遍历三、代码展示:二叉树先序、中序、后序三种遍历先序遍历:32238654中序遍历:22334568后序遍历:23245683三种遍历不同之处在,输出数据放在不同之处三、代码展示:#include<stdio.h>#include<stdlib.h>typedefstructTree{int

    2025年11月18日
    4
  • 返回跳转指定页面的JS代码_页面跳转

    返回跳转指定页面的JS代码_页面跳转JS跳转页面参考代码第一种:    window.location.href=”login.jsp?backurl=”+window.location.href;第二种:    alert(“返回”);window.history.back(-1);   第三种:   window.navigate(“top.jsp”);  

    2022年8月13日
    8
  • JAVA 正则表达式_正则表达式文档

    JAVA 正则表达式_正则表达式文档一、校验数字的表达式1数字:^[0-9]*$2n位的数字:^\d{n}$3至少n位的数字:^\d{n,}$4m-n位的数字:^\d{m,n}$5零和非零开头的数字:^(0|[1-9][0-9]*)$6非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$7带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?…

    2025年12月11日
    3
  • Python画图源码|玫瑰花|皮卡丘|小猪佩奇|哆啦A梦|大白|小猫

    Python画图源码|玫瑰花|皮卡丘|小猪佩奇|哆啦A梦|大白|小猫Python各种画图源码Python各种画图源码Python真的太强大了,最近被Python的画图功能给震撼到了,原来Python还能这样画画,简直打开眼界。turtle没错,Python画图用的就是turtle这个库,这个库非常强大,简直就是神笔马良啊,可以画出各种你想要画的东西。所以下面一起来看一些效果图和视频吧效果图两个小孩皮卡丘小猪佩奇小熊猫小狗大熊小猫小鱼儿哆啦A梦小鸭子大白皮卡丘小

    2022年6月13日
    53
  • java面试时怎么做自我介绍_面试时如何做好自我介绍「建议收藏」

    java面试时怎么做自我介绍_面试时如何做好自我介绍「建议收藏」该楼层疑似违规已被系统折叠隐藏此楼查看此楼要想让人力资源考官们欣赏你,你必须明确地告诉考官们你具有应考职位必需的能力与素质,而只有您对此有信心并表现出这种信心后,你才证明了自己。所以我们要充满自信的自我介绍,那面试时如何做自我介绍,敬请阅读下文,或许下文有您想要的答案!.1、自我介绍切忌话多。.比如说,有的面试要求每个人用三句话介绍自己,难道真的只能姓名+专业+学校了?求职者遇到这种情况,当然…

    2022年7月7日
    20
  • Mybatis和ibatis的区别

    Mybatis和ibatis的区别1、Mybatis实现了接口绑定,使用更加方便。在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件,而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。这可以说是Mybatis最重要的改进。注意:虽然Mybatis支持在接口中直接使用annotation的配置方式来简化配置,不过

    2025年6月23日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号