我应该在哪里为UIDynamicAnimator调用addBehavior?

时间:2014-04-15 13:54:14

标签: ios objective-c uikit-dynamics

我有一个名为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,则根本就没有动画。据我了解,动画应该以两种方式运行。第二种方式有什么问题?

1 个答案:

答案 0 :(得分:1)

你正在覆盖@property的吸气剂,所以从你的代码判断,动画师不会被创建,直到你用dropitBehavior方法调用它。

您通常会在viewDidLoadviewWillAppear方法中向动画制作工具添加行为,因此您知道您的视图已准备好进行动画处理。您的代码看起来像这样:

- (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];
}