【问题标题】:UIView animating one constraint affects another constraintUIView 动画一个约束会影响另一个约束
【发布时间】:2013-11-26 21:12:57
【问题描述】:

我有一个 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:。这是发生了什么:

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

【问题讨论】:

    标签: ios interface-builder xcode5 autolayout animatewithduration


    【解决方案1】:

    我把动画开始代码放在viewDidAppear:而不是viewWillAppear:,问题就解决了。有趣。在 iOS 6 和 iOS 7 上都试过了,现在它们都运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 2014-08-16
      • 2020-10-21
      相关资源
      最近更新 更多