CGAffineTransform 导致子视图突然移动
CGAffineTransform causes subviews to move abruptly
我有一个自定义 "card" 视图,它有一个相应的 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
时调整子视图大小也有一个奇怪的问题。任何帮助将不胜感激。
编辑:
添加正在发生的事情的图像。
在动画之前,视图正确对齐:
动画开始后,子视图向右移动:
使用自动布局时,在设置动画之前需要设置:
view.translatesAutoresizingMaskIntoConstraints = true
为了防止我的子视图在转换开始时在我身上四处移动,我不得不遍历子视图并设置 view.translatesAutoresizingMaskIntoConstraints = true
,如下所示:
for subview in view.subviews {
subview.translatesAutoresizingMaskIntoConstraints = true
}
谢谢@DevB2F 为我指明了正确的方向!
我有一个自定义 "card" 视图,它有一个相应的 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
时调整子视图大小也有一个奇怪的问题。任何帮助将不胜感激。
编辑:
添加正在发生的事情的图像。
在动画之前,视图正确对齐:
使用自动布局时,在设置动画之前需要设置:
view.translatesAutoresizingMaskIntoConstraints = true
为了防止我的子视图在转换开始时在我身上四处移动,我不得不遍历子视图并设置 view.translatesAutoresizingMaskIntoConstraints = true
,如下所示:
for subview in view.subviews {
subview.translatesAutoresizingMaskIntoConstraints = true
}
谢谢@DevB2F 为我指明了正确的方向!