我希望在有人触摸它时将视图设置为指定原点的动画,然后在用户再次触摸它时再回到原始位置。我在故事板中使用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];
答案 0 :(得分:0)
不保证框架的最终尺寸和位置在viewDidLoad
。请改用viewDidLayoutSubviews
来设置原始值。请注意,如果视图的边界发生更改,则可以多次调用viewDidLayoutSubviews
。
在您的情况下,您也可以在开始第一个动画之前保存原始值。
答案 1 :(得分:0)
建议:
在动画开始之前使用方法 - [self setNeedsLayout]
。