UIKit Dynamics UICollisionBehavior碰撞没有反弹

我有一个视图,它的边界是为碰撞( setTranslatesReferenceBoundsIntoBoundaryWithInsets )设置的,并且是一个具有重力的子视图设置,以便它可以与超视界相碰撞。

我试图使碰撞0%有弹性,但我还没有想出如何。 我尝试了一个弹性为0的子视图的UIDynamicItemBehavior ,同时也带有可笑的高摩擦和没有任何东西。 我的理由是,0弹性已经意味着0力在冲击上再生,但即使是负数也似乎什么都不做或者很少。

关于如何使碰撞吸收所有能量或任何它使子视图在碰撞界限时不会反弹的任何想法?


我可能做错了,但下面的例子似乎有一个简单的例子:

为有问题的项目分配UIDynamicItemBehavior:

self.itemBehaviorInQuestion = [[UIDynamicItemBehavior alloc] initWithItems:@[self.infoView]];
self.itemBehaviorInQuestion.resistance = 0;

self.collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.infoView]];            

self.collisionBehavior.collisionDelegate = self;

[self.animator addBehavior:self.collisionBehavior];
[self.animator addBehavior:self.itemBehaviorInQuestion];

实现以下UICollisionBehavior委托方法:

- (void)collisionBehavior:(UICollisionBehavior *)behavior beganContactForItem:(id<UIDynamicItem>)item withBoundaryIdentifier:(id<NSCopying>)identifier atPoint:(CGPoint)p
{
    self.itemBehaviorInQuestion.resistance = 100;
}

- (void)collisionBehavior:(UICollisionBehavior *)behavior endedContactForItem:(id<UIDynamicItem>)item withBoundaryIdentifier:(id<NSCopying>)identifier
{
    self.itemBehaviorInQuestion.resistance = 0;
}

在当时将阻力设置为高价值似乎可以缓解其反弹的项目。


您需要设置弹性的值:

UIView* square = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
self.view addSubview:square

UIDynamicAnimator* a =  [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
UIDynamicItemBehavior* behavior = [[UIDynamicItemBehavior alloc] initWithItems:@[square]];
behavior.elasticity = 0.5;
[a addBehavior:behavior];

我有一个想法如何去做,但没有测试过。 买者自负!

在你的视图中使用UIDynamicItemBehavior。 使用UICollisionBehaviorDelegate方法collisionBehavior:endedContactForItem:withItem将冲突后的阻力设置为较高值。 “抵抗”就像物品和拥有的视角之间的摩擦。 这是一个草图...

UIDynamicItemBehavior *lowFriction = [[UIDynamicItemBehavior alloc] init];
lowFriction.resistance = 0.0; 

UIDynamicItemBehavior *highFriction = [[UIDynamicItemBehavior alloc] init];
highFriction.resistance = 10.0; 

yourCollidingView *ycv = [[yourCollidingView alloc] init];  // yourCollidingView is a subclass of UIView

[noFriction addItem:ycv];

[myAnimator addBehavior:lowFriction];
[myAnimator addBehavior:highFriction];

然后在代表中

- (void)collisionBehavior:(UICollisionBehavior *)behavior endedContactForItem:(id<UIDynamicItem>)item1 withItem:(id<UIDynamicItem>)item2 {

    [lowFriction removeItem:item1];
    [lowFriction removeItem:item2];

    [highFriction addItem:item1];
    [highFriction addItem:item2];

}
链接地址: http://www.djcxy.com/p/17403.html

上一篇: UIKit Dynamics UICollisionBehavior collision without bounce

下一篇: Does AFNetworking 2.0 Supports Background task?