常用的UIDynamicBehavior有: UIGravityBehavior 重力行为 UICollisionBehavior 碰撞行为 UIAttachmentBehavior 附着行为 实战 创建动画引擎 _animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; 给视图添加仿真行为 1.UIGravityBehavior (重力行为) - (void)animateTest { UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems - (void)animateTest { // 重力行为 UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[_someView]]; gravityBehavior.gravityDirection
因此任何UI控件都能做物理仿真 UICollectionViewLayoutAttributes类默认也遵守UIDynamicItem协议 物理仿真行为 UIDynamic提供了以下几种物理仿真行为 UIGravityBehavior assign) id <UIDynamicAnimatorDelegate> delegate; 重力行为(UIGravityAnimator) 简介 给定重力方向、加速度,让物体朝着重力方向掉落 UIGravityBehavior 的初始化 //item参数 :里面存放着物理仿真元素 - (instancetype)initWithItems:(NSArray *)items; UIGravityBehavior常见方法 //添加 - (void)addItem:(id <UIDynamicItem>)item; //移除1个物理仿真元素 - (void)removeItem:(id <UIDynamicItem>)item; UIGravityBehavior
ViewController : UIViewController<UICollisionBehaviorDelegate> { UIDynamicAnimator * _animator; UIGravityBehavior _animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; _gravity = [[UIGravityBehavior
animator = UIDynamicAnimator(referenceView: box) // 添加重力行为 let gravity = UIGravityBehavior animator = UIDynamicAnimator(referenceView: box) // 添加重力行为 let gravity = UIGravityBehavior 为最弱 open var smoothness: CGFloat // 噪声场合湍流场的动画速度 open var animationSpeed: CGFloat } 重力行为:UIGravityBehavior UIGravityBehavior与UIFieldBehavior中的重力场功能有重复,这是由于UIGravityBehavior是iOS7之后就已经存在的行为,UIFieldBehavior是iOS9 UIGravityBehavior比较简单,解析如下: @available(iOS 7.0, *) @MainActor open class UIGravityBehavior : UIDynamicBehavior
1636361749-1842-6188e6152cfc1-874569.png 3.2 重力效果 重力的计算是UIGravityBehavior提供的。 重力方向通过监听加速度计CMMotionManager的变化,间隔一定时间读取设备当前的信息并设置为UIGravityBehavior的gravityDirection。 将UIGravityBehavior添加到UIDynamicAnimator,以此实现重力效果。至此,重力粒子动画组件完成。
同时为这些元素提供相关的上下文,是动力学元素与底层iOS物理引擎之间的中介,将Behavior对象添加到Animator即可实现动力仿真 UIDynamicBehavior:仿真行为,是动力学行为的父类,基本的动力学行为类UIGravityBehavior --- 动力行为(UIDynamicBehavior) 所有的动力学行为可以独立作用也可以组合使用,注意:避免重复添加行为对象,可以用懒加载 UIDynamicBehavior (抽象类): UIGravityBehavior UIDynamicAnimator中时,这个方法会被调用 - (void)willMoveToAnimator:(nullable UIDynamicAnimator *)dynamicAnimator; ---- 二、UIGravityBehavior magnitude; 方法 1.创建一个重力行为同时添加一组动力项 - (instancetype)initWithItems:(NSArray<id <UIDynamicItem>> *)items; 例子: UIGravityBehavior *gravity = [[UIGravityBehavior alloc] initWithItems:@[self.redView]]; 2.添加一个动力项 - (void)addItem:(id
var gravity: UIGravityBehavior! 这些属性是隐式解包的optionals(如类型名称后面的!所示)。 这些属性必须是可选的,因为我们没有在init方法中初始化它们。 添加以下代码在viewDidLoad的结尾处: animtor = UIDynamicAnimator(referenceView: view) gravity = UIGravityBehavior UIGravityBehavior模拟重力的行为并对一个或多个项目施加作用力,可以建模物理交互。当创建一个行为的实例时,将它与一组项目相关联 - 通常是视图。
UIColor.gray view.addSubview(square) 二、加重力 animator = UIDynamicAnimator(referenceView: view) gravity = UIGravityBehavior UIGravityBehavior模拟重力的行为并在一个或多个项目上施加力,从而允许您建模物理交互。创建行为实例时,将其与一组项目(通常是视图)相关联。