ios - UIView 动画一个约束会影响另一个约束

标签 ios interface-builder xcode5 autolayout animatewithduration

我有一个 UIImageView,我想在后台使用平移效果缓慢地制作动画。我的背景 ImageView 有四个约束:

  • 从顶部到顶部布局指南的距离(零)
  • 从底部到底部布局指南的距离(零)
  • 宽度(恒定为 850)
  • super View 的前导空格(零,连接到代码为 backgroundImageViewLeftMargin 导出)

  • ImageView 的 View 模式设置为“方面填充”。当我运行我的应用程序时,没有问题,显示的是静态图像。我添加以下代码来为我的 View 设置动画:
    -(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 (我得到了无法同时满足约束错误)和NO但它没有用。这个问题在 iOS 6 和 iOS 7 上都存在。

    最佳答案

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

    关于ios - UIView 动画一个约束会影响另一个约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19967837/

    相关文章:

    ios - 如何将尺寸类应用于 Xcode 中的 UIButton

    iphone - UISearchbar取消按钮自定义图像

    ios - .xcassets 支持旧的 IOS 版本

    ios - 提交表单时未使用表达式结果

    ios - J2Objc:无法使用生成的代码通过 Swift 初始化对象

    iphone - iOS : How to attach a multiple attachment file in one button using pickerview method?

    cocoa - 如何更改 Interface Builder 中的启动窗口位置

    打开旧 xib 文件时 xcode 5.1 崩溃

    ios - XCode 5 和 Kiwi/XCUnit 的单元测试问题和崩溃

    ios - 使用 AFNetworking 发布 XML 的示例?