【问题标题】:Core Animation and UIImageView returning to starting position核心动画和 UIImageView 返回起始位置
【发布时间】:2013-01-12 11:10:30
【问题描述】:

我有一个 UIImageView,我正在基于用户滑动在屏幕上移动。我使用 Core Animation 完成了这项工作:

 [UIView beginAnimations:nil context:nil];
 [UIView setAnimationDuration:1.0];

 movingView.frame = theRect;

 [UIView commitAnimations];

它一开始总是很好,但在从其原始位置到“theRect”位置的中途,它停止并且 UIImageView 跳回到它的起点。它永远不会在同一点上。有时在跳回来之前几乎完全通过,有时只是几乎没有移动然后跳回来。在此之后没有其他代码正在运行。我试过改变持续时间,但似乎没有关系。

如果我添加:

 [UIView setAnimationDidStopSelector:@selector(completeAnimation:finished:context:)];
 [UIView setAnimationDelegate:self];

然后它实际上会延迟直到 Duration 完成并运行选择器,即使图像本身几乎立即停止并返回其起点。

希望有人能给我一些关于这里可能发生的事情的提示。

【问题讨论】:

  • 我在您发布的代码中没有发现任何异常。根据症状,动画被触发两次是我最好的猜测。 NSLog(@"hello") 可以在提交之前吗?您应该只会看到一个“hello”。
  • 它只会被触发一次。但是,我在这里发现了问题。当我取消选中情节提要的“使用自动布局”时,它可以正常工作。虽然它被检查,但它没有。我不确定我是否在这里遗漏了一些东西,如果这是一个错误,或者有一种编程方式不会让这种情况发生。如果有人知道,我很想听听如何保持自动布局并做到这一点。谢谢。

标签: iphone ios


【解决方案1】:

如果使用自动布局,您可以动画约束的变化,而不是动画帧的变化(因为重新应用约束时,原始位置将恢复)。示例见Animating an image view to slide upwards

【讨论】:

  • 我确信 Autolayout 有充分的理由,而且它对系统来说是新的,但每次我转身都有理由取消选中 Autolayout。它似乎过于复杂,而以前管理视图的方法似乎更简单、更直接。是否有一个很好的教程可以解释为什么自动布局是一件好事(如果它甚至是)?但谢谢你的例子。它有帮助。
  • @MichaelReiland 我一定错过了您的评论:我建议您观看 WWDC 2012 视频,包括 introductionautolayout by example 视频和 Mastering Autolayout 视频。
  • 这是我正在寻找的确切答案!在我的 iphone 版本的应用程序上一切正常,但我无法弄清楚为什么每次我在 ipad 版本上出现弹出窗口或其他操作时,我的 uiimageview 都会一直返回到它的起始位置。我关闭了自动布局,一切都开始正常工作。
猜你喜欢
  • 2015-01-11
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多