力学场

iOS 物理行为仿真UIDynamicAnimator

2021-09-26  本文已影响0人  山杨
    // 1. UIDynamicAnimator来负责仿真
    animator = [[UIDynamicAnimator alloc] initWithReferenceView:view];
    // 1.自由落体
    UIGravityBehavior *gravity = [[UIGravityBehavior alloc] initWithItems:views];
    [gravity setAngle:M_PI_2 magnitude:0.1];
    // 开始仿真
    [animator addBehavior:gravity];
    
    // 2.碰撞检测
    UICollisionBehavior *collision = [[UICollisionBehavior alloc] initWithItems:views];
    // 设置不要出边界,碰到边界会被反弹
    collision.translatesReferenceBoundsIntoBoundary = YES;
    collision.collisionMode = UICollisionBehaviorModeBoundaries;
   // 设置碰撞代理(根据需要设置)
    collision.collisionDelegate = self;
    // 开始仿真
    [animator addBehavior:collision];
    
    // 3.物体的属性行为
    UIDynamicItemBehavior *itemProperty = [[UIDynamicItemBehavior alloc] initWithItems:views];
    // 设置物体弹性,振幅
    // 动态弹性量
    itemProperty.elasticity = 1.0;
    // 物体间的摩擦力
    itemProperty.friction = 0;
    // 相对密度
    itemProperty.density = 0.1;
    // 线速度阻力(随时间推移使得线性速度下降的阻力)
    itemProperty.resistance = 0.0;
    // 角速度阻力
    itemProperty.angularResistance = 0;
    // 相互作用力
    itemProperty.charge = 0;
    [animator addBehavior:itemProperty];
    
    // 4.添加推动行为
    UIPushBehavior *push = [[UIPushBehavior alloc] initWithItems:views mode:UIPushBehaviorModeInstantaneous];
    // 力的大小
    push.magnitude = 0.05;
    // 力的方向,水平正向x = 0.5, 垂直正向y = 0.5
    push.pushDirection = CGVectorMake(0, 0.5);
    [animator addBehavior:push];
#pragma mark - UICollisionBehaviorDelegate
// 动态物体与边界碰撞
- (void)collisionBehavior:(UICollisionBehavior*)behavior beganContactForItem:(id <UIDynamicItem>)item withBoundaryIdentifier:(nullable id <NSCopying>)identifier atPoint:(CGPoint)p {
}
上一篇 下一篇

猜你喜欢

热点阅读