首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIDynamicAnimator与[UIView animateWithDuration:]的交互

UIDynamicAnimator与[UIView animateWithDuration:]的交互
EN

Stack Overflow用户
提问于 2013-11-20 22:02:58
回答 3查看 1.5K关注 0票数 1

我正尝试在使用UIDynamics的视图中为视图添加动画。我不清楚核心动画动画和UIDynamics之间的互动,但有些事情我不明白。

我有一个带有视图控制器的测试项目,它有一个单一的视图,一个标签,它从视图的中下部开始,我试图将动画移动到中上部。

代码语言:javascript
复制
// Create the label
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(160, 400, 100, 50)];
label.text = @"hello";
[self.view addSubview:label];

// Set up the animator and collision
self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

UICollisionBehavior *collisionBehaviour = [[UICollisionBehavior alloc] initWithItems:@[ label ]];
[collisionBehaviour addBoundaryWithIdentifier:@"wall"
                                    fromPoint:CGPointMake(0, 50)
                                      toPoint:CGPointMake(320, 50)];
[self.animator addBehavior:collisionBehaviour];

// Animate the label 
[UIView animateWithDuration:1.0
                 animations:^{
                     label.frame = CGRectMake(160, 100, 320, 100);
                 }];

这只是视图顶部的一条线边界,并不靠近我的动画的开始或结束位置。我不明白为什么它会将按钮的动画影响到它的初始位置,但它确实会。

如果我注释掉addBehaviour:调用,那么动画就能正常工作。但是当我添加行为时,动画转到了错误的位置。我不明白为什么。

EN

回答 3

Stack Overflow用户

发布于 2014-02-28 19:02:32

在您的示例中标签向左移动的原因是因为您将标签的宽度从100px更改为320px,并且文本是右对齐的。

现在,至于为什么不向上移动,当您将UICollisionBehavior添加到label,然后添加到UIDynamicAnimator时,UIDynamicAnimator现在负责移动label。当您尝试将其设置为动画时,动画会关闭,然后UIDynamicAnimator会看到更改,并将标签的中心设置回原来的位置。当框架和中心改变时,如果你继承了UILabel和NSLog的子类,你可以自己看到这一点。如果将setCenter覆盖为只返回,则标签将向上移动。

如果您想要移动标签;

  1. 请勿将UICollisionBehavior附加到标注并对其进行动画处理
  2. 也会将UIDynamicItemBehavior附加到标注,然后单击addLinearVelocity
票数 0
EN

Stack Overflow用户

发布于 2014-02-28 19:11:11

如果视图由动态动画制作人员管理,则不应手动设置该视图的框架。

它在不调用-addBehavior的情况下工作的原因是,在动态动画设计器的任何行为引用标签之前,它并不关心标签。

您可以手动移动标签,并在动画完成后启动动态动画生成器,但更好的方法是使用UISnapBehavior将标签移动到所需的位置。

此外,如果更改由动态动画制作程序管理的视图的框架,则必须删除与该视图关联的所有行为,然后重新添加它们。你应该设置你的标签的初始大小,并且只改变它的位置,而不是它的大小。

票数 0
EN

Stack Overflow用户

发布于 2015-01-23 19:29:29

当您将视图框架设置在该行下方时,编写[self.animator updateItemUsingCurrentState:label];

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20098021

复制
相关文章

相似问题

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