码代码的李二狗

也许是工作上并没有这方面的需要,对UIDynamicAnimator的了解不多。这里做简单的介绍;

UIKit动力学是模拟真实世界的一些特性,主要就是UIDynamicAnimator类,通过类中的不同行为实现一些动态特性;

1、初始化

 


UIDynamicAnimator有两种初始化方式;

1
let  animator = UIDynamicAnimator(referenceView: self.view)

 self.view表示一个参照试图,用来规定物理仿真的范围

1
animator = UIDynamicAnimator.init(collectionViewLayout: <#T##UICollectionViewLayout#>)

 不是任何对象都能做物理仿真,能够进行物理仿真的元素需要遵守UIDynamicItem协议,UIView遵守了该协议,所以任何UI控件都能进行物理仿真。

UICollectionViewLayoutAttributes类默认也遵守UIDynamicItem协议,所以也可以进行仿真

2、物理仿真行为


 

UIDynamicAnimator有以下几种物理仿真行为:

UIGravityBehavior:重力行为

UICollisionBehavior:碰撞行为

UISnapBehavior:捕捉行为

UIPushBehavior:推动行为

UIAttachmentBehavior:附着行为

UIDynamicItemBehavior:动力元素行为

将物理仿真行为添加到仿真器上开始进行仿真操作;


3、UIDynamicAnimator的常见方法

1
2
3
4
5
6
7
8
//添加一个物理行为
animator .addBehavior(<#T##behavior: UIDynamicBehavior##UIDynamicBehavior#>)
 
//移除一个物理行为
animator .removeBehavior(<#T##behavior: UIDynamicBehavior##UIDynamicBehavior#>)
 
//移除全部物理行为
animator .removeAllBehaviors()

 


 

4、实际使用(以推动行为为例)

1
2
3
4
animator.removeAllBehaviors()
let push = UIPushBehavior.init(items: [self.gravity,self.push], mode: UIPushBehaviorMode.instantaneous)
push.magnitude = 1  //推动的量级必须初始化,量级的大小表示推动的速度
animator .addBehavior(push) //控件被推出视图

 再添加一种碰撞行为

1
2
3
4
collision = UICollisionBehavior.init(items: [self.gravity,self.push])
collision.translatesReferenceBoundsIntoBoundary = true
collision.collisionMode = UICollisionBehaviorMode.everything  //这里模式的选择 大家可以不断的调试来检查   尤其是混合效果 比如如果我把推动的模式写为continuous连绵不断的推动,则混合效果中控件就会贴在参照图的边缘不动
animator .addBehavior(collision)

 

 posted on   timeToShow  阅读(159)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
thanks
点击右上角即可分享
微信分享提示