iOS:在制作动画时,UIView会更改大小,如何防止这种情况发生?

时间:2019-01-10 14:26:34

标签: ios swift

我的xcode项目中遇到了一些问题,拖动时UIView的大小发生了变化。请查看此GIF,您将明白我的意思:

UIView Resizing on drag

我正在使用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

我在这里想念什么吗?非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

我发现了问题。似乎将dialogView顶部的自动布局约束设置为安全区域是问题所在。我更改为相对于超级视图而言,从而解决了该问题。感谢@ E.coms和@BaseZen指出自动布局必须成为问题。现在,我将其设置为相对于“视图”而不是“安全区域”,它可以正常工作。非常感谢。