具有原点的动画 UIView 无法正常工作
Animate UIView with origin point is not working perfectly
我想在有人触摸它时将视图动画化到指定的原点,然后在用户再次触摸它时返回到其原始位置。我在故事板中使用 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];
不保证框架的最终尺寸和位置在 viewDidLoad
中。使用 viewDidLayoutSubviews
来设置您的原始值。请注意,如果视图的边界发生变化,可以多次调用 viewDidLayoutSubviews
。
在您的情况下,您也可以在开始第一个动画之前保存原始值。
一个建议:
在动画开始之前使用方法-[self setNeedsLayout]
。
我想在有人触摸它时将视图动画化到指定的原点,然后在用户再次触摸它时返回到其原始位置。我在故事板中使用 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];
不保证框架的最终尺寸和位置在 viewDidLoad
中。使用 viewDidLayoutSubviews
来设置您的原始值。请注意,如果视图的边界发生变化,可以多次调用 viewDidLayoutSubviews
。
在您的情况下,您也可以在开始第一个动画之前保存原始值。
一个建议:
在动画开始之前使用方法-[self setNeedsLayout]
。