我有一个名为DropitBehavior
的类,它继承自UIDynamicBehavior
。我的UIViewController
中有两个属性。
@property (strong, nonatomic) UIDynamicAnimator *animator;
@property (strong, nonatomic) DropitBehavior *dropitBehavior;
惰性初始化器定义如下。动画运行正常。
- (UIDynamicAnimator *)animator
{
if (!_animator) {
_animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.gameView];
//[_animator addBehavior:self.dropitBehavior];
}
return _animator;
}
- (DropitBehavior *)dropitBehavior
{
if (!_dropitBehavior) {
_dropitBehavior = [[DropitBehavior alloc] init];
[self.animator addBehavior:_dropitBehavior];
}
return _dropitBehavior;
}
但如果我在addBehavior
初始化程序中调用animator
,则根本就没有动画。据我了解,动画应该以两种方式运行。第二种方式有什么问题?
答案 0 :(得分:1)
你正在覆盖@property
的吸气剂,所以从你的代码判断,动画师不会被创建,直到你用dropitBehavior
方法调用它。
您通常会在viewDidLoad
或viewWillAppear
方法中向动画制作工具添加行为,因此您知道您的视图已准备好进行动画处理。您的代码看起来像这样:
- (UIDynamicAnimator *)animator {
if (!_animator) {
_animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.gameView];
}
return _animator;
}
- (DropitBehavior *)dropitBehavior {
if (!_dropitBehavior) {
_dropitBehavior = [[DropitBehavior alloc] init];
}
return _dropitBehavior;
}
-(void)viewWillAppear {
[super viewWillAppear];
[self.animator addBehavior:self.dropitBehavior];
}