动画一个约束的UIView会影响另一个约束

时间:2013-11-14 01:29:26

标签: ios interface-builder xcode5 autolayout animatewithduration

我有一个UIImageView,我希望在背景中以平移效果缓慢制作动画。我的背景图片视图有四个约束:

  • 从顶部到顶部布局指南的距离(零)
  • 从底部到底部布局指南的距离(零)
  • 宽度(常数850)
  • 引导空间到superview(零,连接到代码为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:。以下是发生的事情:

enter image description here

图像从一个意外(但始终是相同的)位置开始动画(屏幕中间位于屏幕顶部的顶部边缘应该位于屏幕顶部),正确地设置动画到最终位置,然后动画回来到原来的位置,它正确动画。我正在动画的唯一属性是左边距。当我不调用动画代码时,它会正确显示。为什么动画从图像上看到的错误位置开始?我已经尝试将self.backgroundImage.translatesAutoresizingMaskIntoConstraints设置为YES(我让无法同时满足constaints 错误)和NO,但它不起作用。这个问题在iOS 6和iOS 7上都是持久的。

1 个答案:

答案 0 :(得分:0)

我已将动画启动代码放在viewDidAppear:而不是viewWillAppear:中,问题就消失了。 Insteresting。试用iOS 6和iOS 7,它们现在都运行良好。