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 就被销毁了,这样就没有办法来执行后续的物理效果啦!
所以最好把物理仿真器对象定义为属性变量,使他在整个视图的生命周期中都有效果。