使用原点制作动画UIView并不完美

时间:2016-03-21 13:06:58

标签: ios objective-c storyboard xcode7 ios-animations

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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