gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:03:07 24 4
gpt4 key购买 nike

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

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

最佳答案

您正在覆盖 @property 的 getter,因此从您的代码来看,直到您在 dropitBehavior 方法中调用它时才会创建动画器.

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

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

关于ios - 我应该在哪里为 UIDynamicAnimator 调用 addBehavior?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23085818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com