0

我有一个名为 的类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;
}

但是如果我调用初始化程序addBehavioranimator根本不会有动画。据我了解,动画应该以两种方式运行。第二种方式有什么问题?

4

1 回答 1

1

您正在覆盖 's 的 getter ,因此从您的代码来看,动画师在您在方法@property中调用它之前不会创建。dropitBehavior

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

- (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];
}
于 2014-04-15T14:14:35.643 回答