我有一个继承自UIDynamicBehavior的名为DropitBehavior的类。在我的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;
}但是如果我在animator初始化器中调用addBehavior,将根本不会有动画。据我所知,动画应该以两种方式运行。第二种方式有什么问题?
发布于 2014-04-15 22:14:36
您将覆盖@property的getter方法,因此从您的代码判断,直到您在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];
}https://stackoverflow.com/questions/23085818
复制相似问题