我有一个 UIImageView,我想在后台使用平移效果缓慢地制作动画。我的背景图像视图有四个约束:
- 从顶部到顶部布局指南的距离(零)
- 从底部到底部布局指南的距离(零)
- 宽度(恒定为 850)
- 引导空间到superview(零,连接到代码作为
backgroundImageViewLeftMargin
出口)
图像视图的视图模式设置为“方面填充”。当我运行我的应用程序时,没有问题,显示的是静态图像。我添加以下代码来为我的视图设置动画:
-(void)animateBackgroundHorizontally:(BOOL)forward{
self.backgroundImageViewLeftMargin.constant = forward ? -500 : 0;
[self.backgroundImage setNeedsUpdateConstraints];
[UIView animateWithDuration:30 animations:^{
[self.backgroundImage layoutIfNeeded];
} completion:^(BOOL finished) {
[self animateBackgroundHorizontally:!forward];
}];
}
然后我打电话[self animateBackgroundHorizontally:YES];
给viewWillAppear:
。这是发生的事情:
图像从一个意想不到的(但总是相同的)位置开始动画(大约在屏幕中间的顶部边缘,它应该在屏幕顶部),正确地动画到它的最终位置,然后当动画回到它的原始位置位置,它确实动画正确。我动画的唯一属性是左边距。当我不调用动画代码时,它会正确显示。为什么动画从图像上看到的错误位置开始?我已经尝试设置self.backgroundImage.translatesAutoresizingMaskIntoConstraints
两者YES
(我得到了无法同时满足约束错误),NO
但它没有用。这个问题在 iOS 6 和 iOS 7 上都存在。