【发布时间】:2019-01-10 14:26:34
【问题描述】:
我在我的 xcode 项目中遇到了一些问题,当我拖动 UIView 时它的大小会发生变化。请看这个 GIF,你就会明白我的意思了:
我正在使用 panGestureRecognizer 对其进行动画处理。我已经为 x 和 y 手势设置了一大堆动画,问题似乎出现在手势处理程序的 .changed 方法中(请原谅我在这里不知道正确的术语,对此仍然很陌生)
动画效果很好,只是在我执行 .changed 动画时似乎会调整大小的 dialogView(模态)。
所以这是我在拖动时用于为 dialogView 设置动画的代码:
if gesture.state == .changed {
if velocity.x > 100 {
UIView.animate(withDuration: 0.3, animations: {
self.dialogView.transform = CGAffineTransform(rotationAngle: 50)
}) { (completed) in
}
}
if velocity.x < -50 {
UIView.animate(withDuration: 0.3, animations: {
self.dialogView.transform = CGAffineTransform(rotationAngle: -50)
}) { (completed) in
}
}
}
它会旋转,我很高兴我可以让它工作。
仅作为上下文,这是我将所有动画放入的手势函数的开头:
@objc func panGestureRecognizerAction(_ gesture: UIPanGestureRecognizer) {
let translation = gesture.translation(in: view)
let velocity = gesture.velocity(in: view)
view.frame.origin = translation
dialogVIew 是一个带有垂直堆栈视图的 UIView。 (模式视图控制器故事板的屏幕截图。
Task Detail View Controller Storyboard
我在这里遗漏了什么?非常感谢任何建议。
【问题讨论】:
-
哦,请注意,稍后我将在动画完成方面做一些事情,这就是为什么现在这些是空的。
-
额外的空间用于“早安”段落的上方和下方。我们需要查看所有影响布局的代码:自动布局约束和任何手动操作。另外,请参阅:stackoverflow.com/questions/48747666/…,其中提到:“当 [transform] 的值不是身份转换时,
frameproperty 中的值未定义,应被忽略” -
如果dialogView是按照frame初始化的,所有代码看起来都很好。但是,如果 dialogView 受自动布局约束,请在 IB 中显示约束。这就是导致动画期间实际尺寸的问题。
-
感谢您的回复@BaseZen,我现在将通过此链接,谢谢。为了回答您的其他问题,我在 stackview 上有 4 个自动布局约束,对话框视图中的常量为 20。 DimView 的约束,即淡入/淡出的背景,在父视图中全部设置为 0。 dialogView 从超级视图顶部和底部开始为 100,从左右开始为 15。我将在此评论下方粘贴代码
-
抱歉,我是 stackexchange 的新用户,无法在此评论中粘贴所有代码。这是一个粘贴箱,请注意,我确实将这些约束链接到 IB 网点,但尚未使用它。 pastebin.com/EVCqHKfh