我有一个UIImageView,我希望在背景中以平移效果缓慢制作动画。我的背景图片视图有四个约束:
backgroundImageViewLeftMargin
outlet)图像视图的视图模式设置为“纵横填充”。当我运行我的应用程序时,没有问题,显示静态图像。我添加以下代码来动画我的视图:
-(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
(我让无法同时满足constaints 错误)和NO
,但它不起作用。这个问题在iOS 6和iOS 7上都是持久的。
答案 0 :(得分:0)
我已将动画启动代码放在viewDidAppear:
而不是viewWillAppear:
中,问题就消失了。 Insteresting。试用iOS 6和iOS 7,它们现在都运行良好。