首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该在哪里为UIDynamicAnimator调用addBehavior?

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

Stack Overflow用户
提问于 2014-04-15 21:54:14
回答 1查看 240关注 0票数 0

我有一个继承自UIDynamicBehavior的名为DropitBehavior的类。在我的UIViewController中有两个属性。

代码语言:javascript
复制
@property (strong, nonatomic) UIDynamicAnimator *animator;
@property (strong, nonatomic) DropitBehavior *dropitBehavior;

惰性初始化器的定义如下。并且动画运行正常。

代码语言:javascript
复制
- (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,将根本不会有动画。据我所知,动画应该以两种方式运行。第二种方式有什么问题?

EN

回答 1

Stack Overflow用户

发布于 2014-04-15 22:14:36

您将覆盖@property的getter方法,因此从您的代码判断,直到您在dropitBehavior方法中调用它时,才会创建动画生成器。

您通常会在viewDidLoadviewWillAppear方法中向动画器添加行为,这样就可以对视图进行动画处理了。你的代码应该是这样的:

代码语言:javascript
复制
- (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];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23085818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档