0

我想在有人触摸它时将视图动画到指定的原点,然后每当用户再次触摸它时返回到其原始位置。我在故事板中使用 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];
4

2 回答 2

0

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

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

于 2016-03-21T13:29:19.923 回答
0

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

于 2016-03-21T13:30:29.747 回答