UIdynamic系列认知

时间:2023-03-08 16:58:15

1.刚上来就遇到的大坑

按照前辈们的代码码上了一段重力效果,结果不管怎么折腾都没有任何效果,不由心塞。

开始怀疑是不是模拟器不支持呀?是不是必须拖动到视图上的空间才可以呀?

结果试了各种方法还是没效果,午睡醒来发现了大坑,原来是

UIDynamicAnimator 要被定义为全局的变量,使他在视图的整个生命周期内都不被释放

刚开始都是这样搞的

UIDynamicAnimator  *animator =

[[UIDynamicAnimator alloc] initWithReferenceView:self.view];

UILabel * label = [[UILable alloc]initWithFrame:CGRectMake(100, 0, 200, 40)];

label.backgroundColor = [UIColor redColor];

[self.view addSubview:label];

UIGravityBehavior *gravity =

[[UIGravityBehavior alloc] initWithItems:@[label]];

[animator addBehavior:gravity];

上面的代码并没有一点毛用。

因为物理仿真器对象被定义为了局部变量,这样上面一段代码在执行完毕之后 物理仿真器 animator 就被销毁了,这样就没有办法来执行后续的物理效果啦!

所以最好把物理仿真器对象定义为属性变量,使他在整个视图的生命周期中都有效果。