【问题标题】:CGAffineTransform causes subviews to move abruptlyCGAffineTransform 导致子视图突然移动
【发布时间】:2017-09-29 03:52:14
【问题描述】:

我有一个自定义的“卡片”视图,它有一个相应的 XIB 来布置子视图。我正在使用约束来布局子视图。

我将卡片视图添加到另一个视图,然后尝试使用 CGAffineTransform rotationAngle 对其进行动画处理。

当我触发动画时,卡片视图的子视图会根据旋转角度突然移动。同时,动画的其余部分按预期工作;它以我指定的角度旋转。

我的问题是:为什么在转换开始时子视图会改变位置以及如何防止这种情况发生?

这是我正在使用的代码示例。 view.layoutIfNeeded()view.autoresizesSubviews 似乎没有区别,仅供参考。

        let rotation = arc4random_uniform(20)
        let destinationCenterY = self.frame.height + view.frame.height
        let destinationCenterX = arc4random_uniform(UInt32(self.frame.width))
        let startTransform = CGAffineTransform(rotationAngle: CGFloat(rotation))

        UIView.animate(withDuration: 0.4, animations: {
            view.transform = startTransform
            view.center.y = destinationCenterY
            view.center.x = CGFloat(destinationCenterX)
            view.layoutIfNeeded()
            view.autoresizesSubviews = true
        }, completion: { (complete) in
            view.removeFromSuperview()
            view.transform = endTransform
        })

在使用CGAffineTransform scale 时,我还遇到了一个奇怪的子视图大小调整问题。任何帮助将不胜感激。

编辑: 添加正在发生的事情的图像。 在动画之前,视图正确对齐: 动画开始后,子视图向右移动:

【问题讨论】:

    标签: ios swift uiview core-graphics


    【解决方案1】:

    使用自动布局时,需要在动画前设置:

      view.translatesAutoresizingMaskIntoConstraints = true
    

    【讨论】:

    • 我试过了,没有效果。我用一些截图更新了原始问题
    【解决方案2】:

    为了防止我的子视图在转换开始时在我身上移动,我必须遍历子视图并设置view.translatesAutoresizingMaskIntoConstraints = true,如下所示:

    for subview in view.subviews {
        subview.translatesAutoresizingMaskIntoConstraints = true
    }
    

    感谢@DevB2F 为我指明了正确的方向!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多