具有原点的动画 UIView 无法正常工作

Posted

技术标签:

【中文标题】具有原点的动画 UIView 无法正常工作【英文标题】:Animate UIView with origin point is not working perfectly 【发布时间】:2016-03-21 13:06:57 【问题描述】:

我想在有人触摸它时将视图动画到指定的原点,然后每当用户再次触摸它时返回到其原始位置。我在故事板中使用 AutoLayout 来对齐我的视图。 它首先以完美的位置向上,但不会完美地回到原来的位置。 我将凝视原点值存储在我的 viewDidLoad 方法中的 CGFloat 变量中,然后重新分配该对象以恢复视图。 这是我的代码 向上动画(这是完美的工作)

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.2];
CGRect frame = _pickLocationView.frame;
frame.origin.y = _cityLabelView.frame.origin.y;
_pickLocationView.frame = frame;
[UIView commitAnimations];

向下动画。 (这个方法有问题)

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.2];
CGRect frame = _pickLocationView.frame;
frame.origin.y = kDefaultOriginOfPickLocationView;
_pickLocationView.frame = frame;
[UIView commitAnimations];

【问题讨论】:

向下动画怎么称呼?? 通过分配该视图的默认原点 【参考方案1】:

一个建议: 在动画开始前使用方法-[self setNeedsLayout]

【讨论】:

我应该只调用 [self setNeedsLayout] 方法还是覆盖然后调用?对不起,如果这是一个愚蠢的问题,但我是 ios 编程新手。 在[UIView commitAnimation]前使用。只需在我的答案中写上上面的代码。看看是否有任何变化。如果没有,请尝试在 commitAnimation 之后使用该方法。【参考方案2】:

不保证框架的最终尺寸和位置在viewDidLoad 中。请改用viewDidLayoutSubviews 设置您的原始值。请注意viewDidLayoutSubviews 可以在视图的边界发生变化时被多次调用。

在您的情况下,您也可以在开始第一个动画之前保存原始值。

【讨论】:

以上是关于具有原点的动画 UIView 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

UIView 动画无法正常工作?

UIView 动画无法正常工作

UIView 动画在 UITableViewCell 内无法正常工作

UIStackView 显示/隐藏动画无法正常工作

UIView 动画在 iOS 8 中不能正常工作?

Swift 春季动画在 UITableViewCell 上无法正常工作